![](https://csdnimg.cn/release/download_crawler_static/87985693/bg5.jpg)
共阳数码管高电平点亮,所以 P2 移位后不用取反,从高位开始是第 1 个数码管
掩饰显示 1ms,P2 给全 0 全部熄灭,消影作用。
2.时间显示
采用实时时钟芯片 DS1302,读芯片的 datasheet,根据时序等说明编写驱动程序。
1)初始化
void DS1302_Init(void)
2)底层基本读写函数
void DS1302_WriteByte(unsigned char byte)
unsigned char DS1302_ReadByte(void)
3)对芯片寄存器的读写函数
void DS1302_WriteData(unsigned char addr,unsigned char mdata)
unsigned char DS1302_ReadData(unsigned char addr)
4)修改时间函数
void DS1302_RWriteData(unsigned char addr,unsigned char mdata)
这些函数的实现就看 dagasheet 了,主要是时序
a.时钟上升沿写入数据
b.时钟下降沿读出数据
c.秒寄存器最高位为 1 关闭时钟,为 0 则开启时钟
5)显示时间和日期
void Display_Time(void)
显示时分秒,0x40 为显示横,如 12-30-00
void Display_Date(void)
显示日期,如 20131230,中间没有横杆,但是在年月日上有小数点,通过
Display_2Num 最后一个参数控制
void Display(void)根据 dis_mode 变量选择当前显示的是时间还是日期还是闹钟。
GetDateTime 读取时间并与闹钟时间做比较,检测是否到达闹钟时间。
6)扫描方式
动态扫描,定时器 0 控制扫描周期,10ms 扫描一次
void Timer0_OVF(void) interrupt 1
{
TH0 = (65536-10000)/256;
TL0 = (65536-10000)%256;
}
3.按键调时
void KeyScanf(void)
flag_alarm_mode 是闹铃模式则按键退出闹铃并返回,一键关闭闹钟
然后对 setting_item 变量自加,依次表示设置秒、分、时、天、月等等,设置项对应的小数点位点亮。
加键一样的过程,根据 setting_item 的值加不同的量:秒、分、时。
记住改变时间后要修改 DS1302 芯片的寄存器才能真正修改时间。