久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11935|回復: 14
打印 上一主題 下一主題
收起左側

51單片機實驗程序:LCD1602顯示溫度報警

  [復制鏈接]
跳轉到指定樓層
樓主
ID:205010 發表于 2017-6-4 13:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
實驗6:LCD1602顯示溫度報警

單片機源程序如下:
  1. /**************************************************************************************
  2. *                              **                                                                                                  *
  3. 實現現象:下載程序后插上LCD1602液晶在開發板上,即可顯示
  4. 注意事項:如果不想讓點陣模塊顯示,可以將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)                //延時程序
  21. {
  22.         while(n--);
  23. }
  24. //液晶寫命令程序
  25. void write_com(uchar com)  
  26. {
  27.         rs=0;                        //等0輸入命令
  28.         en=0;                        //液晶使能信號初始化
  29.         P0=com;                        //把com參數,液晶的命令值送到P0口
  30.         delay(100);                //延時,按照液晶的時序圖的要求
  31.         en=1;                        //使能信號,0到1表示上升沿打開可以寫命令數據到液晶里
  32.         delay(100);
  33.         en=0;                        //使能信號回復
  34. }
  35. void write_data(uchar date)           //液晶寫數據程序
  36. {
  37.         rs=1;                  //等1表示輸入數據
  38.         en=0;
  39.         P0=date;          //把date參數,液晶的數據送到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);        //設置16X2顯示,5X7點陣,8位數據口
  49.         write_com(0x0c);        //設置開顯示,不顯示光標
  50.         write_com(0x06);        //寫一個字符后地址指針加1
  51.         write_com(0x01);        //顯示清0,數據指針清0
  52. }
  53. void  Writebyte(uchar dat)//DS18B20溫度芯片的寫字節程序
  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溫度芯片讀字節程序
  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();        //溫度信號的低8位數據函數
  100.         h=Readbyte();        //溫度信號的高8位數據函數
  101. }
  102. get() //溫度信號處理程序,把溫度信號數據值轉換為液晶顯示
  103. {
  104.         uint temp,tmp;
  105.         float tt;
  106.         tmp=d;         //低8位數據給tmp
  107.         temp=h;         //高8位數據給temp
  108.         temp<<=8;  //高8位左移8位
  109.         temp|=d;   //高低8位數據或起來再賦給temp
  110.         if((h&0x80)!=0)         //高8位h&10000000是否等0,不等0表示負多少度
  111.         {
  112.                 table[7]='-';        //把-賦給液晶數組的第8個元素,表示-號在第8位,1602一行有16個字符
  113.                 temp=temp-1;
  114.                 temp=~temp;
  115.         }
  116.         else
  117.                 table[7]='+';
  118.                 temp>>=4;
  119.                 table[8]=(temp/100)+'0';        //液晶第9位字符為溫度的百位數,例如120度的1
  120.                 table[9]=(temp/10)%10+'0';      //液晶第10位字符為溫度的十位數,例如120度的2
  121.                 table[10]=(temp%10)+'0';        //液晶第9位字符為溫度的個位數,例如120度的0
  122.                 tmp=tmp&0x0f;                                          //低位溫度提取小數數據
  123.                 tt=tmp*0.0625;                                         //小數部分數據轉換
  124.                 table[11]='.';                                         //顯示小數點
  125.                 table[12]=((uchar)(tt*10))%10+'0';//小數點后面的小數數字
  126.                 tempwarn=temp;               
  127.         return tempwarn;//溫度值返回
  128. }
  129. void warn(uint tempwarn)//溫度報警程序
  130. {
  131.                 if(tempwarn>=32)//如果溫度大于25度并且啟動報警
  132.         {
  133.                 beep=0;
  134.                 delay(5000);
  135.                 beep=1;
  136.                 delay(50000);
  137.         }
  138. }
  139. void main()
  140. {        
  141.         rw=0;                              //rw直接置0,應該在液晶初始化前,否則斷電后再通電就不能顯示,切記!!!
  142.         init();                         //液晶初始化函數
  143.         write_com(0x80+0x40);             //0x80+0x40表示液晶的第二行開始顯示
  144.         for(num=0;num<16;num++)            //num<16,16表示顯示16位
  145.         {
  146.                 write_data(table1[num]);    //液晶顯示需要的內容,調用寫液晶數據函數,這行顯示拼音dengtianming        
  147.         }
  148.         while(1)                            //大循環,不斷檢測和更新溫度
  149.         {
  150.                  Readtemp();
  151.                  get();
  152.              warn(tempwarn);
  153.                  write_com(0x80);  //液晶的第一行開始地址
  154.                  for(num=0;num<15;num++)//顯示16位數據,后面的幾位沒有用到就寫不到16,以免后面的幾位會出現一個隨機數據顯示亂碼
  155.                  {
  156.                         write_data(table[num]);//液晶需要顯示的內容
  157.                  }
  158. ……………………

  159. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
實驗6:LCD1602顯示溫度報警.rar (32.49 KB, 下載次數: 297)


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

使用道具 舉報

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

使用道具 舉報

板凳
ID:310832 發表于 2018-4-25 08:17 來自手機 | 只看該作者
最近正在做相關設計,非常感謝分享
回復

使用道具 舉報

地板
ID:80372 發表于 2018-5-25 16:27 | 只看該作者
很好,值得學習
回復

使用道具 舉報

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

使用道具 舉報

6#
ID:466265 發表于 2019-1-11 11:02 | 只看該作者
大佬 請問為什么用了這程序 無論怎么調 聲音都是滴 滴 滴,不是尖銳的報警聲呢》?
回復

使用道具 舉報

7#
ID:466415 發表于 2019-1-11 15:06 | 只看該作者
很好 值得學習
回復

使用道具 舉報

8#
ID:491046 發表于 2019-3-22 16:07 | 只看該作者
程序編譯有問題,沒“lcd1602.h" "adc0832.h"
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

11#
ID:473694 發表于 2019-12-28 16:11 | 只看該作者
很好,對我正在做的課設很有幫助
回復

使用道具 舉報

12#
ID:676155 發表于 2019-12-28 17:11 | 只看該作者
有沒有好的
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂va在线观看 | 男人的天堂中文字幕 | 国产农村妇女毛片精品久久麻豆 | 日本一道本| 一区二区三区中文字幕 | 日韩成人精品在线观看 | 五月婷婷色 | 日韩午夜在线观看 | 一区二区视频在线 | 99久久精品免费视频 | av黄色在线 | 日韩欧美在 | 国产免费观看一级国产 | 日韩欧美高清 | 中文字幕高清 | 久久99精品久久久久久 | 天堂一区二区三区四区 | 91麻豆精品一区二区三区 | 日韩中文字幕在线观看 | 超碰激情 | 国产精品高清一区二区三区 | 亚洲成人国产综合 | 99国内精品久久久久久久 | 欧美精| 中文字幕一区二区在线观看 | 亚洲国产网址 | 一区二区三区亚洲视频 | www.激情.com | 成人在线免费 | 色.com | 夜夜骚视频| 国产免费黄网 | 九九热在线免费视频 | 无码一区二区三区视频 | 一色一黄视频 | 在线看一区二区 | 国产视频在线一区二区 | 91视频在线| 亚洲欧美激情网 | www成年人视频 | 欧美激情综合色综合啪啪五月 |