采用外部中断控制定时器,用四位数数码管显示60计时代码
时间: 2023-06-16 18:07:54 浏览: 113
4位数码管计时器_4位数码管时钟_BST-M51计时器_
这里提供一份基于51单片机的代码,使用外部中断控制定时器,同时用四位数码管实现60计时的功能。
```c
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1 = P2^2; // 数码管段选控制引脚
sbit D2 = P2^3;
sbit D3 = P2^4;
sbit D4 = P2^5;
sbit LATCH = P2^6; // 数码管锁存控制引脚
sbit CLK = P2^7; // 数码管位选控制引脚
uchar code LED_TBL[] = { // 数码管显示表
0xc0, // 0
0xf9, // 1
0xa4, // 2
0xb0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xf8, // 7
0x80, // 8
0x90 // 9
};
uint cnt = 0; // 计时器计数变量
void delay(uint t)
{
uint i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 125; j++);
}
void display(uchar d1, uchar d2, uchar d3, uchar d4)
{
D1 = 1; D2 = 1; D3 = 1; D4 = 1; // 关闭所有数码管
LATCH = 0;
P0 = LED_TBL[d1];
LATCH = 1;
CLK = 0; CLK = 1;
LATCH = 0;
P0 = LED_TBL[d2];
LATCH = 1;
CLK = 0; CLK = 1;
LATCH = 0;
P0 = LED_TBL[d3];
LATCH = 1;
CLK = 0; CLK = 1;
LATCH = 0;
P0 = LED_TBL[d4];
LATCH = 1;
CLK = 0; CLK = 1;
}
void timer_isr() interrupt 0
{
cnt++; // 每次中断计数器加1
if (cnt >= 6000) // 当计数器达到6000时,计时器计数为60s,重新开始计数
cnt = 0;
}
void main()
{
TMOD = 0x02; // 定时器0工作在模式2
TH0 = 0x06; // 定时器0初值为0x06
TL0 = 0x06;
EA = 1; // 打开总中断允许位
ET0 = 1; // 打开定时器0中断允许位
TR0 = 1; // 启动定时器0
while (1)
{
display(cnt / 1000, cnt / 100 % 10, cnt / 10 % 10, cnt % 10); // 显示计时器计数
delay(10); // 延时10ms
}
}
```
这段代码中,我们首先定义了数码管的引脚和显示表。然后在中断服务函数中,每次中断计数器加1,当计数器达到6000时,计时器计数为60s,重新开始计数。在主程序中,我们通过调用 display 函数来显示计时器计数,并使用 delay 函数来延时。通过这段代码,我们可以实现一个简单的60秒计时器。
阅读全文