2024-09-01
售卖作品
00

// 硬件:DS1302、按键、LCD1602、无源蜂鸣器

// 1、具有万年历功能的数字时钟 (本世纪100年通用),能够正确的显示年、月、日、时、分、秒

// 2、按键设置时间(校时)

// 3、24小时内至少可设置3个闹钟,并具有不同的闹钟铃声。每个闹钟可以选择启用或者不启用。

// 4、具有秒表功能(计时精度0.1秒)

// 5、其它与数字时钟相关的功能扩展(整点报时、闹钟时间掉电保存功能AT24C02、)

//按键1 可以设置时间切换,秒表下是开始

//按键2 可以设置时间切换,秒表下是暂停

//按键3 可以设置闹钟切换,秒表下是复位

//按键4 可以设置闹钟切换

//按键5 +

//按键6 -

//按键7 直接回到主页面

//按键8 进入秒表

主页面:

在这里插入图片描述

闹钟0设置:

在这里插入图片描述

闹钟1设置:

在这里插入图片描述

闹钟2设置:

在这里插入图片描述

秒表:

在这里插入图片描述

部分源码:

c
void main() { char miaoa = 0; char ifg = 0; unsigned char keyvl = 0; LCD_init(); x24c02_init(); ds1302_init(); // LCD_write_str(1, 1, "2223123"); get_time(&rtctime); /* 调用取时间函数 */ ifg = 0; if (rtctime.nian > 99) ifg = 1; if (rtctime.yue > 12) ifg = 1; if (rtctime.ri > 31) ifg = 1; if (rtctime.zhou > 7) ifg = 1; if (rtctime.shi > 23) ifg = 1; if (rtctime.fen > 59) ifg = 1; if (rtctime.miao > 59) ifg = 1; if (ifg == 1) /* 如果时间有问题 就初始化时间 */ { rtctime.nian = 20; rtctime.yue = 10; rtctime.ri = 10; rtctime.zhou = getWeekdayByYearday(rtctime.nian + 2000, rtctime.yue, rtctime.ri); rtctime.shi = 7; rtctime.fen = 59; rtctime.miao = 58; set_time(&rtctime); } read_alarm(); ifg = 0; if ((ALARMtime.shi > 23) || (ALARMtime.shi < 0)) ifg = 1; if ((ALARMtime.fen > 59) || (ALARMtime.fen < 0)) ifg = 1; if ((ALARMtime.miao > 59) || (ALARMtime.miao < 0)) ifg = 1; if ((ALARMtime1.shi > 23) || (ALARMtime1.shi < 0)) ifg = 1; if ((ALARMtime1.fen > 59) || (ALARMtime1.fen < 0)) ifg = 1; if ((ALARMtime1.miao > 59) || (ALARMtime1.miao < 0)) ifg = 1; if ((ALARMtime2.shi > 23) || (ALARMtime2.shi < 0)) ifg = 1; if ((ALARMtime2.fen > 59) || (ALARMtime2.fen < 0)) ifg = 1; if ((ALARMtime2.miao > 59) || (ALARMtime2.miao < 0)) ifg = 1; if (ifg == 1) /* 如果时间有问题 就初始化 闹钟 */ { ALARMtime.shi = 10; ALARMtime.fen = 0; ALARMtime.miao = 0; ALARMtime1.shi = 10; ALARMtime1.fen = 5; ALARMtime1.miao = 0; ALARMtime2.shi = 10; ALARMtime2.fen = 10; ALARMtime2.miao = 0; write_alarm(); } init_timer0(); init_timer1(); while (1) { delay_ms(10); keyvl = getkey(); if (keyvl) { user_pro_key(keyvl); while (getkey()) ; } if (set == 0) { get_time(&rtctime); /* 调用取时间函数 */ if (miaoa != rtctime.miao) { miaoa = rtctime.miao; user_lcd_display(); /* 刷新显示 */ user_zheng_con(); /* 整点报时控制 */ user_alarm_con(); /* 闹钟控制 */ } } if (naozhong_music) { music_beep(naozhong_music); } if (set == 19) { if (TR0 == 1) { /* 秒表 unsigned char num=0,ms100=0,second100=0,minute100=0; */ memset(xianshi, 0, sizeof(xianshi)); /* 清空 */ sprintf(xianshi, "%02d:%02d:%01d", (int)minute100, (int)second100, (int)ms100); /* 装填 */ LCD_write_str(0, 1, xianshi); } } } } void T0_time0(void) interrupt 1 { TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; num2++; if (num2 == 2) /* 1秒 */ { num2 = 0; ms100++; if (ms100 == 10) { ms100 = 0; second100++; if (second100 == 60) { second100 = 0; minute100++; } } } } 全部代码见:dt4.8tupian.net/2/28880a11b7000.pg3
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!