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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS18B20溫度報警課程設計源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:318100 發表于 2018-5-1 11:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
課程設計——溫度監控報警系統單片機源程序如下:
  1. #include "reg52.h"

  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ulong unsigned long
  5.        
  6. //sbit Buzz = P3^2;
  7. sbit Buzz = P1^5;

  8. /*******************************************lcd1602.c函數聲明************************************************/
  9. extern void InitLcd1602();                                          //lcd1602初始化函數
  10. extern void DisplayLimit(uchar x,uchar y,char dat);                //在坐標(x,y)顯示溫度上限或下限
  11. extern void InitMaxMin();                                         //進入溫度報警值設置界面
  12. extern void Display_user(uchar x);                               //顯示用戶自定義的字符“↑”
  13. extern void LcdShowStr(uchar x,uchar y,uchar *str);
  14. extern void LcdShowDat(uchar x,uchar y,uchar num);
  15. extern void Display_laba();
  16. /*******************************************key.c函數聲明****************************************************/
  17. extern void KeyDrive();
  18. extern void KeyScan();
  19. /****************************************ds18b20.c函數聲明***************************************************/
  20. extern bit        RESET_DS18B20(void);
  21. extern uint Read_DS18B20_TEMP(void);
  22. /*****************************************main.c子函數聲明***************************************************/
  23. void Timer1Init(uint ms);                                    //定時器1初始化函數
  24. void SetLimit();                                            //設置報警值函數
  25. void ControlBuzz();                                        //蜂鳴器控制函數
  26. void delay(uint z);
  27. /**********************************************變量定義******************************************************/
  28. extern uchar code buff[];
  29. uchar T1RH=1;                                           //定時器初值
  30. uchar T1RL=1;                                             
  31. bit flagBuzz=0;                                       //蜂鳴器開關標志
  32. bit EBuzz=0;                                         //蜂鳴器使能標志
  33. char High=20;                                       //溫度上限  超過限度蜂鳴器開
  34. char Low=10;                                       //溫度下限
  35. uchar mode=0;                                     //模式變量
  36. uchar cnt=0;                                     //ESC按鍵 變量
  37. uchar tflag;                                    //溫度正負標志位
  38. /*************************************主函數***************************************/
  39. void main()
  40. {
  41.         EA=1;                                            //開啟總中斷
  42.         Timer1Init(1);                                   //初始化定時器1
  43.         RESET_DS18B20();                                 //復位18B20
  44.         delay(20);
  45.   InitLcd1602();                                   //初始化lcd1602
  46.         while(1)
  47.         {
  48.                 LcdShowDat(10,1,buff[Read_DS18B20_TEMP()/100]);           //顯示溫度值十位
  49.                 LcdShowDat(11,1,buff[Read_DS18B20_TEMP()/10%10]);         //顯示溫度值個位
  50.                 LcdShowStr(12,1,".");                                     //顯示小數點
  51.                 LcdShowDat(13,1,buff[Read_DS18B20_TEMP()%10]);            //顯示小數位
  52.                 KeyDrive();                                    //按鍵驅動
  53.                 SetLimit();                                    //設置報警值
  54.         }
  55. }

  56. /**********************************按鍵動作函數************************************/
  57. void KeyDown(uchar keycode)
  58. {
  59.         if(keycode==0x0D)                                        //回車鍵:進入模式設置
  60.         {
  61.                 mode++;
  62.                 if(mode>2)mode=0;
  63.         }
  64.         else if(keycode==0x26)                                   //向上鍵:模式1 上限值+1   模式2 下限值+1
  65.         {
  66.                 if(mode==1)
  67.                 {
  68.                         High++;
  69.                         if(High>99)High=99;
  70.                 }
  71.                 else if(mode==2)
  72.                 {
  73.                         Low++;
  74.                         if(Low==High)Low=High-1;
  75.                 }
  76.         }
  77.         else if(keycode==0x28)                                   //向下鍵:模式1 上限值-1   模式2 下限值-1
  78.         {
  79.                 if(mode==1)
  80.                 {
  81.                         High--;
  82.                         if(High==Low)High=Low+1;
  83.                 }
  84.                 else if(mode==2)
  85.                 {
  86.                         Low--;
  87.                         if(Low<0)Low=0;
  88.                 }
  89.         }
  90.         else if(keycode==0x1B)                                   //Esc鍵:開關蜂鳴器報警
  91.         {
  92.                 if(mode==0)
  93.                 {
  94.                         cnt++;
  95.                   if(cnt>1)cnt=0;
  96.                   if(cnt==1)                                          //蜂鳴器使能開啟 顯示喇叭圖像
  97.                   {
  98.                            EBuzz=1;
  99.                                  Display_laba();
  100.                   }
  101.                   else if(cnt==0)                                     //蜂鳴器使能關閉 不顯示喇叭
  102.                   {
  103.                            EBuzz=0;
  104.                                 LcdShowStr(7,0,"  ");
  105.                   }
  106.           }
  107.   }
  108. }

  109. /************************************報警值設置函數*********************************/
  110. void SetLimit()
  111. {
  112.                 if(mode==0);                                             //模式0 正常顯示 調用蜂鳴器控制函數
  113.                 {
  114.                         ControlBuzz();
  115.                 }
  116.                
  117.                 if(mode!=0)                                              //模式1 調整溫度上限
  118.                 {                                                        //模式2 調整溫度下限
  119.                         EBuzz=0;
  120.                         InitMaxMin();
  121.                         while(mode!=0)
  122.                         {
  123.                                 KeyDrive();
  124.                                 if(mode==1)
  125.                                 {
  126.                                         Display_user(3);                                   //顯示自定義的 箭頭 圖像 指向溫度上限
  127.                                         DisplayLimit(2,0,High);                            //顯示 溫度報警值上下限
  128.                 DisplayLimit(12,0,Low);
  129.                                 }
  130.                                 else if(mode==2)
  131.                                 {
  132.                                         Display_user(13);                                  //顯示自定義的 箭頭 圖像 指向溫度下限
  133.                                         LcdShowStr(3,1," ");
  134.                                         DisplayLimit(2,0,High);
  135.                 DisplayLimit(12,0,Low);
  136.                                 }
  137.                         }
  138.                         InitLcd1602();
  139.                 }
  140. }

  141. /************************************蜂鳴器控制函數************************************/
  142. void ControlBuzz()
  143. {
  144.         if((Read_DS18B20_TEMP()>=(10*High))||(Read_DS18B20_TEMP()<=(10*Low)))
  145.                 flagBuzz=1;
  146.         else
  147.                 flagBuzz=0;
  148.         if((flagBuzz==1)&&(EBuzz==1))
  149.         {
  150.                 Buzz=~Buzz;
  151.         }
  152. }

  153. void delay(uint z)
  154. {
  155.         uint x,y;
  156.         for(x=z;x>0;x--)               
  157.                 for(y=115;y>0;y--);
  158. }

  159. /**********定時器1初始化函數***********/
  160. void Timer1Init(uint ms)
  161. {
  162.         ulong tmp;                                               //16位長整型變量tmp
  163.         tmp=12000000/12;                                         //用晶振頻率除以12得到定時器計數頻率
  164.         tmp=(tmp*ms)/1000;                                       //計算出需要多少個機器周期
  165.         tmp=65536-tmp;                                           //定時器的重載值
  166.         tmp=tmp+28;                                              //補償中斷延時響應造成的誤差
  167.         T1RH=(uchar)(tmp>>8);                                    //將tmp高8位右移8位 賦值給T1RH
  168.         T1RL=(uchar)tmp;                                         //將tmp低8位賦值給T0RL
  169.         TMOD&=0x0F;                                              //清零T1控制位
  170.         TMOD|=0x10;                                              //選擇模式1
  171.         TH1=T1RH;
  172.         TL1=T1RL;
  173.         ET1=1;
  174.         TR1=1;
  175. }

  176. /**********定時器1中斷函數**********/
  177. /*******1毫秒掃描一次獨立按鍵*******/
  178. void InterruptTimer1() interrupt 3
  179. {
  180. ……………………

  181. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
11.DS18B20溫度報警.rar (68.75 KB, 下載次數: 21)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩综合| 国产成人精品一区二区三区 | 日本不卡一区 | 日韩视频精品在线 | 在线观看中文字幕视频 | 日韩精品一区二区三区在线播放 | 亚洲一区高清 | 国产精品视频久久久久 | 精品亚洲一区二区三区 | 手机av网 | 91久久久久久 | 亚洲精品免费视频 | 亚洲精品一二三区 | 精一区二区 | 91精品久久久久久久 | 日韩一区在线观看视频 | 国产精品波多野结衣 | 久久精品综合 | 成在线人视频免费视频 | 一区二区三区精品在线 | 九色网址| 午夜精品视频在线观看 | 欧美大片在线观看 | 欧美性视频在线播放 | 成年人黄色一级毛片 | 国产成人精品久久二区二区91 | 亚洲入口 | 久久黄色网| 97国产一区二区精品久久呦 | 成人啊啊啊 | 一区二区三区视频在线观看 | 国产亚洲一区二区三区 | av在线免费网站 | 97中文视频 | 欧美 中文字幕 | 999久久久| 极品在线 | 亚洲成人中文字幕 | 中文字幕一区二区三区四区 | 日韩午夜一区二区三区 | 亚洲精品乱码久久久久久久久 |