80C51固件,采用Keil for 8051编译器,双LED灯,分别连接P0口和P1口,编写C51源程序,要求实现如下功能:数码管的初始显示值为“00”;当1s产生时,秒计数器加1;秒计数到60时清0,并从“00”重新开始,如此周而复始进行。
时间: 2023-07-29 13:14:33 浏览: 133
数码管显示加一程序(C51程序)
下面是一个简单的C51程序,实现了您的要求:
```c
#include <reg51.h>
// 定义P0、P1寄存器地址
#define LED1 P0
#define LED2 P1
// 数码管显示函数
void display(unsigned char num) {
LED1 = (num / 10) % 10; // 十位
LED2 = num % 10; // 个位
}
void main() {
unsigned char count = 0; // 秒计数器
unsigned int timer = 0; // 定时器计数器
TMOD = 0x01; // 定时器0工作在模式1(16位定时器)
TH0 = 0xFC; // 定时器初值,1秒钟
TL0 = 0x66;
TR0 = 1; // 启动定时器
while (1) {
if (TF0) { // 定时器溢出,1秒钟到了
TF0 = 0; // 清除溢出标志
TH0 = 0xFC; // 定时器初值,1秒钟
TL0 = 0x66;
timer++; // 定时器计数器加1
if (timer == 60) { // 秒计数到60
timer = 0; // 定时器计数器清0
count++; // 秒计数器加1
if (count == 60) {
count = 0; // 秒计数器清0
}
display(count); // 数码管显示
}
}
}
}
```
程序使用了定时器0,每1秒钟产生一次中断,计数器加1,并判断是否到达60秒,如果是,就将计数器清0,并将数码管显示为“00”。程序中使用了`TH0`和`TL0`寄存器来设置定时器初值,使定时器可以精确地工作。程序中的数码管显示函数可以根据您的实际硬件连接来进行修改。
阅读全文