51单片机秒表计时器0-99.9
时间: 2023-12-20 08:05:18 浏览: 223
为了设计一个51单片机秒表计时器0-99.9,我们可以使用定时器和中断来实现。具体步骤如下:
1.设置定时器的初值和计数器,使其每秒钟中断一次。这可以通过将定时器初值设置为65536-12000(12MHz晶振,计数器为12)来实现。
```c
TMOD = 0x01; // 设置定时器0为模式1
TH0 = 0x3C; // 设置定时器初值为65536-12000
TL0 = 0xAF;
TR0 = 1; // 启动定时器0
ET0 = 1; // 使能定时器0中断
EA = 1; // 使能总中断
```
2.在定时器中断服务程序中,将计数器加1,并将其转换为秒和毫秒。然后将秒和毫秒分别显示在两个数码管上。
```c
void timer0_isr() interrupt 1
{
static unsigned char cnt = 0;
static unsigned int ms = 0;
cnt++;
if(cnt == 100) // 1秒钟到了
{
cnt = 0;
ms++;
if(ms == 100) // 99.9秒到了
{
ms = 0;
}
// 将秒和毫秒分别显示在两个数码管上
P0 = table[ms % 10];
P2 = table[ms / 10] | 0x80; }
}
```
3.在主程序中,等待“开始”键按下后启动定时器,并等待“复位”键按下后将计数器清零。
```c
void main()
{
P0 = 0xFF; // 初始化P0口
P2 = 0xFF; // 初始化P2口
while(1)
{
if(start == 0) // “开始”键按下
{
TR0 = 1; // 启动定时器0
}
if(reset == 0) // “复位”键按下
{
TR0 = 0; // 停止定时器0
cnt = 0; // 将计数器清零
ms = 0;
P0 = 0xFF; // 关闭数码管
P2 = 0xFF;
}
}
}
```
阅读全文