51单片机电子时钟代码
时间: 2023-07-23 09:42:44 浏览: 72
以下是一个基于51单片机的电子时钟的代码示例:
```c
#include <reg51.h>
// 定义数码管显示的端口和引脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit DIO=P2^0;
sbit SCLK=P2^1;
unsigned char code table[]={
// 数码管显示0~9的编码
// 逆序为了方便处理
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f
};
unsigned char hour=12; // 小时数
unsigned char minute=0; // 分钟数
void delay(unsigned int i) {
while (i--);
}
void writeByte(unsigned char dat){
unsigned char i;
for (i=0; i<8; i++){
// 向74HC595写入一个字节
SCLK=0;
DIO=(dat&0x80)>>7;
dat<<=1;
SCLK=1;
}
}
void writeCmd(unsigned char cmd){
// 写入命令,先写入高四位,再写入低四位
LSA=0; LSB=0; LSC=0;
writeByte(table[cmd>>4]);
LSA=1; LSB=0; LSC=0;
writeByte(table[cmd&0x0f]);
}
void writeData(unsigned char dat){
// 写入数据,先写入高四位,再写入低四位
LSA=0; LSB=0; LSC=1;
writeByte(table[dat>>4]);
LSA=1; LSB=0; LSC=1;
writeByte(table[dat&0x0f]);
}
void display(unsigned char hour, unsigned char minute){
writeCmd(0x80); // 光标移到第一位
writeData(hour/10); // 显示小时的十位数
writeData(hour%10); // 显示小时的个位数
writeData(10); // 冒号
writeData(minute/10); // 显示分钟的十位数
writeData(minute%10); // 显示分钟的个位数
}
void init(){
writeCmd(0x38); // 初始化
writeCmd(0x0c); // 开显示
writeCmd(0x06); // 光标右移
writeCmd(0x01); // 清屏
}
void main(){
init(); // 初始化
while (1){
display(hour,minute); // 显示时间
delay(50000); // 延时
minute++; // 分钟数加1
if (minute>=60){ // 如果分钟数达到60,小时数加1,分钟数清零
minute=0;
hour++;
if (hour>=24) hour=0; // 如果小时数达到24,重置为0
}
}
}
```
这个代码使用了74HC595芯片来驱动数码管,代码中的`table`数组存储了数码管显示0~9的编码,`writeCmd`和`writeData`函数用于向74HC595写入命令和数据。在`display`函数中,先将光标移到第一位,然后依次显示小时的十位数、个位数、冒号、分钟的十位数和个位数。在`main`函数中,先初始化时钟,然后循环显示时间,并且每经过一分钟,将分钟数加1,如果分钟数达到60,小时数加1,分钟数清零,如果小时数达到24,重置为0。
阅读全文