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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

智能溫度報警系統程序!!!

[復制鏈接]
跳轉到指定樓層
樓主
ID:264569 發表于 2017-12-22 14:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit DQ=P3^7;//ds18b20與單片機連接口
  6. sbit EN=P2^7;
  7. sbit RW=P2^5;
  8. sbit RS=P2^6;
  9. sbit BEEP = P1^7;//蜂鳴器
  10. uchar code str1[]={" Temperature is   "};
  11. uchar code str2[]={"studentNO:         "};
  12. uchar code str3[]={"0346912"};  
  13. uchar data disdata[5];
  14. uchar p=0;
  15. uint tvalue;//溫度值
  16. uchar tflag;//溫度正負標志
  17. //*************************lcd1602程序**************************/
  18. void delay1ms(uint ms)//延時1毫秒
  19. {
  20.          uint i,j;
  21.          for(i=0;i<ms;i++)
  22.          for(j=0;j<114;j++);
  23. }
  24. //*************************報警程序**************************/
  25. void baojing(void)
  26. {
  27.        unsigned int j;
  28.            BEEP=0;
  29.        for (j = 49; j > 0; j--)//響30ms
  30.         {
  31.           BEEP = ~BEEP; //輸出頻率800Hz
  32.           delay1ms(10); //延時310us
  33.           }
  34.               BEEP=0;
  35.     }
  36. void wr_com(uchar com)//寫指令//
  37. {
  38.          delay1ms(1);
  39.          RS=0;
  40.          RW=0;
  41.          EN=0;
  42.          P0=com;
  43.          delay1ms(1);
  44.          EN=1;
  45.          delay1ms(1);
  46.          EN=0;
  47. }
  48. void wr_dat(uchar dat)//寫數據//
  49. {
  50.          delay1ms(1);
  51.          RS=1;
  52.          RW=0;
  53.          EN=0;
  54.          P0=dat;
  55.          delay1ms(1);
  56.          EN=1;
  57.          delay1ms(1);
  58.          EN=0;
  59. }
  60. void lcd_init()//初始化設置//
  61. {
  62.          wr_com(0x38);delay1ms(5);
  63.          wr_com(0x08);delay1ms(5);
  64.          wr_com(0x01);delay1ms(5);
  65.          wr_com(0x06);delay1ms(5);
  66.          wr_com(0x0c);delay1ms(5);
  67. }
  68. void display(uchar *p)//顯示//
  69. {
  70.          while(*p!='\0')
  71.          {
  72.                  wr_dat(*p);
  73.                  p++;
  74.                  delay1ms(1);
  75.          }
  76. }                                                                        
  77. void init_play()//初始化顯示
  78. {
  79.          lcd_init();
  80.          wr_com(0x80);
  81.          display(str2);
  82.          wr_com(0xc0);
  83.          display(str3);
  84.          delay1ms(3000);
  85.          lcd_init();
  86. wr_com(0x80);
  87.          display(str1);
  88. }

  89. /***************************ds18b20程序****************************/
  90. void delay_18B20(uint i)//延時1微秒
  91. {
  92.     while(i--);
  93. }
  94. void ds1820rst()/*ds1820復位*/
  95. {

  96.          DQ = 1;          //DQ復位
  97.         delay_18B20(4); //延時
  98.         DQ = 0;          //DQ拉低
  99.         delay_18B20(100); //精確延時大于480us
  100.          DQ = 1;          //拉高
  101.         delay_18B20(30);
  102. }
  103. uchar ds1820rd()/*讀數據*/
  104. {
  105.          uchar i=0;
  106.          uchar dat = 0;
  107.          for (i=8;i>0;i--)
  108.          {  
  109.                  DQ = 0; //給脈沖信號
  110.             dat>>=1;
  111.              DQ = 1; //給脈沖信號
  112.             if(DQ)
  113.              dat|=0x80;
  114.              delay_18B20(10);
  115.          }
  116.     return(dat);
  117. }
  118. void ds1820wr(uchar wdata)/*寫數據*/
  119. {
  120.          uchar i=0;
  121.          for (i=8; i>0; i--)
  122.          {
  123.                  DQ = 0;
  124.                  DQ = wdata&0x01;
  125.                  delay_18B20(10);
  126.                  DQ = 1;
  127.                  wdata>>=1;
  128.          }
  129. }
  130. read_temp()/*讀取溫度值并轉換*/
  131. {
  132.          uint a,b;
  133.          ds1820rst();   
  134.          ds1820wr(0xcc);//*跳過讀序列號*/
  135.          ds1820wr(0x44);//*啟動溫度轉換*/
  136.          ds1820rst();   
  137.          ds1820wr(0xcc);//*跳過讀序列號*/
  138.          ds1820wr(0xbe);//*讀取溫度*/
  139.          a=ds1820rd();
  140.          b=ds1820rd();
  141.          tvalue=b;
  142.          tvalue<<=8;
  143.          tvalue=tvalue|a;
  144. if(tvalue<0x08ff)
  145.                  tflag=0;
  146.          else
  147.          {
  148.                  tvalue=~tvalue+1;
  149.                  tflag=1;
  150.          }                                                                                                         
  151.          tvalue=tvalue*(0.0625)*10;//溫度值擴大10倍,精確到1位小數
  152.         return(tvalue);
  153. }
  154. /*******************************************************************/
  155. void ds1820disp()//溫度值顯示
  156. {
  157.          uchar flagdat;
  158.          disdata[0]=tvalue/1000+0x30;//百位數
  159.         disdata[1]=tvalue%1000/100+0x30;//十位數
  160.         disdata[2]=tvalue%100/10+0x30;//個位數
  161.         disdata[3]=tvalue%10+0x30;//小數位
  162.         if(tflag==0)
  163.                  flagdat=0x20;//正溫度不顯示符號
  164.         else
  165.          flagdat=0x2d;//負溫度顯示負號:-

  166.         if(disdata[0]==0x30)
  167.          {
  168.                  disdata[0]=0x20;//如果百位為0,不顯示
  169.                 if(disdata[1]==0x30)
  170.                  {
  171.                          disdata[1]=0x20;//如果百位為0,十位為0也不顯示
  172.                 }
  173.          }
  174.          wr_com(0xc0+4);
  175.          wr_dat(flagdat);//顯示符號位
  176.         wr_com(0xc1+4);
  177.          wr_dat(disdata[0]);//顯示百位
  178.         wr_com(0xc2+4);
  179.          wr_dat(disdata[1]);//顯示十位
  180.         wr_com(0xc3+4);
  181.          wr_dat(disdata[2]);//顯示個位
  182.         wr_com(0xc4+4);
  183.          wr_dat(0x2e);//顯示小數點
  184.         wr_com(0xc5+4);
  185.          wr_dat(disdata[3]);//顯示小數位
  186.         wr_com(0xc6+4);
  187.      wr_dat(0x43);
  188. }
  189. //********************主程序***********************************//
  190. void main()
  191. {         
  192.      BEEP=0;
  193.          init_play();//初始化顯示
  194. while(1)
  195.          {         
  196.                     read_temp();//讀取溫度
  197.                      ds1820disp();//顯示
  198.                         if(read_temp()>252+0x30||read_temp()<203+0x30)           //上限30°C報警,下限25°C報警
  199.                         {  baojing() ;}
  200.                          delay1ms(1)        ;
  201. }}
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区视频 | 在线播放一区二区三区 | 精品国产不卡一区二区三区 | 国产精品毛片久久久久久久 | 成人精品鲁一区一区二区 | 亚洲一区二区精品视频 | 亚洲国产精品激情在线观看 | 欧美在线一区二区三区 | 久久久久久亚洲精品不卡 | 91国内在线观看 | 中文字幕 在线观看 | 97人澡人人添人人爽欧美 | 美女视频黄的免费 | 久久久久国产精品午夜一区 | 男人的天堂视频网站 | 91免费看片| 欧美日韩综合精品 | 午夜免费看视频 | 亚洲成人一区 | 日韩精品一区二区三区中文在线 | 欧美国产视频 | 欧美黄 片免费观看 | 情侣黄网站免费看 | 精品综合视频 | 欧美精品在线免费观看 | 狠狠操狠狠操 | 91.色 | 欧美黑人狂野猛交老妇 | 色婷婷激情综合 | 久久久久久久久久久久一区二区 | 国产一区二区 | 亚洲精久| 亚洲成av人片在线观看 | 波多野结衣精品在线 | 国产精品一区三区 | 有码一区 | 日中文字幕在线 | 亚洲一区视频 | 黄色一级电影免费观看 | 国产精品久久久久久久一区二区 | 欧洲精品在线观看 |