c51单片机四位数码管计时器
时间: 2024-01-23 19:14:08 浏览: 130
基于C51单片机设计的数码管显示24小时倒计时程序源码+仿真.zip
5星 · 资源好评率100%
以下是一个基于C51单片机的四位数码管计时器的示例程序:
```c
#include <reg52.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 code table[] = { // 数码管显示0-9的编码
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90
};
uchar mon = 6, mon0 = 0, day = 26, day0 = 0, hour = 23, hour0 = 0, min = 15, min0 = 0, sec = 0, sec0 = 10, temp0 = 0;
void delay(uint t) { // 延时函数
uint i, j;
for (i = t; i > 0; i--)
for (j = 110; j > 0; j--);
}
void display() { // 数码管显示函数
D1 = 1; D2 = 1; D3 = 1; D4 = 1; // 全部关闭
P0 = table[sec0 % 10]; // 第一位显示秒个位
D1 = 0; delay(5); D1 = 1; // 打开并延时
P0 = table[sec0 / 10]; // 第二位显示秒十位
D2 = 0; delay(5); D2 = 1;
P0 = table[min0 % 10]; // 第三位显示分个位
D3 = 0; delay(5); D3 = 1;
P0 = table[min0 / 10]; // 第四位显示分十位
D4 = 0; delay(5); D4 = 1;
}
void main() {
while (1) {
display(); // 显示当前时间
delay(1000); // 延时1秒
sec0++; // 秒数加1
if (sec0 == 60) { // 如果秒数达到60
sec0 = 0; // 秒数清零
min0++; // 分钟数加1
if (min0 == 60) { // 如果分钟数达到60
min0 = 0; // 分钟数清零
hour0++; // 小时数加1
if (hour0 == 24) { // 如果小时数达到24
hour0 = 0; // 小时数清零
day0++; // 天数加1
if (day0 == 32) { // 如果天数达到32
day0 = 1; // 天数重置为1
mon0++; // 月份加1
if (mon0 == 13) { // 如果月份达到13
mon0 = 1; // 月份重置为1
}
}
}
}
}
if (sec0 == sec && min0 == min && hour0 == hour && day0 == day && mon0 == mon) { // 如果计时结束
for (temp0 = 0; temp0 < 10; temp0++) { // 蜂鸣器响10次
P1 = 0x01; // 打开蜂鸣器
delay(100); // 延时0.1秒
P1 = 0x00; // 关闭蜂鸣器
delay(100); // 延时0.1秒
}
}
}
}
```
该程序通过循环计时并在数码管上显示时间。当计时结束时,蜂鸣器会响10次。
阅读全文