51单片机四位数码管秒表代码
时间: 2024-06-11 10:01:57 浏览: 14
好的,以下是一个简单的基于51单片机的四位数码管秒表代码。这个代码使用了定时器和中断来实现秒表的计时功能,并通过数码管显示计时结果。
```c
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管显示表
uchar time = {0, 0, 0, 0}; // 计时器数组
uint count = 0; // 计时器计数器
void delay(uint ms); // 延时函数
void display(); // 数码管显示函数
void main() {
TMOD = 0x01; // 定时器0工作在模式1
TH0 = (65536-50000)/256; // 定时器初值
TL0 = (65536-50000)%256;
ET0 = 1; // 打开定时器0中断允许位
EA = 1; // 打开总中断允许位
TR0 = 1; // 启动定时器0
while(1) {
display(); // 显示计时结果
}
}
void timer() interrupt 1 { // 定时器中断服务程序
TH0 = (65536-50000)/256; // 定时器初值
TL0 = (65536-50000)%256;
count++; // 计数器加一
if(count == 20) { // 每计数20次即1s
count = 0;
time++;
if(time == 10) {
time = 0;
time++;
if(time == 10) {
time = 0;
time++;
if(time == 6) {
time = 0;
time++;
if(time == 10) {
time = 0;
time = 0;
time = 0;
time = 0;
}
}
}
}
}
}
void display() { // 数码管显示函数
uchar i;
uchar flag = 0;
for(i=3;i>0;i--) { // 去掉前导零
if(time[i] == 0 && flag == 0) {
P2 = table[time[i]];
P2 |= 0x80;
} else {
P2 = table[time[i]];
flag = 1;
}
P0 |= (1<<i);
delay(5);
P0 &= ~(1<<i);
}
P2 = table[time];
P2 |= 0x80;
P0 |= (1<<i);
delay(5);
P0 &= ~(1<<i);
}
void delay(uint ms) { // 延时函数,延时ms毫秒
uint i, j;
for(i=ms;i>0;i--) {
for(j=114;j>0;j--);
}
}
```