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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2154|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

智能溫度報警系統(tǒng)程序!!!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:264569 發(fā)表于 2017-12-22 14:12 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
  1. #include<reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit DQ=P3^7;//ds18b20與單片機(jī)連接口
  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;//溫度正負(fù)標(biāo)志
  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)//寫數(shù)據(jù)//
  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()//初始化設(shè)置//
  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復(fù)位*/
  95. {

  96.          DQ = 1;          //DQ復(fù)位
  97.         delay_18B20(4); //延時
  98.         DQ = 0;          //DQ拉低
  99.         delay_18B20(100); //精確延時大于480us
  100.          DQ = 1;          //拉高
  101.         delay_18B20(30);
  102. }
  103. uchar ds1820rd()/*讀數(shù)據(jù)*/
  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)/*寫數(shù)據(jù)*/
  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()/*讀取溫度值并轉(zhuǎn)換*/
  131. {
  132.          uint a,b;
  133.          ds1820rst();   
  134.          ds1820wr(0xcc);//*跳過讀序列號*/
  135.          ds1820wr(0x44);//*啟動溫度轉(zhuǎn)換*/
  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;//溫度值擴(kuò)大10倍,精確到1位小數(shù)
  152.         return(tvalue);
  153. }
  154. /*******************************************************************/
  155. void ds1820disp()//溫度值顯示
  156. {
  157.          uchar flagdat;
  158.          disdata[0]=tvalue/1000+0x30;//百位數(shù)
  159.         disdata[1]=tvalue%1000/100+0x30;//十位數(shù)
  160.         disdata[2]=tvalue%100/10+0x30;//個位數(shù)
  161.         disdata[3]=tvalue%10+0x30;//小數(shù)位
  162.         if(tflag==0)
  163.                  flagdat=0x20;//正溫度不顯示符號
  164.         else
  165.          flagdat=0x2d;//負(fù)溫度顯示負(fù)號:-

  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);//顯示小數(shù)點(diǎn)
  184.         wr_com(0xc5+4);
  185.          wr_dat(disdata[3]);//顯示小數(shù)位
  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. }}
復(fù)制代碼


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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久伦理中文字幕 | 亚洲网站在线观看 | 久久久久国产精品 | 成人三级影院 | 亚州无限乱码 | 在线观看国产精品视频 | 欧美a区 | 日韩中文在线 | 天堂中文在线播放 | 久久一级| 国产91在线 | 中日 | 国产精品1区2区 | 久久精品国产久精国产 | 久久久久国产一区二区三区 | 日韩国产欧美一区 | 欧美激情视频一区二区三区免费 | 日韩欧美高清 | 国产高清视频在线 | 久久成人在线视频 | 草久久久 | 一区二区视频在线 | 在线播放日韩 | 亚洲视频一区在线播放 | 黄色在线免费观看视频网站 | 欧美一级毛片在线播放 | 久久久久国产精品 | 久久机热 | 日日噜噜夜夜爽爽狠狠 | 精品一区av | 无码一区二区三区视频 | 天天爱爱网 | 毛片入口| 午夜视频网站 | 国产一区不卡在线观看 | www.亚洲成人网| 中文字幕一区二区三区在线视频 | 香蕉超碰| 亚洲国产成人精品女人久久久野战 | 久久精品视频99 | 亚洲高清视频一区二区 | 一区二区成人 |