基于51單片機(jī)課程設(shè)計報告.doc_第1頁
基于51單片機(jī)課程設(shè)計報告.doc_第2頁
基于51單片機(jī)課程設(shè)計報告.doc_第3頁
基于51單片機(jī)課程設(shè)計報告.doc_第4頁
基于51單片機(jī)課程設(shè)計報告.doc_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

.單片機(jī)課程設(shè)計課 題: 基于51單片機(jī)的交通燈設(shè)計專 業(yè): 機(jī)械設(shè)計制造及其自動化學(xué) 號:指導(dǎo)教師: 邵添設(shè)計日期:2017/12/18成 績:重慶大學(xué)城市科技學(xué)院電氣學(xué)院基于51單片機(jī)數(shù)字溫度計設(shè)計報告一、設(shè)計目的作用本設(shè)計是一款簡單實用的小型數(shù)字溫度計,所采用的主要元件有傳感器DS18B20,單片機(jī)AT89C52,四位共陰極數(shù)碼管一個,電容電阻若干。DS18B20支持“一線總線”接口,測量溫度范圍-55C+125C。在-10+85C范圍內(nèi),精度為0.5C。18B20的精度較差,為 2C ?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。本次數(shù)字溫度計的設(shè)計共分為五部分,主控制器,LED顯示部分,傳感器部分,復(fù)位部分,按鍵設(shè)置部分,時鐘電路。主控制器即單片機(jī)部分,用于存儲程序和控制電路;LED顯示部分是指四位共陰極數(shù)碼管,用來顯示溫度;傳感器部分,即溫度傳感器,用來采集溫度,進(jìn)行溫度轉(zhuǎn)換;復(fù)位部分,即復(fù)位電路,按鍵部分用來設(shè)置上下限報警溫度。測量的總過程是,傳感器采集到外部環(huán)境的溫度,并進(jìn)行轉(zhuǎn)換后傳到單片機(jī),經(jīng)過單片機(jī)處理判斷后將溫度傳遞到數(shù)碼管顯示。 二、設(shè)計要求(1)利用DS18B20傳感器實時檢測溫度并顯示。(2)利用數(shù)碼管實時顯示溫度。(3)當(dāng)溫度超過或者低于設(shè)定值時蜂鳴器報警,LED閃爍指示。(4).能夠手動設(shè)置上限和下限報警溫度。三、設(shè)計的具體實現(xiàn)1、系統(tǒng)概述方案一: 由于本設(shè)計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。方案設(shè)計框圖如下: 數(shù)碼管顯示電路 熱敏電阻組成的感溫電路 AD轉(zhuǎn)換 方案二:考慮到用溫度傳感器,在單片機(jī)電路設(shè)計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設(shè)計也比較簡單,故采用了方案二。2、單元電路設(shè)計與分析1、硬件設(shè)計按照系統(tǒng)設(shè)計功能的要求,確定系統(tǒng)由3個模塊組成:主控制器、測溫電路和顯示電路。數(shù)字溫度計總體電路結(jié)構(gòu)框圖所示:蜂鳴器報警模塊AT89C51單片機(jī)DB18B20溫度傳感器按鍵設(shè)置模塊電源數(shù)碼管顯示LED閃爍報警模塊單片機(jī)的選擇單片機(jī)AT89S52具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用系統(tǒng)可用二節(jié)電池供電。由于器件問題,我們使用了通用的手機(jī)5V充電器接口。復(fù)位電路模塊單片機(jī)系統(tǒng)的復(fù)位電路在這里使用的是上電+按鈕的復(fù)位電路模式,其中電阻R采用的是10K的阻值,電容采用電容值為10uF的電解電容,電路圖如下:溫度顯示模塊四位共陰極數(shù)碼管,能夠顯示小數(shù)。列掃描用P2.4P2.7口來實現(xiàn),列驅(qū)動直接51接單片機(jī)驅(qū)動。電路圖如下:溫度傳感器模塊DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)912位的數(shù)字值讀數(shù)方式。電路圖如下:按鍵模塊按鍵是用來設(shè)置報警的上下限溫。K1是用 來進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動退出;按一下K4消除按鍵音,再按一下啟動按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實現(xiàn)加1功能, K1是實現(xiàn)減1功能,K3是用來設(shè)定上下限溫度正負(fù)的。2、軟件設(shè)計主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計算溫度子程序和現(xiàn)實數(shù)據(jù)刷新子程序等。主程序 主程序的主要功能是負(fù)責(zé)溫度的實時顯示、讀出并處理DS18B20的測量溫度值。溫度測量每1S進(jìn)行一次。主流程圖如下:讀出溫度子程序 讀出溫度子程序的主要功能是讀出RAM中的9字節(jié)。在讀出時須進(jìn)行CRC校驗,校驗有錯時不進(jìn)行溫度數(shù)據(jù)的改寫。流程圖如下:溫度轉(zhuǎn)換命令子程序 溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令。當(dāng)采用12位分辨率時,轉(zhuǎn)換時間約為750ms。在本程序設(shè)計中,采用1s顯示程序延時法等待轉(zhuǎn)換的完成。流程圖如下:顯示數(shù)據(jù)刷新子程序 顯示數(shù)據(jù)刷新子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高數(shù)據(jù)顯示位為0時,將符號顯示位移入下一位。系統(tǒng)的調(diào)試及性能分析:硬件調(diào)試,首先檢查電感的焊接是否正確,然后可用萬用表測試或通電檢測。軟件調(diào)試可以先編寫顯示程序并進(jìn)行硬件的正確性檢驗,然后分別進(jìn)行主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計算溫度子程序和現(xiàn)實數(shù)據(jù)刷新子程序等的編程及調(diào)試由于DS18B20與單片機(jī)采用串行數(shù)據(jù)傳送,因此,對DS18B20進(jìn)行讀/寫編程時必須嚴(yán)格地保證讀/寫時序;否則將無法讀取測量結(jié)果。本程序采用單片機(jī)匯編或C語言編寫用 Keil C51編譯器編程調(diào)試。軟件調(diào)試到能顯示溫度值,并且在有溫度變化時顯示溫度能改變,就基本完成。性能測試可用制作的溫度計和已有的成品溫度計同時進(jìn)行測量比較。由于DS18B20的精度很高,所以誤差指標(biāo)可以限制在0.5以內(nèi)。另外,-55+125的測溫范圍使得該溫度計完全適合一般的應(yīng)用場合,其低電壓供電特性可做成用電池供電的手持溫度計。四、總結(jié)本次的課程設(shè)計使我們進(jìn)一步鞏固了書本上的知識,做到了學(xué)以致用。這是我們第二次自己動手設(shè)計的電路,通過系統(tǒng)仿真軟件Proteus和編譯軟件Keil,使我們進(jìn)一步了解了單片機(jī)的設(shè)計制作過程,其中最為困難的是軟件部分,即編程部分,我們上網(wǎng)找了好多資料,雖然經(jīng)過自己的修改,但還是有很多功能不能實現(xiàn),如溫度上下限設(shè)置。由于Proteus并不是很熟練,在使用的過程中有很多原件的名稱不知道,從而花費了大量的時間在網(wǎng)上查找,今后應(yīng)該在這方面多多努力。最后一步的焊接硬件也遇到了不少麻煩。總結(jié)經(jīng)驗的時候我們得出這樣的結(jié)論,學(xué)習(xí)應(yīng)該學(xué)以致用,有目的的去學(xué)習(xí),如果學(xué)了不用等于沒學(xué)。其次,要學(xué)以致用,理論聯(lián)系實際,這樣才會取得事半功倍的效果。五、附錄附錄一:元件清單元件名稱數(shù)量AT89C51單片機(jī)112MHZ晶振133pF電容222uF電解電容1按鍵開關(guān)5IC插座40Pin1DS18B20溫度傳感器1蜂鳴器1LED 5紅1四位一體共陰數(shù)碼管1470,1K,4.7K電阻8,2,1三極管85501導(dǎo)線若干排針若干附錄二:完整電路原理圖附錄三:焊接實物圖附錄四:源程序/* 程序名; 基于51單片機(jī)的溫度計* 功 能: 實時測量溫度,超過上下限報警,報警溫度可手動調(diào)整。K1是用來* 進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限* 調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動* 退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動退出;按一下K4消除* 按鍵音,再按一下啟動按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實現(xiàn)加1功能,* K1是實現(xiàn)減1功能,K3是用來設(shè)定上下限溫度正負(fù)的。 * 編程者: 彭明闖* 編程時間:2014/05/30 */#include #include /將intrins.h頭文件包含到主程序(調(diào)用其中的_nop_()空操作函數(shù)延時)#define uint unsigned int #define uchar unsigned char uchar max=0x00,min=0x00; /max是上限報警溫度,min是下限報警溫度bit s=0; /s是調(diào)整上下限溫度時溫度閃爍的標(biāo)志位,s=0不顯示200ms,s=1顯示1s左右bit s1=0; /s1標(biāo)志位用于上下限查看時的顯示void display1(uint z); /聲明display1()函數(shù)(display.h頭文件中的函數(shù),ds18b20.h要用應(yīng)先聲明)#includeds18b20.h #includekeyscan.h #includedisplay.h /*/*主函數(shù)/*/void main() beer=1; /關(guān)閉蜂鳴器 led=1; /關(guān)閉LED燈 timer1_init(0); /初始化定時器1(未啟動定時器1) get_temperature(1); /首次啟動DS18B20獲取溫度(DS18B20上電后自動將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器) while(1) keyscan(); get_temperature(0); display(temp,temp_d*0.625); alarm(); /* 程序名; DS18B20頭文件 * 編程者:彭明闖* 編程時間:2014/5/30 * 說 明:用到的全局變量是:無符號字符型變量temp(測得的溫度整數(shù)部分),temp_d * (測得的溫度小數(shù)部分),標(biāo)志位f(測量溫度的標(biāo)志位0表示“正溫度”1表* 示“負(fù)溫度”),標(biāo)志位f_max(上限溫度的標(biāo)志位0表示“正溫度”、1表* 示“負(fù)溫度”),標(biāo)志位f_min(下限溫度的標(biāo)志位0表示“正溫度”、1表* 示“負(fù)溫度”),標(biāo)志位w(報警標(biāo)志位1啟動報警0關(guān)閉報警)。 */#ifndef _ds18b20_h_ /定義頭文件#define _ds18b20_h_#define uint unsigned int #define uchar unsigned char sbit DQ= P23; /DS18B20接口sbit beer=P10; /用beer表示P1.0sbit led=P11; /用led表示P1.1uchar temp=0; /測量溫度的整數(shù)部分uchar temp_d=0; /測量溫度的小數(shù)部分bit f=0; /測量溫度的標(biāo)志位,0表示“正溫度” 1表示“負(fù)溫度”)bit f_max=0; /上限溫度的標(biāo)志位0表示“正溫度” 1表示“負(fù)溫度”)bit f_min=0; /下限溫度的標(biāo)志位0表示“正溫度”、1表示“負(fù)溫度”)bit w=0; /報警標(biāo)志位1啟動報警0關(guān)閉報警/*/*延時子函數(shù)/*/void ds18b20_delayus(uint t) /延時幾s while(t-);void ds18b20_delayms(uint t) /延時1ms左右uint i,j;for(i=t;i0;i-) for(j=120;j0;j-);/*/*DS18B20初始化函數(shù)/*/void ds18b20_init() uchar c=0; DQ=1;DQ=0; /控制器向DS18B20發(fā)低電平脈沖ds18b20_delayus(80); /延時15-80sDQ=1;/控制器拉高總線,while(DQ); /等待DS18B20拉低總線,在60-240s之間ds18b20_delayus(150);/延時,等待上拉電阻拉高總線DQ=1; /拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸;/*/*DS18B20字節(jié)讀函數(shù) /*/uchar ds18b20_read() uchar i;uchar d=0;DQ = 1;/準(zhǔn)備讀;for(i=8;i0;i-) d = 1; /低位先發(fā);DQ = 0;_nop_();_nop_();DQ = 1;/必須寫1,否則讀出來的將是不預(yù)期的數(shù)據(jù);if(DQ)/在12us處讀取數(shù)據(jù);d |= 0x80;ds18b20_delayus(10);return d; /返回讀取的值/*/*DS18B20字節(jié)寫函數(shù) /*/void ds18b20_write(uchar d) uchar i; for(i=8;i0;i-) DQ=0; DQ=d&0x01; ds18b20_delayus(5); DQ=1; d = 1; /*/*獲取溫度函數(shù) /*/ void get_temperature(bit flag)uchar a=0,b=0,c=0,d=0; uint i;ds18b20_init(); ds18b20_write(0xcc);/向DS18B20發(fā)跳過讀ROM命令ds18b20_write(0x44);/寫啟動DS18B20進(jìn)行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部RAMif(flag=1)/首次啟動DS18B20進(jìn)行溫度轉(zhuǎn)換需要500ms,若轉(zhuǎn)換時間不夠就出錯,讀出的是85度的錯誤值。 display1(1);/用開機(jī)動畫耗時elseds18b20_delayms(1);ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0xbe);a=ds18b20_read();/讀內(nèi)部RAM (LSB)b=ds18b20_read();/讀內(nèi)部RAM (MSB)if(flag=1)/局部位變量f=1時讀上下線報警溫度 max=ds18b20_read(); /讀內(nèi)部RAM (TH) min=ds18b20_read(); /讀內(nèi)部RAM (Tl)if(max&0x80)=0x80) /若讀取的上限溫度的最高位(符號位)為1表明是負(fù)溫度f_max=1;max=(max-0x80); /將上限溫度符號標(biāo)志位置1表示負(fù)溫度,將上限溫度裝換成無符號數(shù)。 if(min&0x80)=0x80) /若讀取的下限溫度的最高位(符號位)為1表明是負(fù)溫度f_min=1;min=(min-0x80); /將下限溫度符號標(biāo)志位置1表示負(fù)溫度,將下限溫度裝換成無符號數(shù)。 i=b;i=4;if (i=0) f=0; /i為0,正溫度,設(shè)立正溫度標(biāo)記 temp=(a4)|(b4)|(b4);/整數(shù)部分 a=(a&0x0f);/小數(shù)部分 temp_d=a; /*/*存儲極限溫度函數(shù) /*/void store_t() if(f_max=1) /若上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號數(shù)(最高位為1是負(fù),為0是正)max=max+0x80;if(f_min=1) /若下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號數(shù)min=min+0x80; ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0x4e); /向DS18B20發(fā)寫字節(jié)至?xí)捍嫫?和3(TH和TL)命令ds18b20_write(max); /向暫存器TH(上限溫度暫存器)寫溫度ds18b20_write(min); /向暫存器TL(下限溫度暫存器)寫溫度ds18b20_write(0xff); /向配置寄存器寫命令,進(jìn)行溫度值分辨率設(shè)置ds18b20_init(); ds18b20_write(0xcc); ds18b20_write(0x48); /向DS18B20發(fā)將RAM中2、3字節(jié)的內(nèi)容寫入EEPROM /DS18B20上電后會自動將EEPROM中的上下限溫度拷貝到TH、TL暫存器 /*/*溫度超限報警函數(shù) /*/ void alarm() /若上限值是正值 if(f_max=0) if(f_min=0) /若下限值是正值 if(f=0) /若測量值是正值 if(temp=max) w=1;TR1=1; /當(dāng)測量值小于最小值或大于最大值時報警 if(tempmin) w=0; /當(dāng)測量值大于最小值且小于最大值時不報警 if(f=1)w=1;TR1=1; /若測量值是負(fù)值時報警 if(f_min=1) /若下限值是負(fù)值 if(f=0) /若測量值是正值 if(temp=max)/當(dāng)測量值大于最大值時報警 w=1;TR1=1; if(temp=min)/當(dāng)測量值大于最小值時報警 w=1;TR1=1; if(tempmin)/當(dāng)測量值小于最小值時不報警 w=0; if(f_max=1) /若下限值是負(fù)值 if(f_min=1) /若下限值是負(fù)值 if(f=1) /若測量值是負(fù)值 if(temp=min) w=1;TR1=1; /當(dāng)測量值小于最大值或大于最小值時報警 if(tempmax) w=0; /當(dāng)測量值小于最小值且大于最大值時不報警 if(f=0)w=1;TR1=1; /若測量值是正值時報警 #endif/* 程序名; ds18b20keyscan函數(shù)* 功 能: 通過鍵盤設(shè)定設(shè)定上下限報警溫度* 編程者: 彭明闖* 編程時間:2014/5/30 */#ifndef _keyscan_H_/定義頭文件#define _keyscan_H_sbit key1=P22; sbit key2=P21; sbit key3=P20;sbit key4=P33;uchar i=0;/定義全局變量i用于不同功能模式的選擇,0正常模式,1上限調(diào)節(jié)模式,2下限調(diào)節(jié)模式uchar a=0; /定義全局變量a用于不同模式下數(shù)碼管顯示的選擇bit k4=0;/K4按鍵雙功能選擇位,k4=0時K4按鍵選擇消按鍵音的功能,k4=1時K4按鍵選擇正負(fù)溫度設(shè)定功能bit v=0;/K2、K3按鍵雙功能選擇位,v=0時選擇上下限查看功能,v=1時選擇上下限溫度加減功能bit v1=0;/v1=1時定時1250ms時間到自動關(guān)閉報警上下限查看功能bit v2=0; /消按鍵音功能調(diào)整位,為0時開按鍵音,為1時關(guān)按鍵音/*/*讀鍵盤延時子函數(shù)/*/void keyscan_delay(uint z)/延時1ms左右 uint i,j; for(i=z;i0;i-)for(j=120;j0;j-);/*/*溫度調(diào)節(jié)函數(shù) /*/int temp_change(int count,bit f)/上下限溫度調(diào)整 if(key2=0)/判斷K2是否按下 if(v2=0)beer=0;/v2=0開按鍵音,否則消按鍵音keyscan_delay(10);/延時10msif(key2=0)/再次判斷K2是否按下(實現(xiàn)按按鍵時消抖) beer=1;/K2按下關(guān)按鍵音 if(f=0)/若溫度為正 count+;/每按一下K2溫度上調(diào)1 if(a=1)if(count125) count=125;/當(dāng)溫度值大于125時不上調(diào) if(a=2)if(count125) count=125; if(f!=0)/若溫度為負(fù) count+;/每按一下K2溫度下調(diào)1 if(a=1)if(count55) count=55;/當(dāng)溫度值小于-55時不再下調(diào) if(a=2)if(count55) count=55; while(key2=0);/K2松開按鍵時消抖keyscan_delay(10);if(key3=0) if(v2=0)beer=0;keyscan_delay(10);if(key3=0) /K3按按鍵時消抖 beer=1; count-;/每按一下K3溫度為正時下調(diào)1,為負(fù)時上調(diào)1if(a=1)if(count0) count=0;/當(dāng)溫度值達(dá)到0時不再調(diào)if(a=2)if(count2)/K1按下三次后退出調(diào)節(jié)模式 i=0;/進(jìn)入正常模式 TR1=0;/關(guān)定時器1 k4=0;/在正常模式下選擇K4的消按鍵音功能 v=0;/在正常模式下選擇K2、K3的查看上下限報警溫度功能 store_t();/存儲調(diào)整后的上下限報警溫度 switch(i)/顯示選擇 case 0:a=0;break;/a=0選擇顯示測得的溫度 case 1:a=1;break; /a=1選擇顯示上限溫度 case 2:a=2;break; /a=2選擇顯示下限溫度 default:break; while(key1=0);/K1松按鍵時消抖keyscan_delay(10);if(a=1&v=1)/a=1選擇顯示上限溫度且v=1時選擇上下限溫度加功能led=0;max=temp_change(max,f_max);/顯示上限溫度else if(a=2&v=1)/a=2選擇顯示下限溫度且v=1時選擇上下限溫度減功能led=1;min=temp_change(min,f_min);else;if(k4=1)/k4=1時K4按鍵選擇正負(fù)溫度設(shè)定功能if(key4=0) if(v2=0)beer=0;keyscan_delay(5);if(key4=0) beer=1; if(a=1) if(max55) f_max=0;else f_max=f_max;/當(dāng)溫度大于55度時,只能設(shè)定為正溫度 if(a=2) if(min55) f_max=0;else f_min=f_min;/當(dāng)溫度大于55度時,只能設(shè)定為正溫度 while(key4=0);keyscan_delay(10);if(v=0) /v=0時選擇上下限查看功能if(key2=0) if(v2=0)beer=0;keyscan_delay(10);if(key2=0) beer=1; a=1;/選擇上限顯示 TR1=1;/開定時器1開始定時一分鐘左右 s1=1; /上限顯示不閃爍,顯示一分鐘左右自動退出while(key2=0);keyscan_delay(10);if(key3=0) if(v2=0)beer=0;keyscan_delay(10);if(key3=0) beer=1; a=2;/選擇下限顯示 TR1=1;/開定時器1開始定時1s s1=1; /下限顯示不閃爍,顯示1s自動退出 while(key3=0);keyscan_delay(10);if(v1=1) /v1=1時定時1s時間到自動關(guān)閉報警上下限查看功能a=0;v1=0;TR1=0; /a=0顯示實測溫度,v1清零,關(guān)定時器1if(k4=0) /k4=0時K4按鍵選擇消按鍵音的功能 if(key4=0)if(v2=0)beer=0;keyscan_delay(10);if(key4=0) beer=1; v2=v2;/為0時開按鍵音,為1時關(guān)按鍵音 while(key4=0);keyscan_delay(10); #endif/* 程序名; ds18b20數(shù)碼管動態(tài)顯示頭文件* 功 能: 通過定時器0延時是數(shù)碼管動態(tài)顯示* 編程者: 彭明闖* 編程時間:2014/5/30 */#ifndef _ds18b20_display_H_ #define _ds18b20_display_H_#define uint unsigned int /變量類型宏定義,用uint表示無符號整形(16位)#define uchar unsigned char /變量類型宏定義,用uchar表示無符號字符型(8位)sbit wei1=P24; /可位尋址變量定義,用wei1表示P2.4口sbit wei2=P25; /用wei2表示P2.5口sbit wei3=P26; /用wei3表示P2.6口sbit wei4=P27; /用wei4表示P2.7口uchar num=0; /定義num為全局無符號字符型變量,賦初值為0uchar code temperature1= 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f;/定義顯示碼表09uchar code temperature2= 0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef;/帶小數(shù)點的09.uchar code temperature3= 0x00,0x80,0x40,0x76,0x38;/依次是不顯示.-HL/*/*延時子函數(shù)/*/void display_delay(uint t) /延時1ms左右uint i,j;for(i=t;i0;i-) for(j=120;j0;j-);/*/*定時器1初始化函數(shù)/*/void timer1_init(bit t) TMOD=0x10; TH0=0x3c; TL0=0xb0; EA=1; ET1=1; TR1=t;/ 局部變量t為1啟動定時器1,為0關(guān)閉定時器1/*/*定時器1中斷函數(shù)/*/void timer1() interrupt 3 TH0=0x3c;/重新賦初值,定時50ms TL0=0xb0;num+;/每進(jìn)入一次定時器中斷num加1(每50ms加1一次) if(num20)/進(jìn)入20次中斷,定時1s num=0;/num歸0,重新定開始定時1s s1=0;/定時1s時間到時自動關(guān)閉報警上下限顯示功能 v1=1;/定時1s時間到時自動關(guān)閉報警上下限查看功能 /*/*調(diào)整報警上下限選擇函數(shù)/*/void selsct_1(uchar f,uchar k) /消除百位的0顯示,及正負(fù)溫度的顯示選擇 if(f=0)/若為正溫度,百位為0則不顯示百位,不為0則顯示 if(k/100=0) P0=temperature30; else P0=temperature1k/100; if(f=1)/若為負(fù)溫度,若十位為0,百位不顯示,否則百位顯示- if(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論