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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

自己看書寫的一個(gè)DS18B20溫度傳感器溫度報(bào)警器單片機(jī)程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這個(gè)是我的課件做的,所以電路圖不知道怎么畫   就用畫圖程序畫了一個(gè),將就看吧,功能很簡(jiǎn)單就是檢測(cè)溫度的高低,高于某個(gè)值就報(bào)警,蜂鳴器響,同理低于某個(gè)值也響,最高值和最低值可以通過修改源碼初始化值重新編譯下載到單片機(jī)里,當(dāng)然,我也設(shè)置了功能按鍵,可以通過diy板上的鍵設(shè)置這兩個(gè)值,區(qū)別在于每次斷電后這兩個(gè)值會(huì)恢復(fù)到源碼里面設(shè)置那個(gè)值,好了上圖上源碼


單片機(jī)源程序如下:
  1. //采用共陰極數(shù)碼管
  2.                         //P0接數(shù)碼管段選                可加一個(gè)排阻
  3.                         //P2接數(shù)碼管位選
  4.                         //P1^1接溫度傳感器
  5.                         //P1^0接蜂鳴器(需要一個(gè)三極管放大來驅(qū)動(dòng)蜂鳴器,通常是8550)
  6.                         //僅供參考(八哥)
  7. /*****************************************************************************/
  8. //程序部分開始//
  9. /****************************************************************************/
  10. //頭文件
  11. #include <reg51.h>
  12. /*****************************************************************************/
  13. //數(shù)碼管的段碼編碼
  14. unsigned char code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  15. //下一行的數(shù)組可以顯示數(shù)值外,還可以顯示數(shù)碼管的點(diǎn)
  16. unsigned char code table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
  17. unsigned char code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  18. unsigned int sec = 0,item_h=300,item_l=100;
  19. bit w = 0;
  20. bit v = 1;
  21. /*****************************************************************************/
  22. sbit KEY_1 = P1^4;
  23. sbit KEY_2 = P1^5;
  24. sbit KEY_3 = P1^6;
  25. sbit KEY_4 = P1^7;
  26. sbit led_r = P1^3;
  27. sbit led_g = P1^2;
  28. sbit DQ = P1^1;//ds18B20
  29. sbit        beep   = P1^0;//蜂鳴器
  30. /******************************************************************************/
  31. //DS18B20溫度傳感器驅(qū)動(dòng)(顯示0至60度)
  32. /******************************************************************************/
  33. void Delay(int num){//延時(shí)函數(shù)
  34.         while(num--) ;
  35. }        
  36. /****************************************************************************/
  37. void Delay_1ms(unsigned int a){//延時(shí)函數(shù) 1MS/次        
  38.                 unsigned char i;
  39.                 while( --a != 0){               
  40.                         for(i = 0; i < 125; i++);  //一個(gè) ; 表示空語句,CPU空轉(zhuǎn)。
  41.                 }                                      //i 從0加到125,CPU大概就耗時(shí)1毫秒
  42. }
  43. /****************************************************************************/
  44. /******************************************************************************/
  45. void Init_DS18B20(void){//初始化ds1820
  46.         unsigned char x=0;
  47.         DQ = 1;    //DQ復(fù)位
  48.         Delay(8);  //稍做延時(shí)
  49.         DQ = 0;    //單片機(jī)將DQ拉低
  50.         Delay(80); //精確延時(shí) 大于 480us
  51.         DQ = 1;    //拉高總線
  52.         Delay(14);
  53.         x=DQ;      //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
  54.         Delay(20);
  55. }
  56. /******************************************************************************/
  57. unsigned char ReadOneChar(void){//讀一個(gè)字節(jié)
  58.         unsigned char i=0;
  59.         unsigned char dat = 0;
  60.         for (i=8;i>0;i--){
  61.                 DQ = 0; // 給脈沖信號(hào)
  62.                 dat>>=1;
  63.                 DQ = 1; // 給脈沖信號(hào)
  64.                 if(DQ)
  65.                 dat|=0x80;
  66.                 Delay(4);
  67.         }
  68.         return(dat);
  69. }
  70. /******************************************************************************/
  71. void WriteOneChar(unsigned char dat){//寫一個(gè)字節(jié)
  72.         unsigned char i=0;
  73.         for (i=8; i>0; i--){
  74.                 DQ = 0;
  75.                 DQ = dat&0x01;
  76.                 Delay(5);
  77.                 DQ = 1;
  78.                 dat>>=1;
  79.         }
  80. }
  81. /******************************************************************************/
  82. unsigned int ReadTemperature(void){//讀取溫度
  83.         unsigned char a=0;
  84.         unsigned char b=0;
  85.         unsigned int t=0;
  86.         float tt=0;
  87.         Init_DS18B20();
  88.         WriteOneChar(0xCC); // 跳過讀序號(hào)列號(hào)的操作
  89.         WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
  90.         Init_DS18B20();
  91.         WriteOneChar(0xCC); //跳過讀序號(hào)列號(hào)的操作
  92.         WriteOneChar(0xBE); //讀取溫度寄存器
  93.         a=ReadOneChar();  //讀低8位
  94.         b=ReadOneChar(); //讀高8位
  95.         t=b;
  96.         t<<=8;
  97.         t=t|a;
  98.         tt=t*0.0625;
  99.         t= tt*10+0.5; //放大10倍輸出并四舍五入
  100.         return(t);
  101. }
  102. /*****************************************************************************/
  103. void Display(unsigned int i)
  104. {        
  105.         unsigned char a=0,b=0,c=0;
  106.         a=i/100;
  107.         b=(i/10)%10;
  108.         c=i%10;
  109.         
  110.         P0 = 0;
  111.         P2 = LED_W[3];
  112.         P0 = table[12];        //顯示C
  113.         Delay_1ms(7.5);
  114.         
  115.         P0 = 0;
  116.         P2 = LED_W[2];
  117.         P0 = table[c];        //顯示小數(shù)位溫度
  118.         Delay_1ms(7.5);
  119.         
  120.         P0 = 0;
  121.         P2 = LED_W[1];
  122.         P0 = table_d[b];        //顯示個(gè)位溫度,帶點(diǎn)顯示
  123.         Delay_1ms(7.5);
  124.         
  125.         P0 = 0;
  126.         P2 = LED_W[0];
  127.         P0 = table[a];        //顯示十位溫度
  128.         Delay_1ms(7.5);
  129. }        
  130. /*****************************************************************************/
  131. void Beep_key(void){//-揚(yáng)聲器--按鍵音
  132.         if (v == 1)
  133.         {
  134.                 unsigned char a;//定義變量用于發(fā)聲的長(zhǎng)度設(shè)置
  135.                 for(a=100;a>0;a--){//聲音的長(zhǎng)度
  136.                         beep = ~beep;
  137.                         Delay(50);//音調(diào)設(shè)置延時(shí)
  138.                 }
  139.                 beep = 1;//音樂結(jié)束后揚(yáng)聲器拉高關(guān)閉
  140.         }
  141. }               
  142. /*****************************************************************************/
  143. void set_t(unsigned char sel)
  144. {
  145.         if (sel==0)
  146.         {
  147.                 Display(item_h);
  148.                 led_r = 1;
  149.                 led_g = 0;
  150.         }
  151.         if (sel==1)
  152.         {
  153.                 Display(item_l);
  154.                 led_r = 0;
  155.                 led_g = 1;
  156.         }
  157.         if (KEY_1 == 0)
  158.         {
  159.                 if (KEY_1 == 0 && sel == 0) item_h--;
  160.                 if (KEY_1 == 0 && sel == 1)        item_l--;
  161.                 //if (KEY_1 == 0 && sel == 2)        v = 1;
  162.         }
  163.         if (KEY_2 == 0)
  164.         {
  165.                 if (KEY_2 == 0 && sel == 0) item_h++;
  166.                 if (KEY_2 == 0 && sel == 1)        item_l++;
  167.                 //if (KEY_1 == 0 && sel == 2)        v = 0;
  168.         }
  169. }
  170. /*****************************************************************************/
  171. void main(void)
  172. {
  173.         unsigned char e=0;
  174.         beep = 1;
  175.         while(1)
  176.         {
  177.                 if(w == 0)
  178.                 {
  179.                         sec=ReadTemperature();//讀溫度并送顯
  180.                         Display(sec);
  181.                         if (sec > item_h || sec < item_l)beep = 0;        //蜂鳴器響
  182.                         else beep = 1;
  183.                 }
  184.                 else
  185.                 {
  186.                         if(e==0)Display(item_h);
  187.                         if(e==1)Display(item_l);
  188.                 }
  189. /*******************************************************/
  190.                 if (KEY_1 == 0)                //減調(diào)整
  191.                 {
  192.                         Delay_1ms(15);
  193.                         if (KEY_1 == 0 && w == 1)//調(diào)溫狀態(tài)減調(diào)整
  194.                         {
  195.                                 Beep_key();
  196.                                 set_t(e);
  197.                         }
  198.                 }
  199. /*******************************************************/
  200.                 if (KEY_2 == 0)                        //加調(diào)整
  201.                 {
  202.                         Delay_1ms(15);
  203.                         if (KEY_2 == 0 && w == 1)//調(diào)溫狀態(tài)加調(diào)整
  204.                         {
  205.                                 Beep_key();//按鍵音
  206.                                 set_t(e);
  207.                         }
  208.                 }
  209. /*******************************************************/
  210.                 if (KEY_3 == 0)                //模式調(diào)節(jié)
  211.                 {
  212.                         Delay_1ms(15);
  213.                         if (KEY_3 == 0 && w == 0)        //正常顯示狀態(tài)進(jìn)入調(diào)溫狀態(tài)
  214.                         {
  215.                                 Beep_key();
  216.                                 w = 1;
  217.                         }
  218.                         if (KEY_3 == 0 && w == 1)        //調(diào)溫狀態(tài)選擇上下限調(diào)節(jié)
  219.                         {
  220.                                 e++;
  221.                                 if (e>1)        e = 0;
  222.                                 set_t(e);
  223.                         }
  224.                 }
  225. /*******************************************************/
  226.                 if (KEY_4 == 0)                        //調(diào)溫狀時(shí)退出調(diào)溫
  227.                 {
  228.                         Delay_1ms(15);
  229.                         if (KEY_4 == 0 && w == 1)
  230.                         {
  231.                                 Beep_key();        
  232.                                 w = 0;
  233.                         }
  234.                 }
  235.         }
  236. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:66287 發(fā)表于 2019-9-10 09:06 | 只看該作者
佩服這位仁兄,用畫圖軟件畫出這么漂亮的圖
回復(fù)

使用道具 舉報(bào)

板凳
ID:523687 發(fā)表于 2019-9-10 10:51 | 只看該作者
兄嘚 有PCB嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:365802 發(fā)表于 2019-9-10 11:26 | 只看該作者
不過晶振那裡要修改一下, 是通過電容接地, 不是直接接地.
回復(fù)

使用道具 舉報(bào)

5#
ID:909303 發(fā)表于 2021-4-20 20:53 | 只看該作者
請(qǐng)問一下v和w是什么,是LED燈嗎?一開始v=1,w=0,然而我的燈一開始仿真兩個(gè)LED燈都是亮的而且蜂鳴器一直響,這是為什么,大佬們幫幫忙
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人国产精品久久 | 久久久精品一区二区三区 | 国产美女永久免费无遮挡 | 亚洲日日夜夜 | 久久国产一区 | 国产精品久久久久久久久久东京 | 美女天天操 | 91视频免费观看 | 日韩在线免费 | 伊人久久国产 | 久久精品网 | 国产精品久久久久久久免费大片 | 亚洲精彩免费视频 | 欧美黄色性生活视频 | 国产成人精品一区二区三区四区 | 欧美日韩成人在线观看 | 精精国产xxxx视频在线播放 | www.亚洲一区 | www国产成人免费观看视频,深夜成人网 | 99视频入口 | 国产激情自拍视频 | 日日操操 | 二区中文字幕 | aaa精品| 拍真实国产伦偷精品 | 日本一区不卡 | 日韩免费成人av | 国产一级黄色网 | 亚洲精品电影在线观看 | 黄色大片网 | 日本韩国电影免费观看 | 国产色在线 | 日韩视频福利 | 欧美日韩精品久久久免费观看 | 欧美日韩高清在线一区 | 久久久久久久久国产精品 | 伊人中文网 | 精品一区二区av | 男人影音 | 99久久久国产精品免费消防器 | 日韩高清中文字幕 |