本人菜鸟一枚,学习单片机有2年了,只是停留在玩的阶段,前一段时间做了一个时钟,试着往里加程序,增加了倒计时定时器,PWM调光,后来又给定时器增加了掉电记忆功能,也就是EEPROM应用,现在贴出来和初学者共同进步,并欢迎大神们拍砖!废话不说,传照片!
主控芯片是STC12C5204AD,4位数码管动态扫描显示,因为STC芯片IO口有推挽输出,所以数码管直接接到了芯片上,省了4只三极管但是也有弊端,就是显示不均匀
28脚芯片去掉VCC,GND ,晶振(STC芯片内置RC振荡器,本想省去晶振,但考虑定时器要精准一点,还是接了一只12M晶振)占2个IO口,4位数码管占12个IO,加上一个PWM输出,一个蜂鸣器(按键音和定时器回零提示),DS1302占3个IO,算了一下,21个IO ,还有富余,人机互动是4只按键,每只按键用了一个口,共用了25个IO。
电路简单,所以没画原理图,直接做了99SE的PCB,没在电脑上,明天传
下面是数码管扫描函数。如果用DS1302提供的秒来驱动秒点闪的话,秒点就会亮一秒,暗一秒,有慢半拍的感觉,所以从数码管扫描函数里计算出半秒时间来对半秒标志取反,然后检测半秒标志控制秒点闪烁,但是又出现了新问题,秒点会一直闪,只好给他设置了栏杆,只有在时钟或定时运行状态下它才可以闪,其他状态下关闭,一直闪的问题解决了,还有一个小问题就是在定时状态下秒点闪烁和走秒不同步,有时看着有点别扭,请高手指点一下怎样解决
谢谢师长!这一段时间忙了点,没有更新,对不起大家啦。不管帖子沉到哪里,我也要把该做的事做完!下面说一下这个时钟的功能
1、实时时钟,不怕掉电
2、倒计时定时器功能,最长60分钟,倒计时归零后报警提醒。初次上电显示E5E5,设定一次后掉电记忆
3、PWM调光功能,PWM1输出三极管驱动,可直接驱动LED
4、4只按键实现全部功能
4只按键功能:
从左到右按键1,时钟、定时切换,上电显示时钟,按一下按键1切换到定时,再按返回到时钟
按键2,时钟界面时,按一次始终停止,再按小时加1,到59再从1加。按按键3,分钟加1加到59再回到1继续加1.按按键4退出,时钟按 调整后时间运行。
定时界面时,按按键2定时进入调整界面,按按键2分钟加1,到59后回到1继续加1.按按键3秒加1,倒59回到1再加1按按键4定时开始 计时,所调整定时时间记忆到单片机EEPROM中,每次调整都会更新到最后一次所调试间。定时运行时,按按键4定时停止,再按一次 返回到定时时间,再按又开始倒计时
时钟界面时,按键3调光亮度加,按键4亮度减小。定时界面时亮度不可调
谢谢师长帮顶,由您等前辈地帮扶,我等小菜鸟才能成长起来,感激不尽
上面是DS1302初始化函数,因为有备用电池,所以无须每次开机都初始化,看到有前辈用往DS1302的RAM中写入数据,上电时读出数据与写入数据相同,则说明DS1302正在运行,不初始化。可是我怎样实验都没成功,只好另寻他法。后又看到别的前辈用检测DS1302秒寄存器是否为1来判断DS1302是否运行,以此决定是否初始化,结果我用也没成功,我开始怀疑是否我的人品有问题无奈之下只好加了下面的else,每次上电都将秒写成30,因此时钟每次上电都会出现误差。请前辈指点一下,小菜感激不尽,定当加倍努力