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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS18b20溫度可調上下限1602液晶顯示程序

[復制鏈接]
跳轉到指定樓層
樓主
  1. /*-----------------------------------------------
  2.   名稱:DS18b20 溫度檢測液晶顯示
  3.   內容:
  4. ------------------------------------------------*/
  5. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  6. #include<stdio.h>
  7. #include "18b20.h"
  8. #include "1602.h"
  9. #include "delay.h"

  10. #define KeyPort P3 //定義按鍵端口



  11. bit ReadTempFlag;//定義讀時間標志
  12. sbit P2_0=P2^0;
  13. sbit P2_1=P2^1;
  14. sbit P2_2=P2^2;
  15. sbit P1_7=P1^7;         //定義電機輸出端口
  16. sbit P10=P1^0;

  17. sbit SPK =P1^1;
  18. unsigned char frq;

  19. void Init_Timer0(void);//定時器初始化

  20. void T2csh(void)  //定時器T2初始化
  21. {
  22. RCAP2H=0xff; //TH2初值
  23. RCAP2L=0xee; //TL2初值


  24. TR2=1;   //啟動定 時器
  25. ET2=1;    //打開定時器2中斷
  26. //EA=1;     //打開總中斷
  27. }

  28. unsigned char KeyScan(void);//鍵盤掃描
  29. /*------------------------------------------------
  30.               串口通訊初始化
  31. ------------------------------------------------*/
  32. void UART_Init(void)
  33. {
  34.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  35.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
  36.     TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz  
  37.     TR1   = 1;                  // TR1:  timer 1 打開                        
  38.     //EA    = 1;                  //打開總中斷
  39.     //ES    = 1;                  //打開串口中斷
  40.         TI=1;
  41. }
  42. /*------------------------------------------------
  43.                     主函數
  44. ------------------------------------------------*/
  45. void main (void)
  46. {                  
  47. int temp,tempH=18,tempL=15;
  48. float temperature;
  49. unsigned char TempFlag=0;
  50. char displaytemp[16],num;//定義顯示區域臨時存儲數組

  51. LCD_Init();           //初始化液晶
  52. DelayMs(20);          //延時有助于穩定
  53. LCD_Clear();          //清屏
  54. Init_Timer0();

  55. UART_Init();
  56. Lcd_User_Chr();       //寫入自定義字符


  57. while (1)         //主循環
  58.   {
  59. num=KeyScan();
  60. switch(num)
  61.        {
  62.             case 1:if(tempH<127)tempH++;break;
  63.                 case 2:if(tempH>-55)tempH--;break;
  64.                 case 3:if(tempL<127)tempL++;break;
  65.                 case 4:if(tempL>-55)tempL--;break;
  66.                 default:break;
  67.            }

  68. switch(TempFlag)                                                                                                                                                                                                                                                                       
  69.        {
  70.             case 0:    //輸出溫度上限下限
  71.                     {
  72.                       sprintf(displaytemp,"H.%3d  L.%3d ",tempH,tempL);
  73.               LCD_Write_String(0,1,displaytemp);        P2_0=0;P2_2=1;P2_1=1; P1_7=0;
  74.                           break;
  75.                     }
  76.                 case 1:LCD_Write_String(0,1,"over  tempH    ") ;P2_1=0;P2_0=1;P2_2=1;P1_7=1;

  77.                        break;

  78.                 case 2:LCD_Write_String(0,1,"under  tempL   "); P2_2=0;P2_0=1;P2_1=1;P1_7=0;  
  79.                       break;
  80.                 default:break;
  81.            }

  82. if(ReadTempFlag==1)
  83. {
  84.     ReadTempFlag=0;
  85.     temp=ReadTemperature();


  86.     temperature=temp*0.0625;

  87.     temp>>=4;
  88.     if(temp>tempH)
  89.      {
  90.         TempFlag=1;  //高于高溫標志
  91.                 ET2=0;
  92.      }
  93.     else if(temp<tempL)
  94.      {
  95.         TempFlag=2;  //低于低溫標志
  96.                 ET2=0          ;
  97.      }
  98.     else
  99.      {
  100.        TempFlag=0;   //正常顯示標志
  101.            if(temp>tempH-1)
  102.             T2csh();

  103.      }

  104.      sprintf(displaytemp,"Temp  %6.2f ",temperature);//打印溫度值
  105.      LCD_Write_String(0,0,displaytemp);//顯示第一行
  106.      LCD_Write_Char(13,0,0x01);//寫入溫度右上角點
  107.      LCD_Write_Char(14,0,'C'); //寫入字符C
  108.   }        


  109. }
  110. }

  111. /*------------------------------------------------
  112.                     定時器初始化子程序
  113. ------------------------------------------------*/
  114. void Init_Timer0(void)
  115. {
  116. TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                     
  117. //TH0=0x00;              //給定初值
  118. //TL0=0x00;
  119. EA=1;            //總中斷打開
  120. ET0=1;           //定時器中斷打開
  121. TR0=1;           //定時器開關打開
  122. }
  123. /*------------------------------------------------
  124.                  定時器中斷子程序
  125. ------------------------------------------------*/
  126. void Timer0_isr(void) interrupt 1
  127. {
  128. static unsigned int num;
  129. TH0=(65536-2000)/256;                  //重新賦值 2ms
  130. TL0=(65536-2000)%256;

  131. num++;
  132. if(num==400)        //
  133.    {
  134.     num=0;
  135.     ReadTempFlag=1; //讀標志位置1
  136.         }
  137. }

  138. /*------------------------------------------------
  139. 按鍵掃描函數,返回掃描鍵值
  140. ------------------------------------------------*/
  141. unsigned char KeyScan(void)
  142. {
  143. unsigned char keyvalue;
  144. if(KeyPort!=0xff)
  145.    {
  146.     DelayMs(10);
  147.     if(KeyPort!=0xff)
  148.            {
  149.             keyvalue=KeyPort;
  150.             while(KeyPort!=0xff);
  151.                 switch(keyvalue)
  152.                 {
  153.                  case 0xfe:return 1;break;
  154.                  case 0xfd:return 2;break;
  155.                  case 0xfb:return 3;break;
  156.                  case 0xf7:return 4;break;
  157.                  case 0xef:return 5;break;
  158.                  case 0xdf:return 6;break;
  159.                  case 0xbf:return 7;break;
  160.                  case 0x7f:return 8;break;
  161.                  default:return 0;break;
  162.                 }
  163.           }
  164.    }
  165.    return 0;
  166. }

  167. //定時器2中斷
  168. timer2() interrupt 5  
  169. {
  170. static uchar t;
  171. TF2=0;
  172. t++;
  173. if(t==20) //溢出20次就是1秒鐘,晶振12Mhz
  174. {
  175.   t=0;
  176.   P10=~P10; //反轉LED燈的亮滅
  177. }
  178. }


