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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2411|回復: 0
收起左側

這個煙霧傳感器的單片機程序我想加一個繼電器帶風扇 怎么做?

[復制鏈接]
ID:297587 發表于 2018-5-22 20:59 | 顯示全部樓層 |閱讀模式
下面這個是溫度與煙霧傳感器的程序,可以實現讀取溫度、調溫度的報警值,當溫度或者煙霧傳感器達到設定值后蜂鳴器會報警。現在我想讓他實現報警的時候繼電器也通電,8顆流水燈快速閃爍。我的實驗板繼電器是P1.4口,八顆led燈是P2口。請教大神該怎么改啊。

  1. #include <reg52.h>
  2. #include "18b20.h"
  3. #include <intrins.h>
  4. #define uint unsigned int//宏定義
  5. #define uchar unsigned char//宏定義
  6. #define date P0   //數碼管段選
  7. uint temp,alarm_temp;//定義溫度,設定溫度
  8. bit key_lock,chang_flag;
  9. bit zerotemp_flag; //負溫度標志位
  10. uchar code LED[] = {0xC0,0xF9,0xA4,
  11. 0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};  //三位共陽極數碼管0~9的斷碼
  12. //數碼管位定義
  13. sbit ge  = P1^3;//個位
  14. sbit shi = P1^2;//十位
  15. sbit bai = P1^1;//百位
  16. sbit bell = P1^5;//蜂鳴器定義
  17. sbit MQ = P1^6;//MQ-2定義
  18. sbit DQ = P3^2;//18B20定義
  19. //按鍵定義
  20. sbit key0 = P3^2;
  21. sbit key1 = P3^3;
  22. sbit key2 = P3^4;
  23. sbit key3 = P3^5;
  24. void delay_ms(uint xms)
  25. {//延時子程序
  26. uint i,j;
  27. for(i=xms;i>0;i--)//i=xms即延時約xms;
  28.   for(j=110;j>0;j--);
  29. }
  30. void delay_us(uint z)
  31. {//微妙級延時
  32.     while(z--)
  33.         _nop_();
  34. }
  35. void display(uint x)
  36. {//數碼管顯示子程序
  37. //取一溫度值x
  38. uint temp1;
  39. temp1 = x;
  40. temp1 = temp1%1000;//使溫度值不超過三位有效數
  41. //動態顯示
  42. //顯示個位
  43. ge = 0;//開顯示
  44. date = LED[temp1%10];//將temp1的個位顯示出來
  45. delay_ms(2);//延時2ms
  46. ge = 1;//關顯示
  47. //顯示十位  
  48. shi = 0;//開顯示
  49. date = LED[temp1%100/10]&0x7f;  //將temp1的十位顯示出來,并顯示小數點dp位
  50. delay_ms(2);//延時2ms
  51. shi = 1;//關顯示
  52. //顯示百位
  53. bai = 0;//開顯示
  54. date = LED[temp1/100];//將temp1的百位顯示出來
  55. delay_ms(2);//延時2ms
  56. bai = 1; //關顯示
  57. }
  58. void alarm(void)
  59. {//報警子程序
  60. if((temp>alarm_temp)|(MQ == 0))//如果溫度大于設定值或MQ2=0
  61. {         
  62.   bell = 0;//蜂鳴器響
  63.   
  64. }
  65. else
  66.   bell = 1;//蜂鳴器不響
  67.   
  68. }
  69. /*****************18B20程序******************/
  70. void fuwei(void)
  71. {//18B20復位
  72.     DQ = 0;
  73.     delay_us(50);    //600us
  74.     DQ = 1;
  75.     delay_us(5);     //70us
  76. }
  77. uchar read_18B20(void)
  78. {//從18B20讀取8位數據
  79.     uchar i,dat;             //從最低位開始接收
  80.     for(i = 0;i<8;i++)
  81.     {
  82.         dat>>=1;             //數據右移一位
  83.         DQ = 0;
  84.         _nop_();             //延時1us
  85.         DQ = 1;              //釋放總線        
  86.         _nop_();             //延時2us后在讀取,不然讀取值會紊亂,很關鍵!!!
  87.         _nop_();
  88.         if(DQ)
  89.             dat|=0x80;       //如果接收到的是1,則最高位置為1
  90.         delay_us(2);         //延時40us
  91.     }
  92.     return dat;
  93. }
  94. void write_18B20(uchar dat)
  95. {//對18B20寫8位數據
  96.     uchar i;
  97.     for(i = 0;i<8;i++)
  98.     {
  99.         DQ = 0;
  100.         _nop_();//延時10us
  101.         DQ = (bit)(dat&0x01);  //從最低位開始發送
  102.         dat>>=1;              //右移一位
  103.         delay_us(1);          //延時40us
  104.         DQ = 1;               //釋放總線
  105.     }
  106.    
  107. }
  108. void changetemp(void)
  109. {//溫度值轉換
  110.     uint Temp_L,Temp_H;
  111.     Temp_L = read_18B20();//讀取低八位
  112.     Temp_H = read_18B20();//讀取高八位,當溫度為負數時 temp(7~4)為1,反之為0
  113.     if(((bit)(Temp_H&0x80)))
  114.     {
  115.         zerotemp_flag = 1; //溫度為負數標志位
  116.         //負溫度計算
  117.         Temp_H &= 0x0f;
  118.         temp = (Temp_H<<8|Temp_L)*0.625;
  119.     }
  120.    
  121.     temp = (Temp_H<<8|Temp_L)*0.625; //保存一位小數
  122. }
  123. void read_temp(void)
  124. {//從18B20讀取溫度   
  125.      fuwei();       //復位
  126.      delay_us(10);   //延時
  127.      write_18B20(0xcc);//跳過讀取序列號   
  128.      write_18B20(0x44);//開始轉換溫度
  129.      fuwei();       //復位
  130.      delay_us(10);   //延時
  131.      write_18B20(0xcc);//跳過讀取序列號
  132.      write_18B20(0xbe);//讀暫存指令
  133.      changetemp();  //讀取轉換溫度
  134.      fuwei();      //復位
  135. }
  136. int main(void)
  137. {//主程序
  138. alarm_temp = 300;//設定溫度初始值
  139. read_temp();//18b20測溫
  140. delay_ms(500);//延遲500ms
  141. while(1)
  142. {
  143.   read_temp();//18b20測溫
  144.   display(temp);//顯示測到的溫度
  145.   alarm();//報警
  146.   if(!key0)//如果key0=0,則進入溫度修改狀態
  147.   {
  148.    delay_ms(2);//延遲2ms,消抖
  149.    if(!key0)//如果key0=0,則確定鍵按下,顯示溫度
  150.     chang_flag = 1;
  151.   }
  152.   while(chang_flag)
  153.   {
  154.    if(key1&key2)
  155.     key_lock = 1;//如果key1&key2=1,則無效
  156.    if(!key1)
  157.    {
  158.     delay_ms(2);//延遲2ms,消抖
  159.     if(!key1)
  160.     {
  161.      if(key_lock)
  162.      {
  163.       alarm_temp+=10; //alarm_temp+10=alarm_temp(溫度加1)
  164.       if(alarm_temp>990)//如果數碼管前兩位大于99,則清零
  165.        alarm_temp = 0;
  166.       key_lock = 0;
  167.      }
  168.     }
  169.    }
  170.    if(!key2)
  171.    {
  172.     delay_ms(2);//延遲2ms,消抖
  173.     if(!key2)
  174.     {
  175.      if(key_lock)
  176.      {
  177.       alarm_temp-=10; //alarm_temp+10=alarm_temp(溫度減1)
  178.       if(alarm_temp>1000)//如果三位數碼管都是0,則減一后變為990
  179.        alarm_temp = 990;
  180.       key_lock = 0;
  181.      }
  182.     }
  183.    }
  184.    if(!key3)
  185.    {
  186.     delay_ms(2);//延遲2ms,消抖
  187.     if(!key3)
  188.     {
  189.      if(key_lock)
  190.      {
  191.       chang_flag = 0;
  192.       key_lock = 0;
  193.      }
  194.     }
  195.    }
  196.    display(alarm_temp);//顯示設定溫度
  197.   }
  198. }
  199. }
