电子万年历代码c语言keil
时间: 2023-08-01 19:12:49 浏览: 38
以下是一个简单的电子万年历的C语言代码,适用于Keil开发环境:
```c
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = {
0x3f, // '0'
0x06, // '1'
0x5b, // '2'
0x4f, // '3'
0x66, // '4'
0x6d, // '5'
0x7d, // '6'
0x07, // '7'
0x7f, // '8'
0x6f, // '9'
0x77, // 'A'
0x7c, // 'B'
0x39, // 'C'
0x5e, // 'D'
0x79, // 'E'
0x71 // 'F'
};
uchar sec = 0; // 秒
uchar min = 0; // 分
uchar hour = 0; // 时
uchar day = 1; // 日
uchar month = 1; // 月
uchar year = 0; // 年
void delay(uint t);
void display(uchar hour, uchar min, uchar sec);
void init();
void timer0() interrupt 1;
void main() {
init(); // 初始化
while (1) {
display(hour, min, sec); // 显示时间
}
}
// 延时函数
void delay(uint t) {
uint i, j;
for (i = t; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
// 数码管显示
void display(uchar hour, uchar min, uchar sec) {
uchar shiwei, gewei, temp;
P2 = 0xff; // 关闭数码管
temp = hour;
shiwei = temp / 10; // 十位
gewei = temp % 10; // 个位
P0 = table[shiwei];
P2 = 0xfe; // 第一位数码管
delay(5);
P0 = table[gewei];
P2 = 0xfd; // 第二位数码管
delay(5);
temp = min;
shiwei = temp / 10; // 十位
gewei = temp % 10; // 个位
P0 = table[shiwei];
P2 = 0xfb; // 第三位数码管
delay(5);
P0 = table[gewei];
P2 = 0xf7; // 第四位数码管
delay(5);
temp = sec;
shiwei = temp / 10; // 十位
gewei = temp % 10; // 个位
P0 = table[shiwei];
P2 = 0xef; // 第五位数码管
delay(5);
P0 = table[gewei];
P2 = 0xdf; // 第六位数码管
delay(5);
}
// 初始化
void init() {
TMOD = 0x01; // 定时器0,模式1
TH0 = 0x3c; // 定时器初值
TL0 = 0xb0;
EA = 1; // 允许中断
ET0 = 1; // 允许定时器0中断
TR0 = 1; // 启动定时器0
}
// 定时器0中断服务程序
void timer0() interrupt 1 {
TH0 = 0x3c; // 重新赋初值
TL0 = 0xb0;
sec++; // 秒加1
if (sec == 60) { // 一分钟
sec = 0;
min++;
}
if (min == 60) { // 一小时
min = 0;
hour++;
}
if (hour == 24) { // 一天
hour = 0;
day++;
}
if (day == 31) { // 一个月
day = 1;
month++;
}
if (month == 13) { // 一年
month = 1;
year++;
}
}
```
这个代码使用了定时器0中断来实现时间的计时和更新。同时,使用了一个数码管显示模块来显示时间。可以根据具体的电路和硬件接口进行修改和调整。