復制代碼



完整源碼下載:
溫度可調上下限1602顯示.rar (54.24 KB, 下載次數: 77)

評分

參與人數 2黑幣 +53 收起 理由
admin + 50 共享資料的黑幣獎勵!
LXJ50 + 3 有原理圖就更好了

查看全部評分

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

使用道具 舉報

沙發
ID:215238 發表于 2017-10-24 21:13 | 只看該作者
大神 謝了
回復

使用道具 舉報

板凳
ID:526896 發表于 2019-5-11 13:53 | 只看該作者
能對多個DS18B20進行設置嗎
回復

使用道具 舉報

地板
ID:711846 發表于 2020-4-17 11:18 | 只看該作者
有原理圖嗎
回復

使用道具 舉報

5#
ID:106422 發表于 2020-4-18 15:15 | 只看該作者
感謝分享!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91亚洲国产成人久久精品网站 | 久久精品亚洲欧美日韩久久 | 一区在线免费视频 | 国产精品高潮呻吟久久aⅴ码 | 亚洲精品久久久久久宅男 | 久久久久久久久国产 | 亚洲日本三级 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 日韩欧美电影在线 | 国产成人福利视频在线观看 | www.激情.com | 亚洲美女网站 | 欧美一级在线观看 | 一本一道久久a久久精品综合 | 九九热免费视频在线观看 | 精品国产91| 国产视频中文字幕 | 欧美日韩在线综合 | 国产精品久久久久久久免费大片 | 91成人精品 | 欧美精品啪啪 | av永久 | 在线视频第一页 | 一区福利视频 | 日韩一区二区三区四区五区六区 | 亚洲欧美bt | 特级生活片 | 久久久久久99 | 精品视频一区二区三区在线观看 | 国产一区二区三区免费观看在线 | 国产一区二区精品 | 超碰成人免费观看 | 福利片一区二区 | 久久久蜜桃 | h片在线播放 | 国产乱码精品一品二品 | 偷拍第一页 | 亚洲欧美日本国产 | 欧美激情国产日韩精品一区18 | 久久久精彩视频 | 亚洲精品一区二区三区中文字幕 |