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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機+1602+DS18B20的溫度報警程序+實物設計(按鍵可調溫度閾值)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:393699 發表于 2018-12-18 18:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
新人報道,發個帖報道一波
51單片機做的溫度顯示,溫度顯示在LCD1602液晶屏上。
然后按鍵可以調整溫度閾值,溫度高于或低于所設溫度,蜂鳴器就會響……
第一次做的成品,就發出來紀念一下吧,代碼寫得有點菜,有需要的拿去……












單片機源程序如下:
  1. /**************************************************************************************

  2. *                              基于單片機的實時溫度報警系統設計                                                                                                  *

  3.     (1)DS18b20采集到的溫度可以實時地在數碼管或者在液晶上顯示出來;
  4.     (2)用三個獨立鍵盤設置閥值,包括設置鍵,加鍵,減鍵和確認鍵;
  5.     (3)按下設置鍵時,數碼管或者液晶上顯示2S“H”字,隨后溫度閃爍顯示,進入設置閥值最大值狀態;
  6.          再次按下設置鍵,數碼管或者液晶上顯示2S“L”字,隨后溫度閃爍顯示,進入設置閥值最小值狀態,
  7.          第三次按下設置鍵(此時相當于確認鍵),系統保存設置好的閥值并進入正常的溫度顯示狀態;
  8.                     (此程序功能與第三點有出入)
  9.     (4)當采集到的溫度大于閥值最大值或者小于閥值最小值時蜂鳴器發出聲音報警。
  10.          
  11.          注釋:k1:溫度加   k2:溫度減   k3:低溫度閾值設置   k4:高溫度閾值設置

  12.         適用單片機:STC89C52RC      適用開發板:普中科技  CH—6800ES V2.0    晶振:12MHZ
  13.                                                                                                                                                                   
  14. ***************************************************************************************/

  15. #include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
  16. #include "lcd.h"
  17. #include "temp.h"
  18. #include "intrins.h"
  19. #include "key.h"

  20. typedef unsigned int u16;          //對數據類型進行聲明定義
  21. typedef unsigned char u8;

  22. u8 Disp[]=  "Temp:           ";
  23. u8 Disp2[]= "Xiaoliyu Design ";

  24. extern unsigned int LTemp;        //低閾值溫度
  25. extern unsigned int LLTemp;
  26. unsigned int DTemp;               //高閾值溫度
  27. unsigned int DLTemp;

  28. u16 NowTemp=35;                   //當前溫度
  29. u16 IntFlag1=0;                   //外部中斷1標志位
  30. u16 IntFlag0=0;                   //外部中斷0標志位

  31. sbit Beep=P1^5;                   //設置蜂鳴器引腳
  32. sbit LA=P2^2;
  33. sbit LB=P2^3;
  34. sbit LC=P2^4;

  35. void delay10us(void);
  36. void delay100us(void);
  37. void delay10ms(void);
  38. void delay1s(void);
  39. void Int1Init();
  40. void Int0Init();
  41. void Timer0Init();

  42. /*******************************************************************************
  43. * 函 數 名         : main
  44. * 函數功能                     : 主函數
  45. * 輸    入         : 無
  46. * 輸    出         : 無
  47. *******************************************************************************/
  48. void main(void)
  49. {
  50.          u8 i;
  51.          Int1Init();                   //外部中斷1初始化
  52.          Int0Init();                   //外部中斷0初始化
  53.          LcdInit();                    //LCD1602初始化
  54.    Timer0Init();                       //定時器0初始化
  55.         
  56.          LA =1;
  57.          LB =0;
  58.          LC =0;
  59.         
  60. ////////////////////////////////////////////////////////////////////////////////
  61.         
  62.            for(i=0;i<16;i++)           //初始化LCD屏(第一行)
  63.            {
  64.                    LcdWriteData(Disp[i]);        
  65.            }
  66.                  
  67.             delay100us();
  68.             LcdWriteCom(0xC0);                //初始化LCD屏(第二行)
  69.                  
  70.             for(i=0;i<16;i++)
  71.            {
  72.                    LcdWriteData(Disp2[i]);        
  73.            }

  74.     /////////////////////////////////////////////////////////////////////
  75.                  
  76.                 while(1)
  77.           {

  78.                           LcdWriteCom(0x85);
  79.                     datapros(Ds18b20ReadTemp());                    //獲取DS18B20溫度
  80.                      for(i=0;i<11;i++)                        //溫度信息寫入1602
  81.                {
  82.                         LcdWriteData(DisplayData[i]);        
  83.                }        

  84.                
  85.         if(IntFlag1==1)                           //若外部中斷1標志位為1,則進入高溫度閾值設置界面
  86.              {                 
  87.                 LcdMenu();
  88.                             if(IntFlag1==0)                         //若外部中斷1標志位為0,則退出高溫度閾值設置界面
  89.                             {                                       //重載溫度顯示頁面參數
  90.                                     LcdInit();        
  91.                   for(i=0;i<16;i++)                    
  92.                    {
  93.                           LcdWriteData(Disp[i]);        
  94.                    }
  95.                    delay100us();
  96.                  
  97.                   LcdWriteCom(0xC0);
  98.                   for(i=0;i<16;i++)
  99.                    {
  100.                           LcdWriteData(Disp2[i]);        
  101.                    }
  102.                                                 
  103.                              }                                
  104.          delay10ms();                 
  105.                         
  106.               }
  107.                  
  108.                  
  109.                     if(IntFlag0==1)                           //若外部中斷0標志位為1,則進入低溫度閾值設置界面
  110.               {
  111.                         
  112.                  LcdMenuL();
  113.                              if(IntFlag0==0)                        //若外部中斷0標志位為0,則退出低溫度閾值設置界面
  114.                              {                                      //重載溫度顯示頁面參數
  115.                                      LcdInit();        
  116.                    for(i=0;i<16;i++)
  117.                    {
  118.                           LcdWriteData(Disp[i]);        
  119.                    }
  120.                    delay100us();
  121.                  
  122.                    LcdWriteCom(0xC0);
  123.                    for(i=0;i<16;i++)
  124.                    {
  125.                          LcdWriteData(Disp2[i]);        
  126.                    }
  127.                                                 
  128.                              }
  129.            delay10ms();                                          
  130.               }
  131.                  
  132.                  
  133.                      NowTemp=dataReturn(Ds18b20ReadTemp());     //獲取當前溫度
  134.                      DTemp=(LTemp/100);                         //獲取高溫度閾值
  135.                      DLTemp=(LLTemp/100);                       //獲取低溫度閾值
  136.                                 
  137.                      if((NowTemp>=DTemp)|(NowTemp<=DLTemp))    //如果當前溫度大于高溫度閾值或小于低溫度閾值,則打開定時器0啟動蜂鳴器
  138.                      {
  139.                              ET0=1;                                  //打開定時器0中斷允許
  140.                              led=~led;                        
  141.            delay10us();                        
  142.                       }
  143.                      else
  144.                      {
  145.                              ET0=0;                                  //關閉定時器0中斷允許
  146.                              delay10us();
  147.                      }

  148.            }
  149.                
  150. ////////////////////////////////////////////////////////////////////////////////
  151.                
  152. }        

  153. /*******************************************************************************
  154. * 函 數 名         : delay10ms
  155. * 函數功能                     : 延時函數10ms
  156. * 輸    入         : 無
  157. * 輸    出         : 無
  158. *******************************************************************************/

  159. void delay10ms(void)   
  160. {
  161.     unsigned char a,b,c;
  162.     for(c=1;c>0;c--)
  163.         for(b=38;b>0;b--)
  164.             for(a=130;a>0;a--);
  165. }

  166. /*******************************************************************************
  167. * 函 數 名         : delay100us
  168. * 函數功能                     : 延時函數100us
  169. * 輸    入         : 無
  170. * 輸    出         : 無
  171. *******************************************************************************/

  172. void delay100us(void)   
  173. {
  174.     unsigned char a,b;
  175. for(b=1;b>0;b--)
  176.         for(a=47;a>0;a--);
  177. }

  178. /*******************************************************************************
  179. * 函 數 名         : delay10us
  180. * 函數功能                     : 延時函數10us
  181. * 輸    入         : 無
  182. * 輸    出         : 無
  183. *******************************************************************************/

  184. void delay10us(void)   
  185. {
  186.     unsigned char a,b;
  187.     for(b=1;b>0;b--)
  188.         for(a=2;a>0;a--);
  189. }

  190. /*******************************************************************************
  191. * 函 數 名         : Int1Init
  192. * 函數功能                     : 延時函數10us
  193. * 輸    入         : 無
  194. * 輸    出         : 無
  195. *******************************************************************************/

  196. void Int1Init()
  197. {
  198.         //設置INT1
  199.         IT1=1;//跳變沿出發方式(下降沿)
  200.         EX1=1;//打開INT1的中斷允許。        
  201.         EA=1;//打開總中斷        
  202. }

  203. /*******************************************************************************
  204. * 函 數 名         : Int0Init
  205. * 函數功能                     : 延時函數10us
  206. * 輸    入         : 無
  207. * 輸    出         : 無
  208. *******************************************************************************/

  209. void Int0Init()
  210. {
  211.          //設置INT1
  212.         IT0=1;      //跳變沿出發方式(下降沿)
  213.         EX0=1;      //打開INT0的中斷允許。        
  214.         EA=1;       //打開總中斷        
  215. }

  216. /*******************************************************************************
  217. * 函 數 名         : Timer0Init
  218. * 函數功能                     : 定時器0初始化
  219. * 輸    入         : 無
  220. * 輸    出         : 無
  221. *******************************************************************************/
  222. void Timer0Init()
  223. {
  224.         TMOD|=0X01;   //選擇為定時器0模式,工作方式1,僅用TR0打開啟動。

  225.         TH0=0XFA;            //給定時器賦初值,定時1ms
  226.         TL0=0X24;        
  227.         ET0=1;        //打開定時器0中斷允許
  228.         EA=1;         //打開總中斷
  229.         TR0=1;        //打開定時器                        
  230. }

  231. /*******************************************************************************
  232. * 函 數 名         : Int0
  233. * 函數功能                     : 外部中斷0
  234. * 輸    入         : 無
  235. * 輸    出         : 無
  236. *******************************************************************************/

  237. void Int0()        interrupt 0               
  238. {
  239.         delay10ms();                          //延時消抖
  240.         if(k3==0)                       //K3按下時設置外部中斷0標志位為1,再按一次設置為0   
  241.         {
  242.                
  243.                 if(IntFlag0==0)
  244.                 IntFlag0=1;
  245.                 else
  246.                 IntFlag0=0;               
  247.                 led=~led;
  248.                                 
  249.         }
  250.         
  251. }

  252. /*******************************************************************************
  253. * 函 數 名         : Int1
  254. ……………………

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

所有資料51hei提供下載:
51+1602+DS18B20.zip (78.87 KB, 下載次數: 435)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:538674 發表于 2019-5-17 08:09 | 只看該作者
連線怎么連
回復

使用道具 舉報

板凳
ID:502682 發表于 2019-5-17 19:04 | 只看該作者
。。。
我發表了幾千行的代碼都能顯示出來
回復

使用道具 舉報

地板
ID:565086 發表于 2019-6-18 16:31 | 只看該作者
用Keil4編譯不行 Keil5可以

Digital Class Design.7z

31.6 KB, 下載次數: 9, 下載積分: 黑幣 -5

回復

使用道具 舉報

5#
ID:759739 發表于 2020-5-24 12:18 | 只看該作者
編譯不成功呀,求解
回復

使用道具 舉報

6#
ID:826935 發表于 2020-10-16 16:20 | 只看該作者
這個工程要用Keil5才能編譯成功
回復

使用道具 舉報

7#
ID:826935 發表于 2020-10-16 16:21 | 只看該作者
什么地方有問題嘞
回復

使用道具 舉報

8#
ID:825648 發表于 2020-12-4 12:43 | 只看該作者
編譯失敗的話去output 把空格刪除換成下劃線就好了,但是仿真我還是用不了,虧了五個幣虧死我了
回復

使用道具 舉報

9#
ID:876099 發表于 2021-7-28 18:02 | 只看該作者
我向請問一下作者我按照這個普中這塊板子焊接的,但是最后焊接出來板子可以顯示,我焊接的板子就不顯示是什么原因呢求解答
回復

使用道具 舉報

10#
ID:876099 發表于 2021-8-17 18:12 | 只看該作者
我想問一下作者,這個帶溫度補償嗎
回復

使用道具 舉報

11#
ID:961013 發表于 2021-8-22 18:27 | 只看該作者

我的總是編譯失敗啊,難受死了。用不了呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久精品一区二区三区 | 天天操天天操 | 成年人的视频免费观看 | 欧美极品在线播放 | 欧美综合一区二区三区 | 亚洲精品一| 成人国产午夜在线观看 | 久久99精品久久久久久国产越南 | 亚洲精品国产成人 | 精品一区视频 | 盗摄精品av一区二区三区 | 成人欧美一区二区三区 | 亚洲经典一区 | 欧美一区二区三区 | 在线中文字幕亚洲 | 欧美一区二区三区四区视频 | 亚洲国产aⅴ精品 | 免费国产精品久久久久久 | 欧美性乱 | www.色婷婷 | 国产探花在线观看视频 | 亚洲成人在线免费 | 欧美成人一区二免费视频软件 | 日韩精品一区二区三区中文在线 | 日本精品久久久久 | 日本不卡一区二区三区在线观看 | 日韩亚洲欧美一区 | www亚洲成人 | 91视频在线 | 欧美一卡二卡在线观看 | 鲁一鲁资源影视 | 男女爱爱网站 | 免费在线播放黄色 | 狠狠久 | 99精品网| 精品久久久久久一区二区 | 日韩免费视频一区二区 | 国产精品国色综合久久 | 成人做爰69片免费观看 | 亚洲精品日韩在线 | 狠狠影院|