stc89c51单片机使用C语言编程实现使用计数器显示0~59秒的两位秒表程序
时间: 2023-07-15 11:11:22 浏览: 229
以下是使用 STC89C51 单片机和 C 语言编写的秒表程序。该程序使用定时器中断来计时,并通过数码管显示时间。
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1 = P2^0;
sbit D2 = P2^1;
sbit D3 = P2^2;
sbit D4 = P2^3;
uchar seconds = 0;
uchar minutes = 0;
void delay(uint ms) // 延时函数
{
uint i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
void display() // 显示函数
{
uchar d1, d2, d3, d4;
d1 = seconds % 10;
d2 = seconds / 10;
d3 = minutes % 10;
d4 = minutes / 10;
D1 = 0; P0 = d1; D1 = 1;
D2 = 0; P0 = d2; D2 = 1;
D3 = 0; P0 = d3; D3 = 1;
D4 = 0; P0 = d4; D4 = 1;
}
void timer0() interrupt 1 // 定时器中断函数
{
TH0 = 0xFC;
TL0 = 0x67;
seconds++;
if(seconds >= 60)
{
seconds = 0;
minutes++;
}
display();
}
void main()
{
TMOD = 0x01; // 定时器0,模式1
TH0 = 0xFC; // 定时100us
TL0 = 0x67;
ET0 = 1; // 打开定时器中断
EA = 1; // 打开总中断
TR0 = 1; // 开始计时
while(1);
}
```
在上面的程序中,我们使用了数码管的共阴极接法,即 D1 ~ D4 分别对应 P2.0 ~ P2.3,需要通过设置 P2 端口的相应位来控制数码管的亮灭。在 `display()` 函数中,我们通过取模运算和除法运算来得到秒和分的个位和十位,然后将其分别显示在数码管上。
在 `timer0()` 函数中,我们每隔 100us 就会触发一次定时器中断。在中断服务程序中,我们将秒数加一,并判断是否需要将分钟数加一。然后调用 `display()` 函数更新数码管的显示。
最后,在 `main()` 函数中,我们打开定时器中断和总中断,并开始计时。由于程序没有其他操作,因此可以使用一个空循环来保持程序的运行。
阅读全文
相关推荐
