復制代碼


   


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品不卡视频 | 国产丝袜人妖cd露出 | 精品日韩一区二区 | 久久中文免费视频 | 亚洲网在线 | 伊人久久精品一区二区三区 | 91视频在线 | jlzzjlzz国产精品久久 | 自拍偷拍亚洲一区 | 国产美女精品视频 | 成人黄页在线观看 | 国产精品免费在线 | 日韩欧美一区在线 | 日韩免费视频 | 3p视频在线观看 | 婷婷去俺也去 | 在线观看视频91 | 亚洲国产精品视频一区 | 国产精品视频网 | 久久天天躁狠狠躁夜夜躁2014 | 亚洲成人精品 | 精品国产欧美一区二区三区不卡 | 日韩一区不卡 | 午夜精品久久久久久久久久久久久 | 国产传媒在线播放 | 亚洲国产精品一区二区久久 | 欧美在线a| 国产精品自产拍在线观看蜜 | 日韩欧美在线观看 | 国产精品小视频在线观看 | 欧美日韩手机在线观看 | 国产精品色 | 中文字幕99 | 欧美另类视频在线 | 久视频在线观看 | 日韩一级黄色毛片 | 一区2区| 欧美亚洲另类丝袜综合网动图 | 毛色毛片免费看 | 日日摸日日添日日躁av | 亚洲精品久久久久久久不卡四虎 |