找回密码
 注册
关于网站域名变更的通知
查看: 145|回复: 2
打印 上一主题 下一主题

简易单片机报警器Proteus仿真图与程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-22 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
简易报警器:当第一次触发时发出报警信号,延时6s后报警信号停止。从停止后计时10s内没有第二次触发则复位,10s内触发第二次则持续报警,只可由复位键复位。" {1 K/ O4 V5 a& C. h6 Z
采用定时器0进行10s计时,定时器1为无源蜂鸣器提供频率500hz的方波。7 j. a# x1 n( @9 l
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载), N& [6 W6 p& \4 y& K) ^8 g  w) l- |

0 w& ]3 T. `* Q) t0 W: Q  M4 o& }$ Q# `! Q2 I$ X( W
单片机源程序如下:* Q! h. K6 q: p1 f: X' \7 y8 T
  • #include<reg52.h>
  • #define uint unsigned int
  • #define uchar unsigned char
  • sbit beep=P2^5;
  • sbit keyalARM=P3^1;
  • sbit keyreset=P3^0;
  • //sbit tensled=P2^1;
  • uchar flag,timer0,timer1,alarm;
  • void Timer0Init()//定时器0用来计时
  • {
  •         TMOD|=0X01;//选择为定时器模式,工作方式1,仅用TR0打开启动。
  •     TH0 = 0x3c;        //配置50ms定时
  •         TL0 = 0xb0;
  •         ET0 = 1;        //打开定时器中断
  •         EA = 1;         //打开总中断
  • }
  • void Timer1Init() //定时器1用来控制蜂鸣器
  • {
  •         TMOD|=0X10;//选择为定时器模式,工作方式1,仅用TR1打开启动。
  •     TH1 = 0xfc;        //配置1毫秒定时
  •         TL1 = 0x18;
  •         ET1 = 1;        //打开定时器中断
  •         EA = 1;         //打开总中断
  •         TR1=1;
  • }
  • void Delay1ms(uint y)//延时1ms
  • {
  •         uint x;
  •         for( ; y>0; y--)
  •         {
  •                 for(x=123; x>0; x--);
  •         }
  • }
  • void keypros()
  • {
  •   if(keyalarm==0&&flag==0)//第一次按键
  •   {
  •         Delay1ms(1);   //消除抖动 一般大约1ms
  •                 if(keyalarm==0)         //再次判断按键是否按下
  •                 {
  •                         flag++;                         //按键次数+1
  •                         alarm=1;                 //第一次按键响6s后关闭
  •                         Delay1ms(6000);
  •                         alarm=0;
  •                         TR0=1;        // 启动定时器
  •                 }
  •                 while(!keyalarm);         //检测按键是否松开
  •   }
  •   else if(keyalarm==0&&flag>=1&&timer0<=200)//若10s内再次按键
  •   {
  •         Delay1ms(1);   //消除抖动 一般大约1ms
  •                 if(keyalarm==0)         //再次判断按键是否按下
  •                 {
  •                         alarm=1;//警报一直响
  •                         flag++;
  •                 }
  •                 while(!keyalarm);         //检测按键是否松开
  •   }
  •   else if(keyreset==0)
  •   {
  •         Delay1ms(1);   //消除抖动 一般大约1ms
  •                 if(keyreset==0)         //再次判断按键是否按下
  •                 {
  •                         alarm=0; //关闭警报
  •                         TR0=0;         //关闭定时器
  •                         timer0=0; //定时器计数值归零
  •                         flag=0;          //清除按键次数
  •                 }
  •                 while(!keyreset);         //检测按键是否松开
  •   }
  • }
  • void autoreset()
  • {
  • if(flag==1&&timer0>200)//10s内未按第二次则自动复位
  • {
  •         TR0=0;        //关闭定时器
  •          timer0=0;//定时器计数值归零
  •         flag=0;        //清除按键次数
  • }
  • }
  • void main()
  • {
  •    Timer0Init();//定时器0初始化
  •    Timer1Init();//定时器1初始化
  •    alarm=0;         //关闭警报
  •    while(1)
  •    {
  •     keypros();
  •     autoreset();
  •    }
  • }
  • void time0(void) interrupt 1
  • {
  •         TH0 = 0x3c;        //配置50ms定时
  •         TL0 = 0xb0;
  •         timer0++;  //定时器0中断每50ms计数值+1
  • }
  • void time1(void) interrupt 3
  • {
  •         TH1 = 0xfc;        //配置1毫秒定时
  •         TL1 = 0x18;
  •         timer1++;        //timer0开始计数,每1毫秒加一
  •                    if(timer1>2)  //PWM周期为2毫秒
  •                 {
  •                         timer1=0;
  •                 }
  •                 if(timer1 <alarm)
  •                 {
  •                         beep=1;
  •                 }
  •                 else
  •                 {
  •                         beep=0;
  •                 }
  • }
    - f. u$ H' F  a- D1 V0 K; ?

8 ?7 S9 Z3 m  ?3 B% t) l
3 i' U) N5 k: u' b3 T+ p

该用户从未签到

2#
发表于 2022-6-22 10:40 | 只看该作者
怎么使用串口控制声音??

该用户从未签到

3#
发表于 2022-6-22 14:01 | 只看该作者
学习学习。||ヽ(* ̄▽ ̄*)ノミ|Ю
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-4 23:50 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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