实物演示效果:
https://www.bilibili.com/video/BV1RN4y1Q7dK/?vd_source=6ff7cd03af95cd504b60511ef9373a1d
二、液晶对比度的调节
液晶的内容要清晰显示,就要调节电位器来调节液晶的对比度,这个电位器位于液
晶的下面,可以用一字螺丝刀等工具进行转动调节。液晶的供电电压不同,显示的对比
度也不同。所以如果是电池盒供电的话,使用一段时间后,电池的电压会降低,液晶显
示的内容也会变模糊,这个时候,就要微调一下这个电位器了;而如果是 USB 供电的话,
由于电压一直稳定,所以只要在初次使用时调节就可以了。
三、时间的设置
1、上电之后,按下“设置时间按键(按键 1)”,就进入了时间设置的模式。
2、这时可以看到光标在年份的位置闪烁,代表现在在调节年份的大小。
3、可以加过“减键(按键 4)”和“加键(按键 5)”两个按键进行大小的调整。
4、设置好年份之后,当再次按下“设置时间按键”,光标就跳到了月份的位置闪烁,代
表现在在调节月份的大小。类似的操作,分别进行年、月、日、星期、小时、分钟、
秒钟的设置。
5、最后设置好秒钟之后,再按一次“设置时间按键”就退出了时间设置模式。
四、闹钟的设置
1、闹钟设置的方法和前面设置时间的方法类似,只不过这里是通过“设置闹钟按键(按
键 2)”进行切换设置选项的,“减键(按键 4)”和“加键(按键 5)”是共用的。
2、如果想启动闹钟,必须在闹钟的设置界面中,把状态设置为“ON”。
3、闹钟的持续报警时间是 1 分钟,1 分钟后会自动关闭闹钟,明天同样的时间会再次
报警。
4、闹钟响的 1 分钟时间里,如果想手动关闭闹钟的话,可以通过“减键”或“加键”
五、秒表的使用
1、按下“秒表模式键(按键 3)”之后,就进入了秒表模式。
2、按下“开始/暂停秒表键(按键 4)”可以在开始和暂停直接切换秒表的工作状态。
3、按下“秒表清零(按键 5)”之后,就可以把之前的计时清零。
4、再按一次“秒表模式键”之后,就退出了秒表模式。
六、几种工作模式的切换说明
1、本设计有 4 种工作模式,万年历模式、设置时间模式、设置闹钟模式、秒表模式。
2、必须回到万年历模式后,才能进入其他模式。比如不能直接从设置闹钟模式进入秒
表模式,而是要先从闹钟模式先退回到万年历模式,再从万年历模式进入秒表模式。
实物图
![](https://img-blog.csdnimg.cn/direct/acd99f6151464bec943287ae0e705436.png)
原理图(Altium Designer)
![](https://img-blog.csdnimg.cn/direct/5bb5baf031ed48f8a8b60f5a4a6bcd87.png)
仿真图(peoteus 8.6)
![](https://img-blog.csdnimg.cn/direct/b47aaac2b0f743159381a3ea8af3d642.png)
时间显示界面
![](https://img-blog.csdnimg.cn/direct/2d02613f993247e1b5bd542995f5074f.png)
设置闹钟界面
![](https://img-blog.csdnimg.cn/direct/5c21b93b99e84f3f84ef438d122bc23c.png)
部分代码
void main()
{
int temp; // 保存温度值
LcdInit(); // 执行液晶初始化
DS1302_Init(); // 时钟芯片的初始化
LcdShowInit(); // 液晶显示内容的初始化
TimerInit(); // 定时器初始化
if(DS1302_Read_Byte(0x81)>=128) // 判断时钟芯片是否正在运行
{
DS1302_Write_Time(); // 如果没有,则初始化一个时间
}
Clock_Hour=EEPROM_Read(0x2000); // 读取0x2000这个地址的内容,赋值给闹钟的小时变量
if(Clock_Hour>23) // 如果读取到的闹钟小时数值不正常,则重新赋值
{
Clock_Hour=12;
}
Clock_Minute=EEPROM_Read(0x2001); // 读取0x2001这个地址的内容,赋值给闹钟的分钟变量
if(Clock_Minute>59) // 如果读取到的闹钟分钟数值不正常,则重新赋值
{
Clock_Minute=30;
}
Clock_Swt=EEPROM_Read(0x2002); // 读取0x2002这个地址的内容,赋值给闹钟的开关变量
if(Clock_Swt>1) // 如果读取到的闹钟开关数值不正常,则重新赋值
{
Clock_Swt=0;
}
while(DS18B20_ReadTemp()==850) // 等待温度传感器初始化完成
{
DelayMs(10);
}
while(1)
{
DS1302_Read_Time(); // 获取当前时钟芯片的时间,存在数组time_buf中
FlashTime(); // 刷新时间显示
ClockJudge(); // 闹钟工作的判断
temp=DS18B20_ReadTemp(); // 读取温度
LcdGotoXY(1,9); // 定位到显示温度的地方
LcdPrintTemp(temp); // 显示温度
KeyScanf1(); // 按键扫描(时间的设置)
KeyScanf2(); // 按键扫描(闹钟的设置)
KeyScanf3(); // 按键扫描(进入和退出秒表)
DelayMs(100); // 延时0.1秒
}
}