电子万年历代码c语言keil
时间: 2023-08-02 11:08:15 浏览: 128
以下是一个简单的电子万年历的 C 语言代码,适用于 Keil 软件开发环境。
```c
#include <reg52.h> // 引入 8051 单片机的头文件
// 定义数码管的位选和段选引脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit led=P0; // 定义 LED 灯引脚
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, // 数码管显示 0~9
0x77,0x7c,0x39,0x5e,0x79,0x71 // 数码管显示 A~F
};
// 定义全局变量
unsigned char year,month,day,week;
unsigned char hour,minute,second;
// 定义函数
void delay(unsigned int i); // 延时函数
void display(unsigned char *p); // 数码管显示函数
void rtc(); // 实时时钟函数
unsigned char keyscan(); // 按键扫描函数
void main()
{
while(1)
{
rtc(); // 调用实时时钟函数
display(table); // 显示年、月、日、星期
delay(100); // 延时 100ms
display(table+8); // 显示时、分、秒
delay(100); // 延时 100ms
led=keyscan(); // 检测按键
P0=led; // 控制 LED 灯
}
}
void delay(unsigned int i)
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(unsigned char *p)
{
LSC=1;
P0=*p;
LSC=0;
LSA=1;
P0=*(p+1);
LSA=0;
LSB=1;
P0=*(p+2);
LSB=0;
}
void rtc()
{
year=2021; // 年
month=6; // 月
day=22; // 日
week=2; // 星期
hour=11; // 时
minute=30; // 分
second=0; // 秒
}
unsigned char keyscan()
{
unsigned char keyvalue=0;
if(P3!=0xff) // 判断是否有按键按下
{
delay(10); // 延时 10ms
if(P3!=0xff) // 再次判断是否有按键按下
{
switch(P3) // 判断按下的是哪个按键
{
case 0xfe: keyvalue=1; break; // K1
case 0xfd: keyvalue=2; break; // K2
case 0xfb: keyvalue=3; break; // K3
case 0xf7: keyvalue=4; break; // K4
default: break;
}
}
}
return keyvalue;
}
```
这段代码实现了一个简单的电子万年历,显示当前的年、月、日、星期、时、分、秒,并且可以检测外部按键,并控制一个 LED 灯的亮灭。需要注意的是,实际应用中需要根据具体需求进行修改和完善。
阅读全文