找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1368|回复: 0
打印 上一主题 下一主题
收起左侧

单片机报警器

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg51.h>
  2. //------两个常用的宏定义------//
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. void DelayMS(uint);                 //        延时函数的声明
  6. void Time0_Init();                 //        定时器0初始化
  7. void K1_scan();
  8. void Display();
  9. sbit beep=P1^7;                     //        蜂鸣器发出声报警
  10. sbit led=P1^0;                         //        二极管发出光报警
  11. sbit K1=P3^7;                         //        报警装置触发按钮
  12. uint num1;                             // 十秒的计数变量
  13. uint  num2;                             // 六秒的计数变量
  14. uchar flag;                             // 报警按键检测的标志位
  15. uchar code Ledchar[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  16.                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  17. uchar LedBuffer[4]={0x00,0x00,0x00,0x00};
  18. void main()
  19. {
  20.    Time0_Init();
  21.    led=1;
  22.    beep=1;
  23.    flag=0;

  24. while(1)
  25. {
  26.    K1_scan();                          //一直检测按键是否按下
  27.    while(flag==1)                  //flag=1表示按下,执行相应功能
  28.    {
  29.     led=0;                                  //开led
  30.     beep=0;                                  //开蜂鸣器
  31.     flag=0;
  32.         LedBuffer[0]=0x3f;
  33.     LedBuffer[1]=0x79;
  34.     LedBuffer[2]=0x3f;
  35.     LedBuffer[3]=0x79;                                  //清标志位
  36.         }

  37.           while(num1==100)          //五秒延时到,关闭警报
  38.            {
  39.              led=1;
  40.              beep=1;
  41.                  LedBuffer[0]=0x00;
  42.          LedBuffer[1]=0x00;
  43.          LedBuffer[2]=0x00;
  44.          LedBuffer[3]=0x00;
  45.                    }
  46.         while(num2>100 && num2<300 && flag==1)         //关闭后十秒内有键按下则重开警报
  47.         {
  48.            led=0;
  49.        beep=0;
  50.        flag=0;
  51.            LedBuffer[0]=0x3f;
  52.        LedBuffer[1]=0x79;
  53.        LedBuffer[2]=0x3f;
  54.        LedBuffer[3]=0x79;
  55.     }
  56. }   
  57. }               
  58. //------按键检测函数------//               
  59. void K1_scan()
  60. {
  61.    while(K1==0)
  62.      {
  63.           DelayMS(10);
  64.           if(K1==1)
  65.           break;
  66.           while(K1==0);
  67.           EA=1;
  68.           flag=1;
  69.       }
  70. }         

  71. //------定时器0初始化------//
  72. void Time0_Init()
  73. {
  74.         TMOD=0x01;                //选择定时器0工作在定时方式1
  75.         TH0=0x3c;                //定时50ms,装初值
  76.         TL0=0xb0;
  77.         ET0=1;                  //开启定时中断
  78.         EA=0;                        //关总中断
  79.         TR0=1;                        //开启定时器T0

  80. }
  81. //------定时器0中断------//
  82. void Timer0() interrupt 1
  83. {
  84.         TH0=0x3c;                  //重装初值
  85.         TL0=0xb0;
  86.         Display();
  87.         num1++; //计时变量+1
  88.         num2++; //
  89.         }
  90. //------显示函数------//
  91. void Display()
  92. {

  93.   P2=0xfe; P0=LedBuffer[3];        DelayMS(2);
  94.   P2=0xfd; P0=LedBuffer[2];        DelayMS(2);        
  95.   P2=0xfb; P0=LedBuffer[1];        DelayMS(2);
  96.   P2=0xf7; P0=LedBuffer[0];        DelayMS(2);        

  97. }
  98. //------延时函数MS级------//         
  99. void DelayMS(uint x)
  100. {
  101.         uint i,j;
  102.         for(i=x;i>0;i--)
  103.                 for(j=124;j>0;j--);
  104.                 }    }
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表