找回密码
 立即注册

QQ登录

只需一步,快速开始

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

89C51声光报警系统(转载)

[复制链接]
跳转到指定楼层
楼主
ID:918585 发表于 2021-5-10 13:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
声光报警器仿真原理图(文件下载请转http://www.51hei.com/bbs/dpj-115948-1.html


单片机源程序如下:
  • /* 本程序是一个以89C51为核心的声光报警器控制程序
  • 系统的晶振频率12MHz,外界报警触发脉冲接至INT0,报警复位按钮接P1.2,喇叭接P1.1
  • 当外界报警脉冲触发报警后,LED(接P1.0)以1Hz的频率闪动,同时喇叭种发出"Wu,Wa......"的警笛声
  • 该声音由1kHz和500Hz方波以0.5秒为间隔交替发声
  • 值班人员按动报警复位钮后声光报警停止。*/
  • #include "AT89X51.h"
  • bit hisound;     /* 高音标志 */
  • sbit led=P1^0;         /* 报警灯接口 */
  • sbit speak=P1^1; /* 喇叭接口 */
  • sbit stop=P1^2;         /* 复位按钮 */
  • unsigned char data i; /* 50ms中断次数计数单元 */
  • void delayms(unsigned int x);  /* 延时1ms倍数的延时子程序 */
  • void main(void)
  • {
  • IT0=1; /* 设置INT0为边沿中断 */
  • ET0=1; /* 允许T0中断 */
  • ET1=1; /* 允许T1中断 */
  • EX0=1; /* 允许INT0中断 */
  • PT0=1; /* T0设为高级中断 */
  • EA=1;  /* 开中断 */
  • hisound=1; /* 高音标志置1,先发高音 */
  • led=1;  /* 熄灭报警灯 */
  • speak=0; /* 喇叭断电 */
  • TMOD=0x11; /* 设T0、T1为定时器,方式1 */
  • TH0=0xfe; /* 0.5ms定时初值 */
  • TL0=0x0c;
  • TH1=0x3c;  /* 50ms定时初值 */
  • TL1=0xb0;
  • i=10;   /* 50ms中断10次为0.5秒 */
  • stop=1; /* 允许报警复位按钮输入 */
  • while (1)
  • {
  •    if (stop==0) /* 如果按下停止报警按钮 */
  •     {
  •      delayms(20);  /* 延时20ms消除开关抖动 */
  •       }
  •    if (stop==0)
  •     {
  •       TR0=0;  /* 停止T0定时 */
  •       TR1=0;  /* 停止T1定时 */
  •       led=1;  /* 熄灭报警灯 */
  •       speak=0; /* 关闭喇叭 */
  •       }
  •    }
  • }
  • /* INT0 中断服务程序 */
  • void int0(void) interrupt 0
  • {
  • TR0=1; /* 启动T0定时 */
  • TR1=1; /* 启动T1定时 */
  • }
  • /* T0中断服务程序 */
  • /* 用来产生救护车的警笛声 */
  • void timer0(void) interrupt 1
  • {
  •   if (hisound==1)  /* 如果产生高音 */
  •     {
  •      TH0=0xfe;   /* 0.5ms定时初值 */
  •      TL0=0x0c;
  •       }
  •    else
  •     {
  •      TH0=0xfc;   /* 1ms定时初值 */
  •      TL0=0x18;
  •       }
  •    speak=!speak; /* 驱动喇叭的输出取反 */
  • }
  • /* T1中断服务程序 */
  • /* 用来产生0.5秒的定时 */
  • void timer1(void) interrupt 3
  • {
  •   TH1=0x3c; /* 50ms定时初值 */
  •   TL1=0xb0;
  •   i=i-1;
  •   if (i==0) /* 如果到0.5秒 */
  •     {
  •       i=10;
  •       hisound=!hisound;  /* 高音标志取反,变音 */
  •       led=!led;   /* 报警灯改变亮灭 */
  •       }
  • }
  • /* 延时子程序,延时1ms的倍数 */
  • void delayms(unsigned int x)
  • {
  •   unsigned char j;
  •   while(x--)
  •     {
  •       for(j=0;j<123;j++){;}
  •     }
  • }



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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