单片机自动报警器代码,数码管显示计数值,到规定时间30秒蜂鸣器响
时间: 2024-03-10 15:50:02 浏览: 14
好的,下面是一个基于51单片机的自动报警器代码,使用数码管显示计数值,到规定时间30秒蜂鸣器响:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
// 数码管引脚定义
sbit dula=P2^6;
sbit wela=P2^7;
// 数码管码表
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
// 延时函数
void delay(uint xms){
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
// 数码管显示函数
void display(uint num){
uchar ge,shi,bai;
ge=num%10;
shi=num/10%10;
bai=num/100;
P0=0;
dula=1;
dula=0;
P0=table[bai];
wela=1;
wela=0;
P0=0;
dula=1;
dula=0;
P0=table[shi];
wela=1;
wela=0;
P0=0;
dula=1;
dula=0;
P0=table[ge];
wela=1;
wela=0;
}
void main(){
uint cnt=0;
TMOD=0x01; // 设置定时器0为模式1
TH0=0x3c; // 定时器初值高位
TL0=0xb0; // 定时器初值低位
ET0=1; // 开启定时器0中断
EA=1; // 开启总中断
TR0=1; // 启动定时器0
while(1){
display(cnt); // 显示计数器值
if(cnt>=30){ // 判断是否到达30秒
P1=0xff; // 灯亮
while(1){ // 反复响铃
P1=P1^0x01; // 蜂鸣器取反,让蜂鸣器不断地响
delay(100); // 延时100ms
}
}
}
}
// 定时器0中断函数
void timer0() interrupt 1{
TH0=0x3c; // 重新赋初值高位
TL0=0xb0; // 重新赋初值低位
cnt++; // 计数器加1
}
```
注意:由于不同的硬件和需求不同,上述代码可能需要进行适当的修改和调整,以适合您的具体需求。另外,代码中的蜂鸣器和灯的引脚定义是P1.0和P1.1,如果您的硬件不同,需要修改相应的引脚定义。