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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3593|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲性视频 | 综合久久综合久久 | 亚洲综合色自拍一区 | 免费的av网站 | 亚州精品天堂中文字幕 | 国产欧美一区二区三区国产幕精品 | 亚洲一区二区三区福利 | 午夜精品一区二区三区在线观看 | 日韩一区二区三区精品 | 欧美大片黄 | 久久这里只有精品首页 | 久久精品亚洲精品 | 国产91 在线播放 | 久久精品国产亚洲 | 精品99在线 | 伊人网99 | 国产精品一区二区在线 | 伊人伊人伊人 | 久久综合影院 | 最新国产在线 | 国产欧美综合在线 | 在线观看欧美一区 | 欧美日韩精品一区二区三区四区 | 亚洲xx在线 | 中文字幕在线三区 | 亚洲免费婷婷 | 亚洲男女激情 | 黑人精品欧美一区二区蜜桃 | www国产精 | 东方伊人免费在线观看 | 日韩亚洲一区二区 | 亚洲国产精品久久久久秋霞不卡 | 亚洲高清视频在线观看 | 在线国产视频 | 国产日韩精品一区 | 国产91av视频 | 午夜影院在线观看视频 | 欧洲精品一区 | 欧美亚洲视频 | 精精国产xxxx视频在线 | 中文字幕 在线观看 |