




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于單片機(jī)課程設(shè)計(jì)報(bào)告作者:日期:11總城市外數(shù)片悅CITY COLLEGE OF SCIENCE AND TECHNOLOGYXHONGQING UNIVERSITY單片機(jī)課程設(shè)計(jì)課題:基于51單片機(jī)的交通燈設(shè)計(jì)專業(yè):機(jī)械設(shè)計(jì)制造及其自動(dòng)化學(xué)號(hào):指導(dǎo)教師:邵添設(shè)計(jì)日期:2017/12/18成 績:重慶大學(xué)城市科技學(xué)院電氣學(xué)院基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)報(bào)告一、設(shè)計(jì)目的作用本設(shè)計(jì)是一款簡單實(shí)用的小型數(shù)字溫度計(jì),所采用的主要元件有傳感器 DS18B20單片機(jī)AT89C52 ,四位共陰極數(shù)碼管一個(gè),電容電阻若干。 DS18B20 支持“一線總線”接口,測量溫度范圍-55 C+125 C。在-10+
2、85 C范圍內(nèi), 精度為 0.5 0 Co 18B20的精度較差,為土 2 C o現(xiàn)場溫度直接以“一線總線” 的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量, 如:環(huán)境控制、設(shè)備或過程控制、測溫類消費(fèi)電子產(chǎn)品等。本次數(shù)字溫度計(jì)的設(shè)計(jì)共分為五部分,主控制器,LED顯示部分,傳感器部分,復(fù)位部分,按鍵設(shè)置部分,時(shí)鐘電路。主控制器即單片機(jī)部分,用于存儲(chǔ)程 序和控制電路;LED顯示部分是指四位共陰極數(shù)碼管,用來顯示溫度;傳感器部 分,即溫度傳感器,用來采集溫度,進(jìn)行溫度轉(zhuǎn)換;復(fù)位部分,即復(fù)位電路,按 鍵部分用來設(shè)置上下限報(bào)警溫度。 測量的總過程是,傳感器采集到外部環(huán)境的溫 度,
3、并進(jìn)行轉(zhuǎn)換后傳到單片機(jī),經(jīng)過單片機(jī)處理判斷后將溫度傳遞到數(shù)碼管顯示。 二、設(shè)計(jì)要求(1) .利用DS18B20專感器實(shí)時(shí)檢測溫度并顯示。(2) .利用數(shù)碼管實(shí)時(shí)顯示溫度。(3) .當(dāng)溫度超過或者低于設(shè)定值時(shí)蜂鳴器報(bào)警,LED閃爍指示。(4) .能夠手動(dòng)設(shè)置上限和下限報(bào)警溫度。三、設(shè)計(jì)的具體實(shí)現(xiàn)1、系統(tǒng)概述方案一:由于本設(shè)計(jì)是測溫電路,可以使用熱敏電阻之類的器件利用其感 溫效應(yīng),在將隨被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設(shè) 計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。方案設(shè)計(jì)框圖如下:方案二:考慮到用溫度傳
4、感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20此傳感器,可以很容易直接讀取被測溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設(shè)計(jì)也比較 簡單,故采用了方案二。2、單元電路設(shè)計(jì)與分析1、硬件設(shè)計(jì)按照系統(tǒng)設(shè)計(jì)功能的要求,確定系統(tǒng)由3個(gè)模塊組成:主控制器、測溫電路 和顯示電路。數(shù)字溫度計(jì)總體電路結(jié)構(gòu)框圖所示:按鍵設(shè)置模塊蜂鳴器報(bào)警模塊LEDW單片機(jī)的選擇四個(gè)端口只需要兩個(gè)單片機(jī)AT89S52M有低電壓供電和體積小等特點(diǎn),口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用
5、二節(jié)電池供電。由于器件問題,我們使用了通用的手機(jī)5V充電器接口。復(fù)位電路模塊單片機(jī)系統(tǒng)的復(fù)位電路在這里使用的是上電 +按鈕的復(fù)位電 路模式,其中電阻R采用的是10KQ的阻值,電容采用電容值為 10uF的電解電容,電路圖如下:四位共陰極數(shù)碼管,能夠顯示小數(shù)。列掃描用P2.4P2.7 口來實(shí)現(xiàn),列驅(qū)動(dòng)直接51接單片機(jī)驅(qū)動(dòng)。電路圖如下:型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測 溫度,并且可根據(jù)實(shí)際要求通過簡單的編程實(shí)現(xiàn) 912位的數(shù)字值讀數(shù)方式 電路圖如下:按鍵模塊按鍵是用來設(shè)置報(bào)警的上下限溫。 K1是用 來進(jìn)入上下限調(diào)節(jié)模式的, 當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入
6、下限調(diào)節(jié)模式。在正常模式下, 按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動(dòng)退出;按一下K3進(jìn)入查 看下限溫度模式,顯示1s左右自動(dòng)退出;按一下 K4消除按鍵音,再按一下 啟動(dòng)按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,K1是實(shí)現(xiàn)減1功能,K3是用來設(shè)定上下限溫度正負(fù)的。2、軟件設(shè)計(jì)主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程 序和現(xiàn)實(shí)數(shù)據(jù)刷新子程序等。主程序 主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理 DS18B20 的測量溫度值。溫度測量每1S進(jìn)行一次。主流程圖如下:初始化讀出溫度子程序讀出溫度子程序的主要功能是讀出 RAM中的9字節(jié)。在讀出時(shí)須進(jìn)行CR
7、C 校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。流程圖如下:溫度轉(zhuǎn)換命令子程序 溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令。當(dāng) 采用12位分辨率時(shí),轉(zhuǎn)換時(shí)間約為750ms在本程序設(shè)計(jì)中,采用1s顯示程序 延時(shí)法等待轉(zhuǎn)換的完成。流程圖如下:顯示數(shù)據(jù)刷新子程序 顯示數(shù)據(jù)刷新子程序主要是對(duì)顯示緩沖器中的顯示 數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高數(shù)據(jù)顯示位為 0時(shí),將符號(hào)顯示位移入下一位。硬件調(diào)試,首先檢查電感的焊接是否正確,然后可用萬用表測試或通電檢測。軟件調(diào)試可以先編寫顯示程序并進(jìn)行硬件的正確性檢驗(yàn),然后分別進(jìn)行主程 序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序和現(xiàn)實(shí)數(shù)據(jù)刷新子 程序等的編程及調(diào)試由于DS
8、18B20與單片機(jī)采用串行數(shù)據(jù)傳送,因此,對(duì) DS18B20進(jìn)行讀/寫 編程時(shí)必須嚴(yán)格地保證讀/寫時(shí)序;否則將無法讀取測量結(jié)果。本程序采用單片 機(jī)匯編或C語言編寫用Keil C51編譯器編程調(diào)試。軟件調(diào)試到能顯示溫度值,并且在有溫度變化時(shí)顯示溫度能改變, 就基本完 成。性能測試可用制作的溫度計(jì)和已有的成品溫度計(jì)同時(shí)進(jìn)行測量比較。由于 DS18B20的精度很高,所以誤差指標(biāo)可以限制在 05c以內(nèi)。另外,-55+125C 的測溫范圍使得該溫度計(jì)完全適合一般的應(yīng)用場合,具低電壓供電特性可做成用 電池供電的手持溫度計(jì)。四、總結(jié)本次的課程設(shè)計(jì)使我們進(jìn)一步鞏固了書本上的知識(shí),做到了學(xué)以致用。這是我們第二次
9、自己動(dòng)手設(shè)計(jì)的電路,通過系統(tǒng)仿真軟件 Proteus和編譯軟件Keil,使我 們進(jìn)一步了解了單片機(jī)的設(shè)計(jì)制作過程,其中最為困難的是軟件部分,即編程部 分,我們上網(wǎng)找了好多資料,雖然經(jīng)過自己的修改,但還是有很多功能不能實(shí)現(xiàn), 如溫度上下限設(shè)置。由于 Proteus并不是很熟練,在使用的過程中有很多原件的 名稱不知道,從而花費(fèi)了大量的時(shí)間在網(wǎng)上查找,今后應(yīng)該在這方面多多努力。最后一步的焊接硬件也遇到了不少麻煩??偨Y(jié)經(jīng)驗(yàn)的時(shí)候我們得出這樣的結(jié)論, 學(xué)習(xí)應(yīng)該學(xué)以致用,有目的的去學(xué)習(xí),如果學(xué)了不用等于沒學(xué)。其次,要學(xué)以致 用,理論聯(lián)系實(shí)際,這樣才會(huì)取得事半功倍的效果。五、附錄附錄一:元件清單元件名稱數(shù)量
10、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)線什排針40附錄二:完整電路原理圖任z.Uj irjrriCIV-W*JUHW rsjm 田刖小 rs1*G附錄三:焊接實(shí)物圖:二 命 * foooem 一工二 Lq 9 dc OOF .c n t附錄四:源程序/* 程序名;基于51單片機(jī)的溫度計(jì)* 功 能:實(shí)時(shí)測量溫度,超過上下限報(bào)警,報(bào)警溫度可手動(dòng)調(diào)整。K1是用來* 進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下 K1進(jìn)入
11、上限調(diào)節(jié)模式,再按一下進(jìn)入下限* 調(diào)節(jié)模式。在正常模式下,按一下 K2進(jìn)入查看上限溫度模式,顯示1s左右 自動(dòng)* 退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動(dòng)退出;按一下K4 消除* 按鍵音,再按一下啟動(dòng)按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,* K1是實(shí)現(xiàn)減1功能,K3是用來設(shè)定上下限溫度正負(fù)的。* 編程者:彭明闖*編程時(shí)間:2014/05/30*/#include/將intrins.h頭文件包含到主程序(調(diào)用其中#include的_nop_()空操作函數(shù)延時(shí))#define uint unsigned int#define uchar unsigned charuch
12、ar max=0x00,min=0x00;/max是上限報(bào)警溫度,min是下限報(bào)警溫度bits=0;/s是調(diào)整上下限溫度時(shí)溫度閃爍的標(biāo)志位,s=0不顯示200ms, s=1顯示1s左右bits1=0;/s1標(biāo)志位用于上下限查看時(shí)的顯示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(
13、0);/初始化定時(shí)器1 (未啟動(dòng)定時(shí)器1)get_temperature(1);/首次啟動(dòng) DS18B20獲取溫度(DS18B20 上電后自動(dòng)將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器)while(1)keyscan();get_temperature(0);display(temp,temp_d*0.625);alarm();/* 程序名;DS18B20頭文件* 編程者:彭明闖* 編程時(shí)間:2014/5/30* 說 明:用到的全局變量是:無符號(hào)字符型變量temp(測得的溫度整數(shù)部分),temp_d* (測得的溫度小數(shù)部分),標(biāo)志位f (測量溫度的標(biāo)志位0表示“正溫度 1* 示“負(fù)溫度
14、”),標(biāo)志位f_max (上限溫度的標(biāo)志位0表示正溫度、1 表* 示“負(fù)溫度”),標(biāo)志位f_min (下限溫度的標(biāo)志位0表示“正溫度、1 表*示“負(fù)溫度”),標(biāo)志位w(報(bào)警標(biāo)志位1啟動(dòng)報(bào)警0關(guān)閉報(bào)警)。*/#ifndef _ds1b20_h_/定義頭文件#define _ds18b20_h_#define uint unsigned int#define uchar unsigned charsbit DQ= P2h3;sbit beer=P1A0;sbit led=P1A1; uchar temp=0; uchar temp_d=0;bit f=0;1表示負(fù)溫度”)bit f_max=0;1
15、表示負(fù)溫度”)bitf_min=0;1表示負(fù)溫度”)bitw=0;閉報(bào)警/DS18B20 接口/用 beer表示 P1.0/用led表示P1.1/測量溫度的整數(shù)部分/測量溫度的小數(shù)部分/測量溫度的標(biāo)志位,0,表示“正溫度”/上限溫度的標(biāo)志位0表示“正溫度”/下限溫度的標(biāo)志位0表示“正溫度”、/報(bào)警標(biāo)志位1啟動(dòng)報(bào)警0關(guān)/*/*延時(shí)子函數(shù)/*/void ds18b20_delayus(uint t)延時(shí)幾小 swhile(t-);void ds18b20_delayms(uint t)延時(shí) 1ms 左右uint i,j;for(i=t;i0;i-)for(j=120;j0;j-);/*/*DS18
16、B20初始化函數(shù)/*/void ds18b20_init()uchar c=0;DQ=1;DQ=0;脈沖ds18b20_delayus(80);DQ=1;while(DQ);之間ds18b20_delayus(150);DQ=1;/控制器向DS18B20發(fā)低電平/延時(shí)15-80仙s/控制器拉高總線,等待DS18B20拉低總線,在60-240小/延時(shí),等待上拉電阻拉高總線/拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸;/*/*DS18B20字節(jié)讀函數(shù)/*/uchar ds18b20_read() 據(jù);uchar i; uchar d=0;DQ = 1; for(i=8;i0;i-) d = 1;DQ = 0;_no
17、p_(); _nop_();DQ = 1;/準(zhǔn)備讀;/低位先發(fā);/必須寫1,否則讀出來的將是不預(yù)期的數(shù)if(DQ)d |= 0x80;ds18b20_delayus(10);return d;/在12us處讀取數(shù)據(jù);/返回讀取的值/*/*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
18、;ds18b20_init();ds18b20_write(0xcc);/向 DS18B20 發(fā)跳過讀 ROM 命令ds18b20_write(0x44);/寫啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部RAMif(flag=1)首次啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換需要500ms若轉(zhuǎn)換時(shí)間不夠就出錯(cuò),讀出的是 85度的錯(cuò)誤值。display1(1);/用開機(jī)動(dòng)畫耗時(shí)elseds18b20_delayms(1);ds18b20_init();ds18b20_write(0xcc);ds18b20_write(0xbe);a=ds18b20_read();b=ds18b20_read();i
19、f(flag=1)度max=ds18b20_read();min=ds18b20_read();if(max&0x80)=0x80)1表明是負(fù)溫度讀內(nèi)部RAM (LSB)讀內(nèi)部RAM (MSB)/局部位變量f=1時(shí)讀上下線報(bào)警溫讀內(nèi)部RAM (TH)讀內(nèi)部RAM (Tl)/若讀取的上限溫度的最高位(符號(hào)位)為/將上限溫度符號(hào)標(biāo)志位置1表示負(fù)f_max=1;max=(max-0x80);溫度,將上限溫度裝換成無符號(hào)數(shù)。if(min&0x80)=0x80)為1表明是負(fù)溫度f_min=1;min=(min-0x80);度,將下限溫度裝換成無符號(hào)數(shù)。i=b;i=4;if (i=0)f=0;temp=(
20、a4)|(b4)|(b4); a=(a&0x0f);/若讀取的下限溫度的最高位(符號(hào)位)/將下限溫度符號(hào)標(biāo)志位置1表示負(fù)溫/i為0,正溫度,設(shè)立正溫度標(biāo)記/整數(shù)部分/小數(shù)部分/i為1,負(fù)溫度,設(shè)立負(fù)溫度標(biāo)記/整數(shù)部分/小數(shù)部分temp_d=a; /*/*存儲(chǔ)極限溫度函數(shù)/*/void store_t()if(f_max=1)號(hào)數(shù)(最高位為1是負(fù),為0是正)max=max+0x80;if(f_min=1)號(hào)數(shù)/若上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符/若下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符min=min+0x80;ds18b20_init();/向DS18B20發(fā)寫字節(jié)至?xí)捍嫫?2和3( TH/向暫存
21、器TH (上限溫度暫存器)寫溫度/向暫存器TL (下限溫度暫存器)寫溫度/向配置寄存器寫命令,進(jìn)行溫度值分辨率設(shè)置向DS18B20發(fā)將RAM中2、3字節(jié)的內(nèi)ds18b20_whte(0xcc);ds18b20_write(0x4e);和TL)命令ds18b20_write(max);ds18b20_write(min);ds18b20_write(0xff);ds18b20_init();ds18b20_write(0xcc);ds18b20_write(0x48);容寫入EEPROM/DS18B20上電后會(huì)自動(dòng)將EEPROM中的上下限溫度拷貝到TH、TL暫存器/*/*溫度超限報(bào)警函數(shù)/*/v
22、oid alarm()/若上限值是正值if(f_max=0)if(f_min=0)/若下限值是正值if(f=0)/若測量值是正值if(temp=max)W=1;TR1=1;/當(dāng)測量值小于最小值或大于最大值時(shí)報(bào)壁if(tempmin)w=0;/當(dāng)測量值大于最小值且小于最大值時(shí)不報(bào)警if(f=1)w=1;TR1=1;若測量值是負(fù)值時(shí)報(bào)警if(f_min=1)若下限值是負(fù)值if(f=0)/若測量值是正值if(temp=max)/當(dāng)測量值大于最大值時(shí)報(bào)警w=1;TR1=1;if(temp=min)/當(dāng)測量值大于最小值時(shí)報(bào)警w=1;TR1=1;if(tempmin)/當(dāng)測量值小于最小值時(shí)不報(bào)警w=0;i
23、f(f_max=1)/若下限值是負(fù)值if(f_min=1)若下限值是負(fù)值if(f=1)/若測量值是負(fù)值if(temp=min)w=1;TR1=1;/當(dāng)測量值小于最大值或大于最小值時(shí)報(bào)壁if(tempmax)w=0;/當(dāng)測量值小于最小值且大于最大值時(shí)不報(bào)警 if(f=0)w=1;TR1=1;若測量值是正值時(shí)報(bào)警#endif* 程序名;ds18b20keyscani數(shù)* 功能:通過鍵盤設(shè)定設(shè)定上下限報(bào)警溫度* 編程者:彭明闖* 編程時(shí)間:2014/5/30* /#ifndef _keyscan_H_/ 定義頭文件#define _keyscan_H_sbit key1=P2A2;sbit key2
24、=P2A1;sbit key3=P2A0;sbit key4=P3A3;uchar i=0;/定義全局變量i用于不同功能模式的選擇,0正常模式,1上限調(diào)節(jié)模式,2下限調(diào)節(jié)模式uchar a=0;/定義全局變量a用于不同模式下數(shù)碼管顯示的選擇bit k4=0;/K4按鍵雙功能選擇位,k4=0時(shí)K4按鍵選擇消按鍵音的功能,k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能bit v=0;/K2、K3按鍵雙功能選擇位,v=0時(shí)選擇上下限查看功能,v=1時(shí)選擇上下限溫度加減功能bit v1=0;/v1=1時(shí)定時(shí)1250ms時(shí)間到自動(dòng)關(guān)閉報(bào)警上下限查看功能bit v2=0;/消按鍵音功能調(diào)整位,為0時(shí)開按鍵音,為1
25、時(shí)關(guān)按鍵音/*/*讀鍵盤延時(shí)子函數(shù)/*/延時(shí)1ms左右void keyscan_delay(uint z) uint i,j;for(i=z;i0;i-)for(j=120;j0;卜-); /*/*溫度調(diào)節(jié)函數(shù)/*/int temp_change(int count,bit f)if(key2=0)if(v2=0)beer=0;keyscan_delay(10);if(key2=0)/上下限溫度調(diào)整/判斷K2是否按下/v2=0開按鍵音,否則消按鍵音/延時(shí)10ms/再次/U斷K2是否按下(實(shí)現(xiàn)按按鍵時(shí)消抖)beer=1;if(f=0)count+;/K2按下關(guān)按鍵音/若溫度為正/每按一下K2溫度
26、上調(diào)1if(a=1)if(count125) count=125;/ 當(dāng)溫度值大于 125 時(shí)不上調(diào) if(a=2)if(count125) count=125;if(f!=0) /若溫度為負(fù)count+;/每按一下K2溫度下調(diào)1if(a=1)if(count55) count=55;/ 當(dāng)溫度值小于-55 時(shí)不再下調(diào) if(a=2)if(count55) count=55;/K2松開按鍵時(shí)消抖while(key2=0);keyscan_delay(10); if(key3=0) if(v2=0)beer=0;keyscan_delay(10);if(key3=0)/K3按按鍵時(shí)消抖 beer
27、=1; count-;/每按一下K3溫度為正時(shí)下調(diào)1,為負(fù)時(shí)上調(diào)1if(a=1)if(count0) count=0;/ 當(dāng)溫度值達(dá)到 0 時(shí)不再調(diào) if(a=2)if(count2)/K1按下三次后退出調(diào)節(jié)模式i=0;/進(jìn)入正常模式TR1=0;/關(guān)定時(shí)器1k4=0;/在正常模式下選擇K4的消按鍵音功能v=0;/在正常模式下選擇K2、K3的查看上下限報(bào)警溫度功能store_t();/存儲(chǔ)調(diào)整后的上下限報(bào)警溫度 switch(i)/顯示選擇 case 0:a=0;break;/a=0選擇顯示測得的溫度case 1:a=1;break;/a=1選擇顯示上限溫度case 2:a=2;break;/a
28、=2選擇顯示下限溫度default:break; while(key1=0);/K1 松按鍵時(shí)消抖keyscan_delay(10);if(a=1&v=1)/a=1選擇顯示上限溫度且v=1時(shí)選擇上下限溫度加功能led=0;max=temp_change(max,f_max);顯示上限溫度else if(a=2&v=1)/a=2選擇顯示下限溫度且v=1時(shí)選擇上下限溫度減功能led=1;min=temp_change(min,f_min);else;if(k4=1)/k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能if(key4=0)if(v2=0)beer=0;keyscan_delay(5);if(ke
29、y4=0)beer=1;if(a=1)if(max55) f_max=0;else f_max=f_max; 當(dāng)溫度大于 55 度時(shí), 只能設(shè)定為正溫度if(a=2)if(min55) f_max=0;else f_min=f_min; 當(dāng)溫度大于 55 度時(shí), 只能設(shè)定為正溫度while(key4=0);keyscan_delay(10);if(v=0)/v=0時(shí)選擇上下限查看功能if(key2=0)if(v2=0)beer=0;keyscan_delay(10);if(key2=0)beer=1;a=1;/選擇上限顯示TR1=1;/開定時(shí)器1開始定時(shí)一分鐘左右s1=1;/上限顯示不閃爍,顯
30、示一分鐘左右自動(dòng)退出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;s1=1;/開定時(shí)器1開始定時(shí)1s/下限顯示不閃爍,顯示1s自動(dòng)退出while(key3=0);keyscan_delay(10);if(v1=1)查看功能a=0;v1=0;TR1=0;if(k4=0)if(key4=0)if(v2=0)beer=0;keyscan_delay(10); if(key4=0) beer=1;v2=v2;/v1=1時(shí)定時(shí)1s時(shí)間
31、到自動(dòng)關(guān)閉報(bào)警上下限/a=0顯示實(shí)測溫度,v1清零,關(guān)定時(shí)器1 /k4=0時(shí)K4按鍵選擇消按鍵音的功能/為0時(shí)開按鍵音,為1時(shí)關(guān)按鍵音while(key4=0);keyscan_delay(10); #endif/* 程序名;ds18b20數(shù)碼管動(dòng)態(tài)顯示頭文件* 功能:通過定時(shí)器0延時(shí)是數(shù)碼管動(dòng)態(tài)顯示* 編程者:彭明闖*編程時(shí)間:2014/5/30*/#ifndef _ds18b20_display_H_#define _ds18b20_display_H#define uint unsigned int位)#define uchar unsigned char符型(8位)sbit wei1=
32、P2A4;sbit wei2=P2A5;sbit wei3=P2A6;sbit wei4=P2A7;uchar num=0;值為0/變量類型宏定義,用uint表示無符號(hào)整形(16/變量類型宏定義,用uchar表示無符號(hào)字/可位尋址變量定義,用 wei1表示P2.4 口/用 wei2 表示 P2.5 口用 wei3 表示 P2.6 口用 wei4 表示 P2.7 口/定義num為全局無符號(hào)字符型變量,賦初uchar code temperature1= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/定義顯示碼表 09uchar code t
33、emperature2= 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; 帶小數(shù)點(diǎn)的 09.uchar code temperature3= 0x00,0x80,0x40,0x76,0x38; /依次是不顯示. -H L/*/*延時(shí)子函數(shù)/*/延時(shí)1ms左右void display_delay(uint t) uint i,j;for(i=t;i0;i-)for(j=120;j0;j-);*/*定時(shí)器1初始化函數(shù)/*/void timer1_init(bit t)TMOD=0x10;TH0=0x3c;TL0=0xb0;EA=1;ET1=1;
34、TR1=t;/局部變量t為1啟動(dòng)定時(shí)器1,為0關(guān)閉定時(shí)器1/*/*定時(shí)器1中斷函數(shù)/*/ void timer1() interrupt 3TH0=0x3c;/重新賦初值,定時(shí)50msTL0=0xb0;num+;/每進(jìn)入一次定時(shí)器中斷 num加1 (每50ms加1 一次)if(num20)/進(jìn)入20次中斷,定時(shí)1snum=0;s1=0;/num歸0,重新定開始定時(shí)1s/定時(shí)1s時(shí)間到時(shí)自動(dòng)關(guān)閉報(bào)警上下限顯示功能v1=1;/定時(shí)1s時(shí)間到時(shí)自動(dòng)關(guān)閉報(bào)警上下限查看功能/*/*調(diào)整報(bào)警上下限選擇函數(shù)/*/void selsct_1(uchar f,uchar k)/消除百位的0顯示,及正負(fù)溫度的顯示
35、選if(f=0)/若為正溫度,百位為0則不顯示百位,不為0則顯示if(k/100=0) P0=temperature30;elseP0=temperature1k/100;if(f=1)/若為負(fù)溫度,若十位為0,百位不顯示,否則百位顯示-if(k%100/10=0) P0=temperature30;elseP0=temperature32;void selsct_2(bit f,uchar k)/消除十位的0顯示,及正負(fù)溫度的顯示選擇if(f=0)/若為正溫度,百位十位均為0則不顯示十位,否則顯示十位if(k/100=0)&(k%100/10=0)P0=temperature30;elseP
36、0=temperature1k%100/10;if(f=1)/若為負(fù)溫度,若十位為0,十位不顯示,否則十位顯示-if(k%100/10=0) P0=temperature32;elseP0=temperature1k%100/10;/*/*主函數(shù)顯示/*/void display(uchar t,uchar t_d)/用于實(shí)測溫度、上限溫度的顯示uchar i;for(i=0;i4;i+)switch(i)case 0: wei2=1; wei3=1; wei4=1;wei1=0;/依次從左至右選通數(shù)碼管顯示,實(shí)現(xiàn)動(dòng)態(tài)顯示/選通第一個(gè)數(shù)碼管/關(guān)第二個(gè)數(shù)碼管/關(guān)第三個(gè)數(shù)碼管/關(guān)第四個(gè)數(shù)碼管/開第
37、一個(gè)數(shù)碼管if(a=0)selsct_1(f,t);/若a=0則在第一個(gè)數(shù)碼管上顯示測量溫度的百位或-if(a=1)P0=temperature33; 若a=1則在第一個(gè)數(shù)碼管上顯示Hif(a=2)P0=temperature34; /若a=2則在第一個(gè)數(shù)碼管上顯示Lbreak;case 1: /選通第二個(gè)數(shù)碼管wei1=1;wei3=1;wei4=1;wei2=0;if(a=0)selsct_2(f,t);/若a=0則在第二個(gè)數(shù)碼管上顯示測量溫度的十 位或-if(a=1)/若a=1則在第二個(gè)數(shù)碼管上顯示上限報(bào)警溫度的百位或-if(s=0) selsct_1(f_max,max);/若s=0則顯示第二個(gè)數(shù)碼管,否則不 顯示else P0=temperature30;通過s標(biāo)志位的變化實(shí)現(xiàn)調(diào)節(jié)上下限報(bào)警溫度時(shí)數(shù)碼管的閃爍if(s1=1) selsct_1(f_max,max);/若 s1=1 則顯示第二個(gè)數(shù)碼管(s1 標(biāo) 志位用于上下限查看時(shí)的顯示)if(a=2)/若a=2則在第二個(gè)數(shù)碼管上顯示下限報(bào)警溫度的百位或-if(s=0) selsct_1(f_min,min);else P0=temperature30;if(s1=1) selsct_1(f_min,min);break;case 2: /選通第三個(gè)數(shù)碼管
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年導(dǎo)電銀漿合作協(xié)議書
- 營銷推廣戰(zhàn)略合作協(xié)議細(xì)節(jié)規(guī)定
- 商務(wù)酒店客房預(yù)訂管理協(xié)議
- 2025年廣西2024危險(xiǎn)品從業(yè)資格考試
- 2025年鋼材:一級(jí)鋼項(xiàng)目發(fā)展計(jì)劃
- 公司職員職務(wù)晉升證明(6篇)
- 專業(yè)演出票務(wù)銷售網(wǎng)絡(luò)協(xié)議
- 電商倉儲(chǔ)管理系統(tǒng)開發(fā)合同
- 2025年移動(dòng)通信用智能天線項(xiàng)目發(fā)展計(jì)劃
- 跨文化交際培訓(xùn)方案實(shí)施指南
- 2024年熔化焊接與熱切理論考試1000題及答案
- 弱電機(jī)房設(shè)備與系統(tǒng)巡檢記錄表全套
- 工商管理論文8000字【9篇】
- 全自動(dòng)進(jìn)銷存電子表格系統(tǒng)模板53
- MOOC 豬生產(chǎn)學(xué)-南京農(nóng)業(yè)大學(xué) 中國大學(xué)慕課答案
- 內(nèi)蒙古呼和浩特市2024屆小升初考試語文試卷含答案
- 貴陽市普通住宅小區(qū)物業(yè)管理服務(wù)收費(fèi)參考標(biāo)準(zhǔn)
- MOOC 地學(xué)景觀探秘·審美·文化-重慶大學(xué) 中國大學(xué)慕課答案
- 丁苯橡膠工藝流程
- (高清版)WST 311-2023 醫(yī)院隔離技術(shù)標(biāo)準(zhǔn)
- 2024年電梯安裝與維修工理論考試題庫及答案(通用版)
評(píng)論
0/150
提交評(píng)論