基于89c52的16*16点阵电子时钟并且有时间调整功能的程序
时间: 2023-08-24 20:08:27 浏览: 101
以下是基于89C52的16*16点阵电子时钟并且有时间调整功能的程序:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DATAPORT P0
sbit LATCH1 = P2^0; //锁存1
sbit LATCH2 = P2^1; //锁存2
sbit LATCH3 = P2^2; //锁存3
sbit LATCH4 = P2^3; //锁存4
uchar code table[] = { //0~9的字形表
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67
};
void delay(uint i) //延时函数
{
while (i--);
}
void writeData(uchar dat) //写数据到点阵
{
uchar i;
for (i=0;i<8;i++)
{
DATAPORT = _crol_(dat,1); //循环左移1位,将最高位送到进位标志位,再将进位标志位送到最低位
dat = dat<<1; //将数据左移1位,把最高位清零
P2 = P2 & 0xf0; //锁存控制线先置低电平
P2 = P2 | i; //选择锁存器
DATAPORT = DATAPORT & 0xfe; //数据线先置低电平
P2 = P2 & 0x0f; //锁存控制线置高电平,锁存数据
P2 = P2 | 0xf0; //锁存控制线置低电平,准备显示下一个数据
}
}
void main()
{
uchar hour, minute, second;
uint i;
TMOD = 0x01; //设定定时器0为模式1
TH0 = 0x3c; //设定定时器0初值
TL0 = 0xb0;
ET0 = 1; //打开定时器0中断
EA = 1; //打开总中断开关
TR0 = 1; //启动定时器0
while (1)
{
hour = TH0; //读取时、分、秒
minute = TL0;
second = P1;
writeData(table[hour/10]); //写入数据到点阵
LATCH1 = 1;
LATCH1 = 0;
writeData(table[hour%10]);
LATCH2 = 1;
LATCH2 = 0;
writeData(0x40); //冒号的ASCII码为0x40
LATCH3 = 1;
LATCH3 = 0;
writeData(table[minute/10]);
LATCH4 = 1;
LATCH4 = 0;
writeData(table[minute%10]);
LATCH1 = 1;
LATCH1 = 0;
delay(10000); //延时10ms
if (P3==0xfe) //判断是否需要调整时间
{
delay(1000); //延时1s,等待按键稳定
if (P3==0xfe) //确认按键有效
{
while (P3==0xfe); //等待按键释放
if (P3==0xfd) //加小时
{
TH0++;
if (TH0==24) TH0 = 0;
}
else if (P3==0xfb) //减小时
{
if (TH0==0) TH0 = 23;
else TH0--;
}
else if (P3==0xf7) //加分钟
{
TL0++;
if (TL0==60) TL0 = 0;
}
else if (P3==0xef) //减分钟
{
if (TL0==0) TL0 = 59;
else TL0--;
}
}
}
}
}
void timer0() interrupt 1 //定时器0中断服务程序
{
TH0 = 0x3c; //重新设定定时器0初值
TL0 = 0xb0;
P1++; //秒数加1
if (P1==60) //如果秒数为60,分钟数加1
{
P1 = 0;
TL0++; //定时器0计数器加1
if (TL0==60) //如果分钟数为60,小时数加1
{
TL0 = 0;
TH0++; //定时器0计数器加1
}
}
}
```
该程序在基于89C52的16*16点阵电子时钟的基础上增加了时间调整功能。程序中使用P3口的4个按键来实现时间的调整,按下不同的按键可以加减小时和分钟。程序在主循环中添加了按键检测的代码,同时添加了延时函数来等待按键的稳定。当检测到按键按下时,程序会进入按键处理函数,根据不同的按键进行时间的调整。调整完成后,程序会返回到主循环继续显示当前的时间。
阅读全文