物理与电子工程学院
图3 按键校正调时电路 4 系统软件设计
DS1302是利用单片机控制来实现时钟计时, C语言具有简单易懂,条理
清晰,易于修改的特点,因此应用起来就比较方便。
4.1 主程序流程图
图4 主程序流程图
6
物理与电子工程学院
开始时,先对变量进行初始化,然后对DS1302进行处理,使其不具备写保护,这样才能给DS1302通信,使其能与单片机交换数据。给DS1302连续的脉冲,接着向1302内部写入地址,直至写完。最后由单片机与DS1302通信,读取DS1302内部的地址,直至读取完毕,然后单片机把所读到的数据传送给1602,使数据呈现在液晶屏上,这样,整个主程序流程图就完成了。主程序流程图如图4所示。
4.2 子程序流程图
4.2.1 DS1302子程序流程图
DS1302子程序流程图如图5所示。
开始
是 写入数据 DS1302初始化 计数 否
是 否 校 正 调 时 读出数据 图5 DS1302子程序流程图
图5展示了DS1302工作的一个工作流程:首先便是对DS1302进行初始化,使其不受写保护,方便数据写入,在连续的脉冲作用下,不断有数据写入1302的地址中,直至需要调时,这时改变后的数据就会储存在新的地址上,读取时便可把新的数据传输在1602上,即完成了调时。
7
物理与电子工程学院
4.2.2 1602子程序流程图
是 否 有
写 入 否 是 写入数据 开始 1602初始化 读出数据显示
图6 1602子程序流程图
1602显示器的工作流程图展示了1602的工作流程:启动时,首先对1602进行初始化,然后检测有没有数据写入,当有数据写入时,1602便读出数据并显示,没有数据写入时,1602就一直处于等待中,直至有数据写入。1602子程序流程图如图6所示。
4.3 按键校正调时程序
?????? if(num==1) {
enable(0xc0+12); if(jia==0) delay(5); if(jia==0) {
while(!jia);
sec=bcdtodec(uc_R1302(0x81)&0x7f);
8
物理与电子工程学院
sec++; if(sec>59) sec=0;
L1602_char(2, 12, sec/10+48); L1602_char(2, 13, sec + 48);
v_W1302(0x80,dectobcd(sec)|0x80); } if(jian==0) delay(5); if(jian==0) { while(!jian); sec=bcdtodec(uc_R1302(0x81)); sec--; if(sec==-1) sec=59; L1602_char(2, 12, sec/10+48); L1602_char(2, 13, sec + 48); v_W1302(0x80,dectobcd(sec)|0x80); } }
??????
这是整个调时系统的一部分,它实现了时间的调整这一功能。全部程序详见附录。
5 实物调试
5.1实物性能分析
用KEIL编写程序软件编写程序、经过Proteus仿真软件仿真调试之后,确认了此系统可正常运行,在这样的前提下,我们利用一个单片机最小系统、一块用万用板焊接的模块和一个1602液晶完成了第一次实物仿真。本次实物如图7所示。虽然本次调试测试没有达到要求,但是为后续工作打下了不可替代的基础。
9
物理与电子工程学院
图7 万用板实物
我们在第一次的尝试之后,发现无较大问题存在,于是就尝试着做出了我们此次课程设计的第一块PCB板,在仔细检查了整个电路无误之后我们就开始了我们的尝试,第一块板的造型是深思熟虑之后才最终定稿的。可能是由于第一次做双面板,技术不熟练,所以打板的时候就难免出现这样那样的问题,我们的第一块板同样出现了问题:液晶显示屏上只显示三个小亮点,不显示数字,实物如图8所示。
10