简易密码输入错误报警电路。 硬件电路中,用按键模拟输入密码错误的情形,按键每按一次代 表输入密码错误一次;电路中的蜂鸣器 LS1、发光二极管D1用于声 光报警。编写程序实现电路功能:当连续3次输入错误密码时,LS1 和D1产生声光报警,即D1亮灭3次,LS1发声3次,时间间隔为0.5秒。 要求:时间间隔采用定时器进行编程,按键次数记录采用计数器 完成。
时间: 2023-12-17 07:02:24 浏览: 93
以下是基于51单片机的简易密码输入错误报警电路的程序,其中采用定时器0来进行时间间隔的计数,采用外部中断0来记录按键次数的计数:
```c
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED=P1^0; //发光二极管D1
sbit BEEP=P1^1; //蜂鸣器LS1
sbit KEY=P3^2; //按键K1
uchar cnt=0; //按键计数器
uchar flag=0; //标志位,用于判断是否连续3次错误输入
void Timer0Init() //定时器0初始化函数
{
TMOD|=0x01; //16位定时器模式,使用TR0控制
TH0=(65536-50000)/256; //定时器初值为50ms
TL0=(65536-50000)%256;
ET0=1; //开启定时器0中断
TR0=1; //开启定时器0
EA=1; //开启总中断
}
void ExternalInterrupt0Init() //外部中断0初始化函数
{
IT0=1; //设置为下降沿触发
EX0=1; //开启外部中断0
EA=1; //开启总中断
}
void main()
{
Timer0Init(); //初始化定时器0
ExternalInterrupt0Init(); //初始化外部中断0
while(1);
}
void Timer0() interrupt 1 //定时器0中断服务函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(flag==1) //如果连续输入3次错误密码
{
LED=~LED; //发光二极管D1亮灭3次
BEEP=~BEEP; //蜂鸣器LS1发声3次
cnt=0; //计数器清零
flag=0; //标志位清零
}
}
void ExternalInterrupt0() interrupt 0 //外部中断0服务函数
{
cnt++; //按键计数器加1
if(cnt>=3) //如果连续输入3次错误密码
{
flag=1; //标志位设为1
}
}
```
在程序中,我们首先定义了所需的变量和引脚,并设置了定时器0和外部中断0的初始化函数。在主函数中,我们不需要做任何操作,只需要让程序一直处于循环状态即可。当按键K1按下时,会触发外部中断0,进入中断服务函数进行按键计数,并判断是否连续3次错误输入。如果是,将标志位设为1,在定时器0中断服务函数中进行声光报警操作,同时将计数器和标志位清零。声光报警的操作就是让发光二极管D1亮灭3次,让蜂鸣器LS1发声3次,时间间隔为0.5秒。
阅读全文