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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS18B20+RS485+液晶1602+顯示(帶限溫)Proteus仿真+單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<main.h>
  2. #include<DS18B20.h>

  3. uchar  Uart_flag=0;                 //串口標志位
  4. uchar k1num=0;
  5. uchar a;

  6. char TH=10,TL=-10;                  //設置限制最高值、最低值
  7. void key_scan();

  8. /****
  9. *****延時1MS函數
  10. ****/

  11. void delay(uint x)
  12. {
  13.         uchar m,n;
  14.         for(m=x;m>0;m--)
  15.         for(n=110;n>0;n--);
  16. }
  17. /***
  18. **函數名:UART_init()
  19. **功能:  串口初始化
  20. ****/
  21. void UART_init()
  22. {
  23.         TMOD=0x20;
  24.         SCON=0x50;
  25.         TH1=0xFD;
  26.         TL1=0xFD;
  27.         TR1=1;

  28.         en=1;           //485一直在寫
  29. }
  30. /***
  31. **函數名:UART_sent()
  32. **功能:  串口發送一個字節
  33. ****/
  34. void UART_sent(uchar date)
  35. {
  36.        
  37.         SBUF=date;
  38.         while(!TI);
  39.         TI=0;
  40. }
  41. /***
  42. **函數名:SPEAK()
  43. **功能:  做報警鈴聲
  44. ****/
  45. void SPEAK()
  46. {
  47.                 beep=0;
  48.                 delay(160);
  49.                 beep=1;       
  50. }
  51. /***
  52. **函數名:main()
  53. **功能:  主函數
  54. ****/
  55. void main()
  56. {
  57.         int ans;         //讀取的溫度寄存器
  58.          uchar flag;   //正負位標志
  59.         UART_init();
  60.         while(1)
  61.         {         
  62.                 key_scan();
  63.                
  64.                 /************* 正常溫度*********************/
  65.                 if(Uart_flag==0)
  66.                 {
  67.                                
  68.                         DS18B20_start_change();         //開始讀溫度
  69.                         delay(1000);
  70.                         ans=DS18B20_read_date();
  71.                         if((ans>TH)||(ans<TL))         //                判斷溫度是否超過限溫值
  72.                         {
  73.                                 P0=0;
  74.                                 SPEAK();
  75.                         }
  76.                         else               
  77.                         {
  78.                                 P0=0xff;
  79.                                 beep=1;
  80.                         }
  81.                         /******判斷是否為負溫度********/
  82.                         if(ans<0)
  83.                         {
  84.                                 ans=-ans;
  85.                                 flag=1;
  86.                         }
  87.                         else
  88.                                 flag=0;
  89.                        
  90.                         if(flag==1)                         //負溫度,發送‘-’
  91.                                 UART_sent('-');
  92.                         else
  93.                                 UART_sent('+');         //正溫度,發送‘+’
  94.                         UART_sent( ( uchar )ans);
  95.                 }
  96.                        
  97.                 /**********調節上限溫度*****************/
  98.                 if(Uart_flag==1)
  99.                 {
  100.                         UART_sent('!');                //調節上限溫度標志
  101.                            _nop_();
  102.                         _nop_();
  103.                    UART_sent(TH);                //發送上限溫度標志
  104.                 }
  105.                 /**********調節下限溫度**************/
  106.                 if(Uart_flag==2)
  107.                 {
  108.                         UART_sent('@');                //調節下限溫度標志
  109.                            _nop_();
  110.                         _nop_();
  111.                    UART_sent(TL);                //發送下限溫度標志
  112.                 }
  113.         }
  114. }
  115. /***
  116. **函數名:key_scan()
  117. **功能:  掃描鍵盤
  118. ****/
  119. void key_scan()
  120. {
  121.         if(k1==0)
  122.         {
  123.                 delay(2);
  124.                 if(k1==0)
  125.                 {
  126.                         while(!k1);                          //松手檢測
  127.                         k1num++;
  128.                         if(k1num==1)
  129.                         {
  130.                                 Uart_flag=1;        //發送限制最高溫度標志
  131.                         }
  132.                         if(k1num==2)
  133.                         {
  134.                                 Uart_flag=2;        //發送限制最低溫度標志
  135.                         }
  136.                         if(k1num==3)
  137.                         {
  138.                                 Uart_flag=0;
  139.                                 k1num=0;       
  140.                         }
  141.                 }
  142.         }
  143.         if(k1num!=0)
  144.         {
  145.                 switch(k1num)
  146.                 {
  147.                         case 1:                                                          //調節最高限溫值
  148.                                 {
  149.                                         if(k2==0)
  150.                                         {
  151.                                                 delay(2);
  152.                                                 if(k2==0)
  153.                                                 {
  154.                                                         while(!k2);
  155.                                                         TH++;
  156.                                                         if(TH>=30)
  157.                                                                 TH=30;       
  158.                                                 }
  159.                                         }
  160.                                         if(k3==0)
  161.                                         {
  162.                                                 delay(2);
  163.                                                 if(k3==0)
  164.                                                 {
  165.                                                         while(!k3);
  166.                                                         TH--;
  167.                                                         if(TH<0)
  168.                                                                 TH=0;       
  169.                                                 }
  170.                                         }

  171.                                 }break;
  172.                         case 2:                                                                //調節最低限溫值
  173.                                 {
  174.                                         if(k2==0)
  175.                                         {
  176.                                                 delay(2);
  177. ……………………

  178. …………限于本文篇幅 余下代碼請從附件下載:

復制代碼

全部資料51hei下載地址:
DS18B20 RES485 液晶1602 顯示(帶限溫).zip (153.18 KB, 下載次數: 166)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:76408 發表于 2019-11-30 11:56 | 只看該作者
謝謝樓主,我下載了。。。。。
回復

使用道具 舉報

板凳
ID:258520 發表于 2019-12-19 20:39 | 只看該作者
可以運行成功了,謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人一区二区三区夜夜夜 | 亚洲黄色在线免费观看 | 韩国欧洲一级毛片 | 国产精品乱码一区二区三区 | 中文字幕国产精品 | 中文一区二区 | 天天干天天爽 | 91在线看 | 秋霞电影院午夜伦 | 韩日精品视频 | 人人鲁人人莫人人爱精品 | 97国产爽爽爽久久久 | 欧美福利精品 | 亚洲欧洲av在线 | 亚洲精品在线视频 | 亚洲欧美中文日韩在线v日本 | 97av视频在线| 欧美中文字幕一区 | 亚洲视频一区 | 国产ts人妖系列高潮 | av首页在线 | av中文字幕在线播放 | 久久av一区二区三区 | 日本人做爰大片免费观看一老师 | 国产91久久精品一区二区 | 国产一区视频在线 | 国产美女视频黄 | 蜜臀av日日欢夜夜爽一区 | 国产一区二区三区 | 黄色电影在线免费观看 | 国产日韩精品一区 | 亚州精品天堂中文字幕 | www.国产精品 | 在线一区二区观看 | 韩国精品一区二区三区 | 亚洲网站观看 | 日本91av视频 | 日韩精品一区二区三区 | 久国产精品 | 欧美午夜激情在线 | 国产一区二区三区在线视频 |