找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11949|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)實(shí)驗(yàn)程序:LCD1602顯示溫度報(bào)警

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:205010 發(fā)表于 2017-6-4 13:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
實(shí)驗(yàn)6:LCD1602顯示溫度報(bào)警

單片機(jī)源程序如下:
  1. /**************************************************************************************
  2. *                              **                                                                                                  *
  3. 實(shí)現(xiàn)現(xiàn)象:下載程序后插上LCD1602液晶在開發(fā)板上,即可顯示
  4. 注意事項(xiàng):如果不想讓點(diǎn)陣模塊顯示,可以將74HC595模塊上的JP595短接片拔掉。                                                                                                                                                                  
  5. ***************************************************************************************/

  6. //DS18B20溫度采集,LCD1602顯示
  7. #include<reg52.h>
  8. #define uchar unsigned char
  9. #define uint unsigned int
  10. uchar table[]={"  T:                                       "};
  11. uchar table1[]={"  Tmax 32                                              "};
  12. /********IO引腳定義**********/
  13. sbit rs=P2^6;
  14. sbit rw=P2^5;
  15. sbit en=P2^7;
  16. sbit dq=P3^7;
  17. sbit beep=P1^5;

  18. uchar num;
  19. uint tempwarn,d=0,h=0;

  20. void delay(uint n)                //延時(shí)程序
  21. {
  22.         while(n--);
  23. }
  24. //液晶寫命令程序
  25. void write_com(uchar com)  
  26. {
  27.         rs=0;                        //等0輸入命令
  28.         en=0;                        //液晶使能信號(hào)初始化
  29.         P0=com;                        //把com參數(shù),液晶的命令值送到P0口
  30.         delay(100);                //延時(shí),按照液晶的時(shí)序圖的要求
  31.         en=1;                        //使能信號(hào),0到1表示上升沿打開可以寫命令數(shù)據(jù)到液晶里
  32.         delay(100);
  33.         en=0;                        //使能信號(hào)回復(fù)
  34. }
  35. void write_data(uchar date)           //液晶寫數(shù)據(jù)程序
  36. {
  37.         rs=1;                  //等1表示輸入數(shù)據(jù)
  38.         en=0;
  39.         P0=date;          //把date參數(shù),液晶的數(shù)據(jù)送到P0口
  40.         delay(100);
  41.         en=1;
  42.         delay(100);
  43.         en=0;
  44. }  //液晶初始化程序
  45. void init()      
  46. {
  47.         en=0;
  48.         write_com(0x38);        //設(shè)置16X2顯示,5X7點(diǎn)陣,8位數(shù)據(jù)口
  49.         write_com(0x0c);        //設(shè)置開顯示,不顯示光標(biāo)
  50.         write_com(0x06);        //寫一個(gè)字符后地址指針加1
  51.         write_com(0x01);        //顯示清0,數(shù)據(jù)指針清0
  52. }
  53. void  Writebyte(uchar dat)//DS18B20溫度芯片的寫字節(jié)程序
  54. {
  55.         uchar j;
  56.         for(j=0;j<8;j++)
  57.         {
  58.                 dq=0;
  59.                 dq=dat&0x01;
  60.                 delay(5);
  61.                 dq=1;
  62.                 dat>>=1;
  63.         }
  64. }
  65. uchar Readbyte(void)//DS18B20溫度芯片讀字節(jié)程序
  66. {
  67.         uchar i,dat=0;
  68.         for(i=0;i<8;i++)
  69.         {
  70.                 dq=0;
  71.                 dat>>=1;
  72.                 dq=1;
  73.                 if(dq==1)
  74.                 dat|=0x80;
  75.                 delay(4);
  76.         }        
  77.         return dat;
  78. }
  79. void initds18b20(void)//溫度芯片初始化程序
  80. {
  81.         uchar x=0;
  82.         dq=1;
  83.         delay(8);
  84.         dq=0;
  85.         delay(80);
  86.         dq=1;
  87.         delay(14);
  88.         x=dq;
  89.         delay(20);
  90. }
  91. void Readtemp(void)//讀溫度程序
  92. {
  93.         initds18b20();
  94.         Writebyte(0xcc);
  95.         Writebyte(0x44);

  96.         initds18b20();
  97.         Writebyte(0xcc);
  98.         Writebyte(0xbe);
  99.         d=Readbyte();        //溫度信號(hào)的低8位數(shù)據(jù)函數(shù)
  100.         h=Readbyte();        //溫度信號(hào)的高8位數(shù)據(jù)函數(shù)
  101. }
  102. get() //溫度信號(hào)處理程序,把溫度信號(hào)數(shù)據(jù)值轉(zhuǎn)換為液晶顯示
  103. {
  104.         uint temp,tmp;
  105.         float tt;
  106.         tmp=d;         //低8位數(shù)據(jù)給tmp
  107.         temp=h;         //高8位數(shù)據(jù)給temp
  108.         temp<<=8;  //高8位左移8位
  109.         temp|=d;   //高低8位數(shù)據(jù)或起來(lái)再賦給temp
  110.         if((h&0x80)!=0)         //高8位h&10000000是否等0,不等0表示負(fù)多少度
  111.         {
  112.                 table[7]='-';        //把-賦給液晶數(shù)組的第8個(gè)元素,表示-號(hào)在第8位,1602一行有16個(gè)字符
  113.                 temp=temp-1;
  114.                 temp=~temp;
  115.         }
  116.         else
  117.                 table[7]='+';
  118.                 temp>>=4;
  119.                 table[8]=(temp/100)+'0';        //液晶第9位字符為溫度的百位數(shù),例如120度的1
  120.                 table[9]=(temp/10)%10+'0';      //液晶第10位字符為溫度的十位數(shù),例如120度的2
  121.                 table[10]=(temp%10)+'0';        //液晶第9位字符為溫度的個(gè)位數(shù),例如120度的0
  122.                 tmp=tmp&0x0f;                                          //低位溫度提取小數(shù)數(shù)據(jù)
  123.                 tt=tmp*0.0625;                                         //小數(shù)部分?jǐn)?shù)據(jù)轉(zhuǎn)換
  124.                 table[11]='.';                                         //顯示小數(shù)點(diǎn)
  125.                 table[12]=((uchar)(tt*10))%10+'0';//小數(shù)點(diǎn)后面的小數(shù)數(shù)字
  126.                 tempwarn=temp;               
  127.         return tempwarn;//溫度值返回
  128. }
  129. void warn(uint tempwarn)//溫度報(bào)警程序
  130. {
  131.                 if(tempwarn>=32)//如果溫度大于25度并且啟動(dòng)報(bào)警
  132.         {
  133.                 beep=0;
  134.                 delay(5000);
  135.                 beep=1;
  136.                 delay(50000);
  137.         }
  138. }
  139. void main()
  140. {        
  141.         rw=0;                              //rw直接置0,應(yīng)該在液晶初始化前,否則斷電后再通電就不能顯示,切記。!
  142.         init();                         //液晶初始化函數(shù)
  143.         write_com(0x80+0x40);             //0x80+0x40表示液晶的第二行開始顯示
  144.         for(num=0;num<16;num++)            //num<16,16表示顯示16位
  145.         {
  146.                 write_data(table1[num]);    //液晶顯示需要的內(nèi)容,調(diào)用寫液晶數(shù)據(jù)函數(shù),這行顯示拼音dengtianming        
  147.         }
  148.         while(1)                            //大循環(huán),不斷檢測(cè)和更新溫度
  149.         {
  150.                  Readtemp();
  151.                  get();
  152.              warn(tempwarn);
  153.                  write_com(0x80);  //液晶的第一行開始地址
  154.                  for(num=0;num<15;num++)//顯示16位數(shù)據(jù),后面的幾位沒(méi)有用到就寫不到16,以免后面的幾位會(huì)出現(xiàn)一個(gè)隨機(jī)數(shù)據(jù)顯示亂碼
  155.                  {
  156.                         write_data(table[num]);//液晶需要顯示的內(nèi)容
  157.                  }
  158. ……………………

  159. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
實(shí)驗(yàn)6:LCD1602顯示溫度報(bào)警.rar (32.49 KB, 下載次數(shù): 297)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:304958 發(fā)表于 2018-4-10 10:10 | 只看該作者
絕世好文 啊
回復(fù)

使用道具 舉報(bào)

板凳
ID:310832 發(fā)表于 2018-4-25 08:17 來(lái)自手機(jī) | 只看該作者
最近正在做相關(guān)設(shè)計(jì),非常感謝分享
回復(fù)

使用道具 舉報(bào)

地板
ID:80372 發(fā)表于 2018-5-25 16:27 | 只看該作者
很好,值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

5#
ID:377740 發(fā)表于 2018-12-31 20:25 | 只看該作者
很好,對(duì)我正在做的課設(shè)很有幫助
回復(fù)

使用道具 舉報(bào)

6#
ID:466265 發(fā)表于 2019-1-11 11:02 | 只看該作者
大佬 請(qǐng)問(wèn)為什么用了這程序 無(wú)論怎么調(diào) 聲音都是滴 滴 滴,不是尖銳的報(bào)警聲呢》?
回復(fù)

使用道具 舉報(bào)

7#
ID:466415 發(fā)表于 2019-1-11 15:06 | 只看該作者
很好 值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

8#
ID:491046 發(fā)表于 2019-3-22 16:07 | 只看該作者
程序編譯有問(wèn)題,沒(méi)“l(fā)cd1602.h" "adc0832.h"
回復(fù)

使用道具 舉報(bào)

9#
ID:547147 發(fā)表于 2019-10-30 10:01 | 只看該作者
謝謝樓主,正需要
回復(fù)

使用道具 舉報(bào)

10#
ID:547147 發(fā)表于 2019-10-30 10:01 | 只看該作者
感謝樓住,正需要這個(gè)
回復(fù)

使用道具 舉報(bào)

11#
ID:473694 發(fā)表于 2019-12-28 16:11 | 只看該作者
很好,對(duì)我正在做的課設(shè)很有幫助
回復(fù)

使用道具 舉報(bào)

12#
ID:676155 發(fā)表于 2019-12-28 17:11 | 只看該作者
有沒(méi)有好的
回復(fù)

使用道具 舉報(bào)

13#
ID:676394 發(fā)表于 2019-12-28 23:17 | 只看該作者
為什么顯示的溫度一直是-0.09
回復(fù)

使用道具 舉報(bào)

14#
ID:673117 發(fā)表于 2020-1-2 02:10 | 只看該作者
很好 被自己誤刪了
回復(fù)

使用道具 舉報(bào)

15#
ID:680805 發(fā)表于 2020-1-4 00:29 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表