版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p> 課題名稱(chēng):數(shù)字溫度控制系統(tǒng)</p><p> 專(zhuān) 業(yè): 電子信息工程</p><p> 班 級(jí): 08級(jí)本科1班</p><p> 2011年04月07日</p><p><b> 1.
2、引言</b></p><p> 隨著人們生活水平的不斷提供,單片機(jī)控制無(wú)疑是人們追求的目標(biāo)之一,他給人們帶來(lái)的方便也是不可否認(rèn)的,其中數(shù)字溫度計(jì)就是一個(gè)典型的例子,但人們對(duì)它的要求越來(lái)越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)字單片機(jī)技術(shù)入手,一切向著數(shù)字化控制、智能化控制方向發(fā)展。</p><p> 本設(shè)計(jì)所介紹的數(shù)字溫度計(jì)與傳統(tǒng)的的溫度計(jì)相比,具
3、有讀數(shù)方便,測(cè)溫范圍廣,測(cè)溫精確,其輸出溫度采用數(shù)字顯示,主要用于對(duì)測(cè)溫比較準(zhǔn)確的場(chǎng)所,或科研實(shí)驗(yàn)室使用,該設(shè)計(jì)控制器使用單片機(jī)STC89C52RC,測(cè)溫傳感器使用DS18B20,用1602LCD液晶以并口傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示及其控制,同時(shí)用按鍵可設(shè)置上限和下限溫度值。</p><p><b> 2.總體設(shè)計(jì)方案</b></p><p> 2.1數(shù)字溫度計(jì)設(shè)計(jì)方
4、案論證</p><p><b> 2.1.1方案一</b></p><p> 由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類(lèi)的器件利用其感溫效應(yīng),再將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,就可以利用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來(lái),這種設(shè)計(jì)需要用到A/D轉(zhuǎn)化電路,感溫電路比較麻煩。</p><p>&
5、lt;b> 2.1.2 方案二</b></p><p> 進(jìn)而考慮到用數(shù)字溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只數(shù)字溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿(mǎn)足設(shè)計(jì)要求。</p><p> 從以上兩種方案,很容易看出,采用方案二,電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,故采用了
6、方案二。</p><p> 2.2方案二的總體設(shè)計(jì)框圖</p><p> 溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖1所示,控制器使用單片機(jī)STC89C52RC,測(cè)溫傳感器使用DS18B20,用1602LCD液晶以并口傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示,同時(shí)用按鍵可設(shè)置上限和下限溫度值,并儲(chǔ)存到24C02存儲(chǔ)器內(nèi),方便查詢(xún),如超出設(shè)定范圍,蜂鳴器報(bào)警。</p><p> 圖1 總體
7、設(shè)計(jì)方框圖</p><p><b> 3.主控制器</b></p><p> 3.1. STC89C52RC單片機(jī)管腳圖</p><p> 3.2.STC89C52RC單片機(jī)特點(diǎn)</p><p> STC89C52RC單片機(jī)是宏晶科技推出的新一代超強(qiáng)抗干擾、高速、低功耗的單片機(jī),指令代碼完全兼容傳統(tǒng)8051 單片
8、機(jī),12 時(shí)鐘/ 機(jī)器周期和6 時(shí)鐘/ 機(jī)器周期可任意選擇,最新的D 版本內(nèi)部集成MAX810 專(zhuān)用復(fù)位電路。(1). 增強(qiáng)型6 時(shí)鐘/ 機(jī)器周期,12 時(shí)鐘/ 機(jī)器周期 8051 CPU(2). 工作電壓:5.5V - 3.4V(5V 單片機(jī)) / 3.8V - 2.0V(3V 單片機(jī))(3). 工作頻率范圍:0 - 40 MHz,相當(dāng)于普通8051 的 0~80MHz.實(shí)際工作 </p><p> 頻
9、率可達(dá)48MHz.(4). 用戶(hù)應(yīng)用程序空間 4K / 8K / 13K / 16K / 20K / 32K / 64K 字節(jié)(5). 片上集成 1280 字節(jié) / 512 字節(jié) RAM(6). 通用I/O 口(32/36 個(gè)),復(fù)位后為: P1/P2/P3/P4 是準(zhǔn)雙向口/ 弱</p><p> 上拉(普通8051 傳統(tǒng)I/O 口),P0 口是開(kāi)漏輸出,作為總線擴(kuò)展用時(shí),不用加上拉電阻,作為I/O 口
10、用時(shí),需加上拉電阻。</p><p> ?。?) . I S P (在系統(tǒng)可編程)/ I A P (在應(yīng)用可編程),無(wú)需專(zhuān)用編程器/ 仿真器,可通過(guò)串口(P3.0/P3.1)直接下載用戶(hù)程序,8K 程序3 秒即可完成一片</p><p> ?。?). EEPROM 功能</p><p><b> ?。?). 看門(mén)狗</b></p>
11、<p> (10).內(nèi)部集成MAX810 專(zhuān)用復(fù)位電路(D 版本才有),外部晶體20M 以下時(shí),可省外部復(fù)位電路</p><p> 3.3. 典型應(yīng)用電路</p><p> 4.燒錄芯片MAX232</p><p> 4.1.MAX232管腳圖</p><p> 4.2.典型應(yīng)用電路</p><p&g
12、t;<b> 5溫度傳感器</b></p><p> 5.1.DS18B20管腳圖</p><p> 5.2.DS18B20的主要特點(diǎn)</p><p> (1)全數(shù)字溫度轉(zhuǎn)換及輸出。</p><p> (2)先進(jìn)的單總線數(shù)據(jù)通信。</p><p> ?。?)最高12位分辨率,精度可達(dá)
13、177;0.5攝氏度。</p><p> ?。?)12位分辨率時(shí)的最大工作周期為750毫秒。</p><p> ?。?)可選擇寄生工作方式。</p><p> (6)檢測(cè)溫度范圍為-55℃~+125℃</p><p> ?。?)內(nèi)置EEPROM,限溫報(bào)警功能。</p><p> ?。?)64位光刻ROM,內(nèi)置產(chǎn)品序列
14、號(hào),方便多機(jī)掛接。</p><p> (9)多樣封裝形式,適應(yīng)不同硬件系統(tǒng)。</p><p> 5.3.典型應(yīng)用電路</p><p> 5.4.常用軟件設(shè)計(jì)</p><p> /*****************復(fù)位ds18b20*****************/</p><p> bit ds18b20_
15、reset()</p><p><b> {</b></p><p> bit checkbit=1;</p><p><b> DQ=0;</b></p><p> delay1(75); //延時(shí)500us</p><p> DQ=1;
16、 //釋放總線,ds18b20檢測(cè)到上升沿后返回存在脈沖。</p><p> delay1(8); //60us左右的等待時(shí)間,保證接收到的是存在脈沖。</p><p> checkbit=DQ;</p><p> delay1(40);</p><p><b> DQ=1;</b></p>
17、;<p> return(~checkbit);</p><p><b> }</b></p><p> /***************向ds18b20寫(xiě)入一位****************/</p><p> void ds18b20_write_bit(bit wrbit)</p><p>
18、<b> {</b></p><p><b> uchar i;</b></p><p> DQ=0; //拉低總線,產(chǎn)生寫(xiě)時(shí)序</p><p> i++;i++; //微秒延時(shí)</p><p><b> DQ=wrbit;</b></p>
19、<p> delay1(8); //等待ds18b20取走數(shù)據(jù)</p><p> DQ=1; //釋放總線</p><p><b> }</b></p><p> /**********向ds18b20寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)************/</p><p> void ds18b20
20、_write_byte(uchar wrbyte)</p><p><b> {</b></p><p> uchar i=0;</p><p> while(i++<8)</p><p><b> {</b></p><p> ds18b20_write_
21、bit(wrbyte&0x01);//從最低位開(kāi)始寫(xiě)數(shù)據(jù)</p><p> wrbyte>>=1;//將數(shù)據(jù)右移一位</p><p><b> }</b></p><p><b> }</b></p><p> /****************從ds18b20中讀出一位
22、數(shù)據(jù)****************/</p><p> bit ds18b20_read_bit()</p><p><b> {</b></p><p> bit readbit;</p><p> uchar i=0;</p><p> DQ=0; //拉低總線
23、</p><p><b> i++;i++;</b></p><p><b> DQ=1;</b></p><p> i++;i++;i++;i++;</p><p> readbit=DQ;</p><p> delay1(8);</p><p
24、><b> DQ=1;</b></p><p> return(readbit);</p><p><b> }</b></p><p> /********從ds18b20中讀出一個(gè)字節(jié)的數(shù)據(jù)********/</p><p> uchar ds18b20_read_byte()&
25、lt;/p><p><b> {</b></p><p> uchar i=0,readbyte=0,bitresult=0;</p><p> while(i++<8)</p><p><b> {</b></p><p> bitresult=ds18b20_
26、read_bit();</p><p> readbyte=readbyte>>1 | bitresult<<7;</p><p><b> }</b></p><p> return(readbyte);</p><p><b> }</b></p>
27、<p> /***********啟動(dòng)溫度轉(zhuǎn)換函數(shù)**************/</p><p> void ds18b20_start()</p><p><b> {</b></p><p><b> DQ=1;</b></p><p> ds18b20_reset();&
28、lt;/p><p> ds18b20_write_byte(0xCC); //跳過(guò)</p><p> ds18b20_write_byte(0x44);//啟動(dòng)溫度轉(zhuǎn)換</p><p><b> }</b></p><p> /***************讀取溫度函數(shù)***************/</p&g
29、t;<p> int ds18b20_read_tem()</p><p><b> {</b></p><p> int tem=0;</p><p> ds18b20_reset();</p><p> ds18b20_write_byte(0xCC);</p><p>
30、; ds18b20_write_byte(0xBE); //發(fā)出讀取命令</p><p> tem=ds18b20_read_byte(); //讀取溫度低八位</p><p> tem|=(((int)ds18b20_read_byte())<<8);//讀溫度高八位</p><p> tem=(f
31、loat)tem*0.625;</p><p> return tem;</p><p><b> }</b></p><p> 6.1602液晶顯示</p><p> 6.1.1602引腳圖</p><p> 6.2.典型應(yīng)用電路</p><p><b&g
32、t; 8.蜂鳴器電路設(shè)計(jì)</b></p><p> 9.獨(dú)立鍵盤(pán)電路設(shè)計(jì)</p><p><b> 10.附錄</b></p><p> #include<reg52.h></p><p> #include<intrins.h></p><p>
33、#include<absacc.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned char </p><p> typedef unsigned int UINT16;</p><p> typedef unsigned char
34、UINT8;</p><p> uchar sz[18]="A: B: ";</p><p> uchar screen[18]={' ',' ','S','E','T',':',' ','0','0',
35、'0','.','0',0xdf,0x43,' ',' '};</p><p> uchar max[]={'0','3','0','.','0'};</p><p> sbit lcd_rs=P1^0;</p>
36、<p> sbit lcd_en=P1^1;</p><p> sbit DQ1=P1^2; //18b201數(shù)據(jù)</p><p> sbit DQ2=P1^3; //18b202數(shù)據(jù)</p><p> sbit b=P1^4; //蜂鳴器</p><p> sbit M
37、OTOR1=P1^5; //風(fēng)機(jī)控制</p><p> sbit MOTOR2=P1^6; //氣窗控制</p><p> sbit MOTOR3=P1^7; //空調(diào)控制</p><p> sbit key1=P2^0; //功能按鍵</p><p> sbit key2=P2^1;
38、 //讀取按鍵</p><p> sbit key3=P2^2; //設(shè)定增加</p><p> sbit key4=P2^3; //設(shè)定減少</p><p> /**************延時(shí)函數(shù)****************/</p><p> void delay1(uchar n)
39、</p><p><b> {</b></p><p> while(n--)</p><p><b> {</b></p><p><b> }</b></p><p><b> }</b></p><
40、;p> void delay(uint z)</p><p><b> {</b></p><p> uchar x,y;</p><p> for(x=0;x<z;z++)</p><p> for(y=0;y<1;y++);</p><p><b> }
41、</b></p><p> void lcd_delay()</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=1;i<140;i++);</p><p><b> }
42、</b></p><p> void key_delay(uchar time)</p><p><b> {</b></p><p> uchar i,j;</p><p> for(i=0;i<time;i++)</p><p> for(j=0;j<110;
43、j++);</p><p><b> }</b></p><p> //1602液晶函數(shù)開(kāi)始</p><p> /*****************lcd寫(xiě)命令函數(shù)******************/</p><p> void lcd_write_cmd(uchar cmder)</p><
44、;p><b> {</b></p><p><b> lcd_rs=0;</b></p><p><b> P0=cmder;</b></p><p> lcd_delay();</p><p><b> lcd_en=1;</b><
45、/p><p> lcd_delay();</p><p><b> lcd_en=0;</b></p><p><b> }</b></p><p> /***************lcd寫(xiě)數(shù)據(jù)函數(shù)******************/</p><p> void l
46、cd_write_data(uchar date)</p><p><b> {</b></p><p> lcd_rs=1; </p><p><b> P0=date;</b></p><p> lcd_delay();</p><p><b> lc
47、d_en=1;</b></p><p> lcd_delay();</p><p><b> lcd_en=0;</b></p><p><b> }</b></p><p> /**************寫(xiě)字符串函數(shù)*******************/</p>
48、<p> void lcd_write_string(uchar *lcddata)</p><p><b> {</b></p><p> uchar strlen=0;</p><p> while(lcddata[strlen]!='\0')</p><p><b>
49、 {</b></p><p> lcd_write_data(lcddata[strlen]);</p><p><b> strlen++;</b></p><p><b> }</b></p><p><b> }</b></p><
50、;p> /***************lcd選定為寫(xiě)字符****************/</p><p> void lcd_write_style(uchar add,uchar dat)</p><p><b> {</b></p><p> lcd_write_cmd(add);</p><p>
51、 lcd_write_data(dat);</p><p><b> }</b></p><p> //1602液晶函數(shù)結(jié)束</p><p> //ds18b20函數(shù)開(kāi)始</p><p> /*******************復(fù)位ds18b201***********************/</p&
52、gt;<p> bit ds18b201_reset()</p><p><b> {</b></p><p> bit checkbit=1;</p><p><b> DQ1=0;</b></p><p> delay1(75); //延時(shí)500us</p>
53、<p> DQ1=1; //釋放總線,ds18b20檢測(cè)到上升沿后返回存在脈沖。</p><p> delay1(8); //60us左右的等待時(shí)間,保證接收到的是存在脈沖。</p><p> checkbit=DQ1;</p><p> delay1(40);</p><p><b> D
54、Q1=1;</b></p><p> return(~checkbit);</p><p><b> }</b></p><p> /*******************復(fù)位ds18b202***********************/</p><p> bit ds18b202_reset()&
55、lt;/p><p><b> {</b></p><p> bit checkbit=1;</p><p><b> DQ2=0;</b></p><p> delay1(75); //延時(shí)500us</p><p> DQ2=1; //釋放總線,ds1
56、8b20檢測(cè)到上升沿后返回存在脈沖。</p><p> delay1(8); //60us左右的等待時(shí)間,保證接收到的是存在脈沖。</p><p> checkbit=DQ2;</p><p> delay1(40);</p><p><b> DQ2=1;</b></p><p>
57、 return(~checkbit);</p><p><b> }</b></p><p> /***************向ds18b201寫(xiě)入一位********************/</p><p> void ds18b201_write_bit(bit wrbit)</p><p><b&g
58、t; {</b></p><p><b> uchar i;</b></p><p> DQ1=0; //拉低總線,產(chǎn)生寫(xiě)時(shí)序</p><p> i++;i++; //微秒延時(shí)</p><p> DQ1=wrbit;</p><p> delay1(8); /
59、/等待ds18b20取走數(shù)據(jù)</p><p> DQ1=1; //釋放總線</p><p><b> }</b></p><p> /***************向ds18b202寫(xiě)入一位********************/</p><p> void ds18b202_write_bit(bi
60、t wrbit)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> DQ2=0; //拉低總線,產(chǎn)生寫(xiě)時(shí)序</p><p> i++;i++; //微秒延時(shí)</p><p> DQ2=wrbit
61、;</p><p> delay1(8); //等待ds18b20取走數(shù)據(jù)</p><p> DQ2=1; //釋放總線</p><p><b> }</b></p><p> /****************向ds18b201寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)***************/</p>
62、<p> void ds18b201_write_byte(uchar wrbyte)</p><p><b> {</b></p><p> uchar i=0;</p><p> while(i++<8)</p><p><b> {</b></p>&
63、lt;p> ds18b201_write_bit(wrbyte&0x01);//從最低位開(kāi)始寫(xiě)數(shù)據(jù)</p><p> wrbyte>>=1; //將數(shù)據(jù)右移一位</p><p><b> }</b></p><p><b> }</b></p><p
64、> /****************向ds18b202寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)***************/</p><p> void ds18b202_write_byte(uchar wrbyte)</p><p><b> {</b></p><p> uchar i=0;</p><p> whi
65、le(i++<8)</p><p><b> {</b></p><p> ds18b202_write_bit(wrbyte&0x01);//從最低位開(kāi)始寫(xiě)數(shù)據(jù)</p><p> wrbyte>>=1; //將數(shù)據(jù)右移一位</p><p><b> }&
66、lt;/b></p><p><b> }</b></p><p> /***************從ds18b201中讀出一位數(shù)據(jù)***************/</p><p> bit ds18b201_read_bit()</p><p><b> {</b></p&g
67、t;<p> bit readbit;</p><p> uchar i=0;</p><p> DQ1=0; //拉低總線</p><p><b> i++;i++;</b></p><p><b> DQ1=1;</b></p
68、><p> i++;i++;i++;i++;</p><p> readbit=DQ1;</p><p> delay1(8);</p><p><b> DQ1=1;</b></p><p> return(readbit);</p><p><b>
69、}</b></p><p> /***************從ds18b202中讀出一位數(shù)據(jù)***************/</p><p> bit ds18b202_read_bit()</p><p><b> {</b></p><p> bit readbit;</p>&l
70、t;p> uchar i=0;</p><p> DQ2=0; //拉低總線</p><p><b> i++;i++;</b></p><p><b> DQ2=1;</b></p><p> i++;i++;i++;i++;</p&g
71、t;<p> readbit=DQ2;</p><p> delay1(8);</p><p><b> DQ2=1;</b></p><p> return(readbit);</p><p><b> }</b></p><p> /******
72、*******從ds18b201中讀出一個(gè)字節(jié)的數(shù)據(jù)************/</p><p> uchar ds18b201_read_byte()</p><p><b> {</b></p><p> uchar i=0,readbyte=0,bitresult=0;</p><p> while(i++&
73、lt;8)</p><p><b> {</b></p><p> bitresult=ds18b201_read_bit();</p><p> readbyte=readbyte>>1 | bitresult<<7;</p><p><b> }</b></
74、p><p> return(readbyte);</p><p><b> }</b></p><p> /*************從ds18b202中讀出一個(gè)字節(jié)的數(shù)據(jù)************/</p><p> uchar ds18b202_read_byte()</p><p><
75、;b> {</b></p><p> uchar i=0,readbyte=0,bitresult=0;</p><p> while(i++<8)</p><p><b> {</b></p><p> bitresult=ds18b202_read_bit();</p>
76、<p> readbyte=readbyte>>1 | bitresult<<7;</p><p><b> }</b></p><p> return(readbyte);</p><p><b> }</b></p><p> /**********
77、*****函數(shù)為啟動(dòng)DS18B201溫度轉(zhuǎn)換*****************/</p><p> void ds18b201_start()</p><p><b> {</b></p><p><b> DQ1=1;</b></p><p> ds18b201_reset();<
78、/p><p> ds18b201_write_byte(0xCC); //跳過(guò)</p><p> ds18b201_write_byte(0x44); //啟動(dòng)溫度轉(zhuǎn)換</p><p><b> }</b></p><p> /***************函數(shù)為啟動(dòng)DS18B202溫度轉(zhuǎn)換***********
79、******/</p><p> void ds18b202_start()</p><p><b> {</b></p><p><b> DQ2=1;</b></p><p> ds18b202_reset();</p><p> ds18b202_write
80、_byte(0xCC); //跳過(guò)</p><p> ds18b202_write_byte(0x44); //啟動(dòng)溫度轉(zhuǎn)換</p><p><b> }</b></p><p> /***************函數(shù)為讀DS18B201取溫度*****************/</p><p> int d
81、s18b201_read_tem()</p><p><b> {</b></p><p> int tem=0;</p><p> ds18b201_reset();</p><p> ds18b201_write_byte(0xCC);</p><p> ds18b201_write
82、_byte(0xBE); //發(fā)出讀取命令</p><p> tem=ds18b201_read_byte(); //讀取溫度低八位</p><p> tem|=(((int)ds18b201_read_byte())<<8);//讀溫度高八位</p><p> tem=(float)tem*0.625
83、;</p><p> return tem;</p><p><b> }</b></p><p> /***************函數(shù)為讀DS18B202取溫度*****************/</p><p> int ds18b202_read_tem()</p><p><
84、;b> {</b></p><p> int tem=0;</p><p> ds18b202_reset();</p><p> ds18b202_write_byte(0xCC);</p><p> ds18b202_write_byte(0xBE); //發(fā)出讀取命令</p>
85、<p> tem=ds18b202_read_byte(); //讀取溫度低八位</p><p> tem|=(((int)ds18b202_read_byte())<<8);//讀溫度高八位</p><p> tem=(float)tem*0.625;</p><p> return tem;</p&
86、gt;<p><b> }</b></p><p> /*******************在液晶的指定位置顯示溫度數(shù)值*************/</p><p> void displayTem1(int temp)</p><p><b> {</b></p><p>
87、 sz[2]=temp/1000+0x30;</p><p> temp=temp%1000;</p><p> sz[3]=temp/100+0x30;</p><p> temp=temp%100;</p><p> sz[4]=temp/10+0x30;</p><p> sz[5]='.
88、39;;</p><p> sz[6]=temp%10+0x30;</p><p><b> }</b></p><p> /*******************在液晶的指定位置顯示溫度數(shù)值*************/</p><p> void displayTem2(int temp)</p>
89、<p><b> {</b></p><p> sz[10]=temp/1000+0x30;</p><p> temp=temp%1000;</p><p> sz[11]=temp/100+0x30;</p><p> temp=temp%100;</p><p> s
90、z[12]=temp/10+0x30;</p><p> sz[13]='.';</p><p> sz[14]=temp%10+0x30;</p><p><b> }</b></p><p> void lcd_sfm(uchar add,uchar shu)</p><p
91、><b> {</b></p><p> uchar shi,ge;</p><p> shi=shu/10;</p><p> ge=shu%10;</p><p> lcd_write_cmd(0xc0+add);</p><p> lcd_write_data(0x30+s
92、hi);</p><p> lcd_write_data(0x30+ge);</p><p><b> }</b></p><p> /*************LCD初始化函數(shù)***************/</p><p> void init()</p><p><b>
93、 {</b></p><p><b> lcd_en=0;</b></p><p> lcd_write_cmd(0x38); //設(shè)置16*2顯示,5*6點(diǎn)陣,8位數(shù)據(jù)接口</p><p> lcd_write_cmd(0x0c); //開(kāi)顯示,不顯示光標(biāo),光標(biāo)不顯示</p><p> lcd_wr
94、ite_cmd(0x06); //指針加一,光標(biāo)加一,寫(xiě)入屏幕不移動(dòng)</p><p> lcd_write_cmd(0x80); //設(shè)置數(shù)據(jù)地址指針</p><p> lcd_write_cmd(0x01); //數(shù)據(jù)指針清零,所有顯示清零</p><p><b> }</b></p><p> void di
95、di()</p><p><b> {</b></p><p><b> int i;</b></p><p><b> int j=10;</b></p><p> while(j--)</p><p><b> {</b&
96、gt;</p><p><b> b=0;</b></p><p> for(i=0;i<=10000;i++);</p><p><b> b=1;</b></p><p> for(i=0;i<=10000;i++);</p><p><b>
97、; } </b></p><p><b> }</b></p><p> void key_jiajian(uint i)</p><p><b> {</b></p><p> if(key3==0)</p><p><b> {&l
98、t;/b></p><p><b> delay(5);</b></p><p> while(key3==0);</p><p> screen[i]++;</p><p> if(screen[i]-48==10)</p><p> screen[i]=48;</p>
99、;<p><b> }</b></p><p> if(key4==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> while(key4==0);</p><p>
100、; screen[i]--;</p><p> if(screen[i]-47==0)</p><p> screen[i]=57;</p><p><b> }</b></p><p> lcd_write_data(screen[i]);</p><p><b> }
101、</b></p><p> void key()</p><p><b> {</b></p><p> uchar i=1;</p><p><b> uint j=0;</b></p><p> key1=key2=key3=key4=1;<
102、/p><p><b> while(i)</b></p><p><b> {</b></p><p> if(key1==0)</p><p><b> {</b></p><p> lcd_write_cmd(0x0f);</p>
103、<p> delay(100);</p><p><b> j++;</b></p><p> while(key1==0); </p><p><b> }</b></p><p><b> switch(j)</b></p>
104、<p><b> {</b></p><p> case 1: lcd_write_cmd(0x87);</p><p> key_delay(10);</p><p> key_jiajian(7);</p><p> lcd_write_cmd(0x87);</p><p>
105、;<b> break;</b></p><p><b> case 2:</b></p><p> lcd_write_cmd(0x88);</p><p> key_delay(10);</p><p> key_jiajian(8);</p><p> lc
106、d_write_cmd(0x88);</p><p><b> break;</b></p><p><b> case 3:</b></p><p> lcd_write_cmd(0x89);</p><p> key_delay(10);</p><p>
107、key_jiajian(9);</p><p> lcd_write_cmd(0x89);</p><p><b> break;</b></p><p> case 4:lcd_write_cmd(0x8b);</p><p> key_delay(10);</p><p> ke
108、y_jiajian(11);</p><p> lcd_write_cmd(0x8b);</p><p><b> break;</b></p><p><b> case 5: </b></p><p> j=1;break;</p><p><b>
109、 }</b></p><p> if(key2==0)</p><p><b> {</b></p><p> while(key2==0);</p><p><b> i=0;</b></p><p><b> }</b><
110、/p><p><b> }</b></p><p> lcd_write_cmd(0x0c);</p><p><b> }</b></p><p> void lcd_prin()</p><p><b> {</b></p>&l
111、t;p><b> int num;</b></p><p> for(num=0;num<16;num++)</p><p><b> {</b></p><p> lcd_write_cmd(0x80+num);</p><p> lcd_write_data(scre
112、en[num]);</p><p> lcd_write_cmd(0xc0+num);</p><p> lcd_write_data(sz[num]); </p><p><b> }</b></p><p><b> }</b></p><p> /*****
113、**********主函數(shù)開(kāi)始*****************/</p><p> void main()</p><p><b> {</b></p><p> int tem1,tem2;</p><p> UINT16 Tin,Tout,Tset,Toff,i=0;</p><p&g
114、t; b=1; </p><p><b> init();</b></p><p> lcd_write_cmd(0x0C); </p><p><b> while(1)</b></p><p><b> {</b></p>&l
115、t;p><b> b=1;</b></p><p> ds18b201_start();</p><p> ds18b202_start();</p><p> tem1=ds18b201_read_tem();</p><p> tem2=ds18b202_read_tem();</p>
116、<p> if(key1==0) </p><p><b> key();</b></p><p> Toff=(max[0]-48)*1000+(max[1]-48)*100+(max[2]-48)*10; </p><p> Tin=(sz[2]-48)*1000+(sz[3]-48
117、)*100+(sz[4]-48)*10;//+(sz[6]-48)*1/10 </p><p> Tout=(sz[10]-48)*1000+(sz[11]-48)*100+(sz[12]-48)*10;//+(sz[14]-48)*1/10</p><p> Tset=(screen[7]-48)*1000+(screen[8]-48)*100+(screen[9]-48)*10
118、;//+(screen[11]-48)*1/10</p><p> lcd_prin();</p><p> if(Tin<Toff)</p><p><b> {</b></p><p> if(Tset<Tin&&Tset>Tout)</p><p>
119、<b> { </b></p><p> MOTOR1=0; </p><p> MOTOR2=0; </p><p> MOTOR3=1; </p><p><b> }</b></p><p><b> else</b&g
120、t;</p><p><b> { </b></p><p> MOTOR1=1; </p><p> MOTOR2=1; </p><p> MOTOR3=1; </p><p><b> }</b></p><p>
121、<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> didi(); </p><p> MOTOR1=1; </p><p> MOTOR2=1;
122、 </p><p> MOTOR3=0; </p><p><b> } </b></p><p> displayTem1(tem1); </p><p> displayTem2(tem2); </p><p><b> }</b></p>
123、;<p><b> }</b></p><p><b> 11.參考文獻(xiàn)</b></p><p> 零基礎(chǔ)學(xué)單片機(jī)C語(yǔ)言程序設(shè)計(jì) 趙建領(lǐng)/薛圓圓等編著 </p><p><b> 機(jī)械工業(yè)出版社</b></p><p><b>
124、 12.結(jié)束語(yǔ)</b></p><p> 到此為止課題要求的基本功能都已經(jīng)能實(shí)現(xiàn)了,但還存在某些不足,我會(huì)在以后的時(shí)間里不斷改進(jìn)。這次課程設(shè)計(jì)很漫長(zhǎng),特別是編寫(xiě)程序的時(shí)候,但我從中學(xué)到了很多東西,個(gè)人的分析能力對(duì)問(wèn)題的處理能力有了不同程度的提高。對(duì)電路的判斷分析對(duì)程序的分析特別是對(duì)51單片機(jī)的進(jìn)一步學(xué)習(xí),使我收獲了很多。</p><p> 感謝我們的指導(dǎo)老師閔老師,幫助我
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)溫度控制系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)--單片機(jī)溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)(溫度控制系統(tǒng))
- 單片機(jī)課程設(shè)計(jì)--溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)控制的數(shù)字溫度計(jì)
- 課程設(shè)計(jì)---基于單片機(jī)的溫度控制系統(tǒng)
- 溫室大棚溫度調(diào)節(jié)控制系統(tǒng)(單片機(jī)課程設(shè)計(jì))
- 基于單片機(jī)的溫度控制系統(tǒng)課程設(shè)計(jì)報(bào)告
- 單片機(jī)數(shù)字溫度控制系統(tǒng)優(yōu)化設(shè)計(jì)
- 單片機(jī)溫度控制課程設(shè)計(jì)
- 課程設(shè)計(jì)---mcs-51單片機(jī)溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)——單片機(jī)控制步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于at89s52 單片機(jī)的溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)---基于at89s52單片機(jī)的溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)---退火爐溫度控制系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)數(shù)字顯示溫度計(jì)
- 單片機(jī)水位控制系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論