51用stc89c52实现电子时钟代码
时间: 2024-05-14 11:18:27 浏览: 103
stc89c52rc单片机手册.pdf
5星 · 资源好评率100%
以下是基于STC89C52单片机的电子时钟代码:
```
#include <reg52.h> // 引入STC89C52头文件
// 定义单片机端口
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
sbit key1 = P3^1; // 按键1
sbit key2 = P3^2; // 按键2
unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 数码管0~9编码表
unsigned char hour = 0, minute = 0, second = 0; // 时、分、秒
// 延时函数
void delay(unsigned int i) {
while(i--);
}
// 数码管显示函数
void display(unsigned char dat[],unsigned char num) {
unsigned char i;
for(i=0; i<num; i++) {
switch(i) {
case(0): LSA = 0; LSB = 0; LSC = 0; break; // 第一位
case(1): LSA = 1; LSB = 0; LSC = 0; break; // 第二位
case(2): LSA = 0; LSB = 1; LSC = 0; break; // 第三位
case(3): LSA = 1; LSB = 1; LSC = 0; break; // 第四位
case(4): LSA = 0; LSB = 0; LSC = 1; break; // 第五位
case(5): LSA = 1; LSB = 0; LSC = 1; break; // 第六位
default: break;
}
P0 = dat[i]; // 在数码管上显示数值
delay(100); // 延时
P0 = 0x00; // 关闭数码管显示
}
}
// 按键扫描函数
void keyscan() {
if(key1 == 0) { // 按下键1
delay(1000); // 延时1秒
if(key1 == 0) { // 确认键1
hour++; // 时加1
if(hour == 24) hour = 0; // 小时数为24时,重新计数
}
while(!key1); // 等待键1释放
}
if(key2 == 0) { // 按下键2
delay(1000); // 延时1秒
if(key2 == 0) { // 确认键2
minute++; // 分加1
if(minute == 60) minute = 0; // 分钟数为60时,重新计数
}
while(!key2); // 等待键2释放
}
}
// 定时器0中断函数
void timer0() interrupt 1 {
TH0 = 0xfc; // 定时器0高八位赋初值
TL0 = 0x67; // 定时器0低八位赋初值
second++; // 秒加1
if(second == 60) { // 秒数为60时,重新计数
second = 0;
minute++; // 分加1
if(minute == 60) { // 分钟数为60时,重新计数
minute = 0;
hour++; // 时加1
if(hour == 24) hour = 0; // 小时数为24时,重新计数
}
}
}
// 主函数
void main() {
unsigned char dat[6]; // 存储数码管显示的数值
TMOD = 0x01; // 定时器0工作模式1
TH0 = 0xfc; // 定时器0高八位赋初值
TL0 = 0x67; // 定时器0低八位赋初值
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器0
while(1) {
dat[0] = table[hour/10]; // 第一位显示小时的十位
dat[1] = table[hour%10]; // 第二位显示小时的个位
dat[2] = table[minute/10]; // 第三位显示分钟的十位
dat[3] = table[minute%10]; // 第四位显示分钟的个位
dat[4] = table[second/10]; // 第五位显示秒的十位
dat[5] = table[second%10]; // 第六位显示秒的个位
display(dat,6); // 显示数码管
keyscan(); // 扫描按键
}
}
```
该代码实现了基本的电子时钟功能,可通过按键1和按键2调节小时和分钟。其中,使用定时器0中断实现计时,使用数码管显示当前时间。请注意,本代码仅供参考,具体实现需要根据具体硬件电路和需求进行调整和修改。
阅读全文