利用单片机c51设计秒倒计时器 要求:1.通过"设定"、"+"、"一"键设定秒定时(最多99s),按"确定"键确定倒计时时间; 2将倒计时时间通过两位8位数码输出; 3倒计时时间到 LED 灯闪烁报警;
时间: 2023-07-19 18:03:35 浏览: 175
99分钟倒计时器报警器实验例程C51单片机KEIL工程源码文件.zip
5星 · 资源好评率100%
以下是使用C51单片机设计秒倒计时器的示例代码:
```c
#include <reg52.h>
sbit KEY_SET=P3^3; //设定键
sbit KEY_INC=P3^2; //增加键
sbit KEY_START=P3^1; //开始/停止键
sbit KEY_CONFIRM=P3^0; //确定键
sbit LED=P1^0; //LED指示灯
unsigned char second=0; //倒计时时间
unsigned char count=0; //计数器
unsigned char flag_set=0,flag_confirm=0; //标志位
void delay(unsigned int i) //延时函数
{
unsigned int j;
while(i--)
{
for(j=0;j<125;j++);
}
}
void display(unsigned char n) //数码管显示函数
{
P2=0x00; //关闭所有数码管
switch(n) //根据数码显示值选择对应数码管
{
case 0:P0=0xc0;break;
case 1:P0=0xf9;break;
case 2:P0=0xa4;break;
case 3:P0=0xb0;break;
case 4:P0=0x99;break;
case 5:P0=0x92;break;
case 6:P0=0x82;break;
case 7:P0=0xf8;break;
case 8:P0=0x80;break;
case 9:P0=0x90;break;
default:break;
}
}
void interrupt_timer0() interrupt 1 //定时器0中断服务函数
{
TH0=0x4c; //重新赋值定时器0初值
TL0=0x00;
count++; //计数器自增
if(count==20) //20ms进入一次中断,计数器到达50即为1s
{
count=0; //计数器清零
second--; //倒计时时间自减
if(second==0) //倒计时结束
{
LED=~LED; //LED闪烁
delay(200); //闪烁时间200ms
}
}
}
void main()
{
TMOD=0x01; //定时器0工作方式1
TH0=0x4c; //赋初值
TL0=0x00;
EA=1; //总中断使能
ET0=1; //定时器0中断使能
TR0=1; //定时器0启动
while(1)
{
if(KEY_SET==0) //设定键按下
{
delay(10); //去抖
if(KEY_SET==0)
{
flag_set=1; //标志位置1
while(!KEY_SET); //等待松开
}
}
if(KEY_INC==0 && flag_set==1) //增加键按下
{
delay(10);
if(KEY_INC==0)
{
second++; //倒计时时间自增
if(second>99) //最大99s
{
second=99;
}
display(second/10); //显示十位数码
delay(10); //防止按键误触
display(second%10); //显示个位数码
while(!KEY_INC);
}
}
if(KEY_CONFIRM==0 && flag_set==1) //确定键按下
{
delay(10);
if(KEY_CONFIRM==0)
{
flag_confirm=1; //标志位置1
while(!KEY_CONFIRM);
}
}
if(flag_confirm==1) //倒计时开始
{
flag_set=0; //标志位清零
flag_confirm=0;
while(second) //倒计时时间不为0,循环
{
display(second/10);
delay(10);
display(second%10);
delay(10);
if(KEY_START==0) //开始/停止键按下
{
delay(10);
if(KEY_START==0)
{
while(!KEY_START); //等待松开
break; //跳出循环
}
}
}
second=0; //倒计时时间清零
LED=1; //LED灯关闭
}
}
}
```
上述代码中,使用定时器0中断实现1秒计数,每20毫秒进入一次中断,计数器到达50即为1秒。同时,使用延时函数实现LED灯的闪烁效果。在主循环中,通过检测按键的状态实现秒数设定和倒计时功能,并在倒计时结束时进行LED灯的闪烁报警。
阅读全文