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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
简易报警器:当第一次触发时发出报警信号,延时6s后报警信号停止。从停止后计时10s内没有第二次触发则复位,10s内触发第二次则持续报警,只可由复位键复位。
- X* r, x! k0 U7 N) O2 d采用定时器0进行10s计时,定时器1为无源蜂鸣器提供频率500hz的方波。
! ?. w9 U# @0 d# @4 O) W仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)% C! ?3 Y+ c) Z5 a- {
1 {6 k0 G" \! i. e7 N1 @) k
) A* S* w, L; X( o, N, o" f# P
单片机源程序如下:+ j! q! A  i. t4 S8 d0 P. n" M  V
  • #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;
  •                 }
  • }$ n9 a, s8 K  E; ?# {5 l

; j4 ]! p( K2 S1 B4 P+ v4 S
. ^3 X; P) b: d" l

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-17 08:31 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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