单片机自动报警器代码,数码管显示计数值,到规定时间蜂鸣器响,LED灯亮
时间: 2024-03-10 08:49:51 浏览: 97
以下是一个基于AT89C51单片机的自动报警器代码示例,实现了数码管显示计数值、到规定时间蜂鸣器响、LED灯亮:
```c
#include <reg51.h>
sbit buzzer = P1^7; //定义蜂鸣器控制引脚
sbit led = P1^0; //定义LED灯控制引脚
unsigned char code table[] = { //数码管段码表
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
};
void delay(unsigned int x); //延时函数声明
void main(void)
{
unsigned int cnt = 0; //计数器
unsigned char i = 0; //数码管位选变量
while(1)
{
P0 = table[cnt%10]; //显示个位
P2 = 1 << i; //数码管位选
delay(1); //延时1毫秒
P0 = table[cnt/10]; //显示十位
P2 = 1 << i; //数码管位选
delay(1); //延时1毫秒
i++; //数码管位选变量加1
if(i >= 4) i = 0; //循环显示4位数码管
cnt++; //计数器加1
if(cnt >= 1000) //计数器达到1000时
{
buzzer = 1; //蜂鸣器响
led = 1; //LED灯亮
delay(5000); //延时5秒
buzzer = 0; //蜂鸣器停止响
led = 0; //LED灯灭
cnt = 0; //计数器清零
}
}
}
void delay(unsigned int x) //延时函数定义
{
unsigned int i, j;
for(i=0;i<x;i++)
{
for(j=0;j<125;j++);
}
}
```
以上代码实现了一个数码管显示计数值的功能,每隔1毫秒更新一次计数值,并且当计数值达到1000时,蜂鸣器响、LED灯亮,并延时5秒后停止响和灭。如果要实现更复杂的功能,可以根据具体需求进行修改和扩展。
阅读全文