用keiluvision2编写硬件电路中,用按键模拟输入密码错误的情形,按键每按一次代 表输入密码错误一次:电路中的蜂鸣器 LS1、发光三极管 D1 用于声 光报警。编写程序实现电路功能:当连续3次输入错误密码时,LS1 和D1 产生声光报警,即D1 亮灭 3次,LS1 发声3次,时间间隔为 0.5 秒。 要求:时间间隔采用定时器进行编程,按键次数记录采用计数器
时间: 2023-12-08 16:04:50 浏览: 106
以下是一个简单的程序实现:
```c
#include <reg51.h>
#define LS1 P1_0 // 定义蜂鸣器
#define D1 P1_1 // 定义发光三极管
#define KEY P1_2 // 定义按键
unsigned char input_count = 0; // 记录输入错误次数
unsigned char timer_count = 0; // 定时器计数器
void timer0_isr() interrupt 1 { // 定时器中断服务程序
TH0 = 0xfc; // 重新设置定时器初值
TL0 = 0x67;
timer_count++; // 计时器计数器加一
}
void main() {
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0xfc; // 定时器初值
TL0 = 0x67;
EA = 1; // 开启总中断
ET0 = 1; // 开启定时器0中断
TR0 = 1; // 开始计时
while (1) {
if (KEY == 0) { // 如果按键被按下
input_count++; // 输入错误次数加一
while (KEY == 0); // 等待按键释放
if (input_count >= 3) { // 如果输入错误次数达到3次
unsigned char i;
for (i = 0; i < 3; i++) {
LS1 = 1; // 蜂鸣器发声
D1 = 1; // 发光三极管亮
delay(500); // 延时0.5秒
LS1 = 0; // 蜂鸣器停止发声
D1 = 0; // 发光三极管灭
delay(500); // 延时0.5秒
}
input_count = 0; // 重置输入错误次数
}
}
}
}
void delay(unsigned int t) { // 延时函数
unsigned int i, j;
for (i = 0; i < t; i++) {
for (j = 0; j < 125; j++);
}
}
```
在这个程序中,我们首先定义了需要使用的硬件电路元件,包括蜂鸣器、发光三极管和按键。然后定义了两个计数器变量,分别用于记录输入错误次数和定时器计数器。
接下来,我们定义了定时器中断服务程序,用于每隔一段时间增加计时器计数器的值。在 `main` 函数中,我们启动了定时器,然后进入了一个无限循环中。
在循环中,我们检查按键是否被按下,如果是,则将输入错误次数加一。然后我们等待按键释放,如果输入错误次数达到3次,则进入一个循环,其中蜂鸣器和发光三极管交替发光发声,每次间隔0.5秒。循环结束后,输入错误次数被重置为0。
最后,我们还定义了一个简单的延时函数,用于控制蜂鸣器和发光三极管每次发光发声的时间间隔。
阅读全文