写一个数码管显示24秒倒计时有暂停启动的51单片机的源代码。
时间: 2024-02-22 15:00:23 浏览: 79
好的,这是一个简单的数码管倒计时器,可以通过按下按键实现暂停和启动。代码如下:
```
#include <reg52.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}; // 数码管0~9的编码
uint tick = 24000; // 初始倒计时时间为24秒
uchar pause = 0; // 初始为不暂停状态
void delay(uint t)
{
while(t--);
}
void display(uchar num)
{
P0 = table[num]; // 将num对应的编码输出到P0口
}
void main()
{
TMOD = 0x01; // 定时器0工作在模式1下
TH0 = (65536 - 50000) / 256; // 定时器0的初值
TL0 = (65536 - 50000) % 256;
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器0
while(1)
{
if(!pause) // 如果不是暂停状态
{
display(tick / 1000); // 显示秒的十位数
wela = 0;
dula = 1;
delay(5);
dula = 0;
wela = 1;
delay(5);
display(tick % 1000 / 100); // 显示秒的个位数
wela = 0;
dula = 1;
delay(5);
dula = 0;
wela = 1;
delay(5);
display(tick % 100 / 10); // 显示毫秒的十位数
wela = 0;
dula = 1;
delay(5);
dula = 0;
wela = 1;
delay(5);
display(tick % 10); // 显示毫秒的个位数
wela = 0;
dula = 1;
delay(5);
dula = 0;
wela = 1;
delay(5);
}
if(P3 & 0x01) // 如果按键被按下
{
delay(1000); // 延时去抖动
if(P3 & 0x01) // 确认按键被按下
{
pause = !pause; // 切换暂停状态
while(P3 & 0x01); // 等待按键释放
}
}
}
}
void timer0_isr() interrupt 1
{
TH0 = (65536 - 50000) / 256; // 重新设置定时器0的初值
TL0 = (65536 - 50000) % 256;
if(!pause && tick > 0) // 如果不是暂停状态且倒计时时间大于0
{
tick--; // 时间减1
}
}
```
注意:这段代码仅供参考,需要根据具体的硬件平台和需求进行修改。
阅读全文