用定时器T1的方式1,共阳极接法,实现数码管前两位00~59s循环计时,每1s变化一次
时间: 2024-05-02 11:22:49 浏览: 128
计时程序,采用定时器
5星 · 资源好评率100%
该问题需要使用微控制器来实现,下面是代码:
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = { // 数码管显示0~9的编码方式
0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80, 0x90
};
uchar cnt; // 计数器,用于记录经过的秒数
void init_timer1()
{
TMOD &= 0x0f; // 将T1工作在方式1下
TMOD |= 0x10;
TH1 = 0x3c; // 让定时器初值为0xffff-1s-12,约为1ms
TL1 = 0xb0;
TR1 = 1; // 启动定时器
}
void display(uchar n)
{
P2 = table[n/10]; // 显示十位数
P0 |= 0x01 << 3; // P0.3为数码管选通端,共阳极接法需要置1才能点亮
P0 &= ~(0x01 << 2); // 其他数码管选通端置0,共阳极接法需要置0才能点亮
delay();
P2 = table[n%10]; // 显示个位数
P0 |= 0x01 << 2; // P0.2为数码管选通端
P0 &= ~(0x01 << 3);
delay();
}
void delay()
{
uint i, j;
for(i=110; i>0; i--)
{
for(j=2; j>0; j--);
}
}
void main()
{
init_timer1();
while(1)
{
display(cnt);
}
}
void timer1_isr() interrupt 3
{
TL1 = 0xb0; // 给定时器赋初值,计算方法同上
TH1 = 0x3c;
cnt++; // 计时器加1
if(cnt >= 60) cnt = 0; // 如果经过了60s,就重新从0开始计数
}
```
注意:该代码只是示例,具体实现方法可能因硬件方案的不同而有所不同。
阅读全文