实战单片机电子钟制作
存器中的前10个用于存储时钟参数,后4个用于控制DS12C887的各功能组件工作状态。在DS12C887的第13脚片选端(CS)与P2.7相连接情况下,14个时钟控制寄存器地址及具体功能说明如表2所示。
在本文所示电路连接情况下,DS12C887就相当于是单片机的一个外部并行扩展RAM,数据读写采用MOVX指令直接一次性读出或写入,很是方便。在程序初始根据要求对相关功能寄存器进行设定,然后在每次循环当中读出当前各时间寄存器的数据,经单片机处理后分别送到两片MAX7219的指定位置显示即可,具体可参考源程序。
3.MAX7219的初始化和数据写入
MAX7219是一款专用数码管驱动芯片,内部设有动态扫描电路,它以串行通信方式接收到单片机的显示数据后,对指定位置的数码管显示内容进行更新,为单片机节省了宝贵的软、硬件资源。MAX7219的一个显著特点是可以通过设定亮度控制寄存器的数值来控制所接数码管的显示亮度。MAX7219内部有14个寄存器,用于控制数码管显示的内容和状态,各寄存器功能列表如表3所示。
MAX7219的初始化就是对后5个寄存器进行设置,由于检测只需在电路板焊接好进行一次就可以,所以程序初始主要是写入译码方式、显示亮度、扫描位数、显示开关4个控制寄存器相应数值。到这里就可以发现通过PS/2键盘设定数码管显示亮度,就是识别按键后对MAX7219的亮度控制寄存器重新写入新数值。
MAX7219每个寄存器的写入分两步,第一步先写入寄存器地址;第二步再写入寄存器数据,具体的写入语句见源程序。这里简要介绍一下MAX7219级联状态下数据写入思路,这个电路板上用到两片MAX7219(U5、U6),由原理图7可见U6的输入端(DIN)接到U5的输出端(DOUT),这样就称U6为后级,U5为前级,写入子程序段执行一次就把地址和数据先送到后级的U6,再执行一次才送到U5,以此类推,如果3片MAX7219级联,写入子程序就要执行三次才能分别将数据送到相应的MAX7219。
4.DS18B20数据读取和处理
DS18B20内部结构和工作原理就不介绍了。单片机对读取到的温度数据进行适当处理,就是将读出的二进制数据转换成BCD码,再将转换到的BCD码高低位分离,送到MAX7219的相应位置显示即可。
编好的程序写入单片机,一个原汁原味的单片机电子钟就制作好了,夜间的运行效果如图12所示。
制作调试问题汇总
1.试验板搭接是必须的,否则无法确定原理线路正确性。
2.DS12C887有一个上电稳定时间,在程序初始进行几十毫秒的延时即可,否则会读出不正确的数据,因为这个问题编程时多花了2天时间。PS/2键盘设定好亮度后,将亮度参数保存到DS12C887的7F0EH单元,重新上电后应能读出上次设定的亮度参数,但每次读出的均为0,百思不解,上网搜索也无结果,反复试验思考,终于发现DS12C887的用户RAM区上电需要一个稳定时间,否则读出的数据始终是0。
3.MAX7219对供电电压稳定性要求较高,大小两个滤波电容要紧靠芯片布置,参数设置要恰当。在试验板搭接阶段经常发现MAX7219显示会错乱,查找各类网页资料,就是要设置滤波电容,但试验板上没有紧靠芯片设置,而且采用的是飞线,一直到制成PCB后这个问题才得到解决。
4.MAX7219的质量问题。网购是现在电子元件获取的主要途径,但发现特便宜的MAX7219质量无法保证,所以大家网购电子元件时,要注意这个问题。
5.网上的参考资料要多对比,才能确定其正确性。
待改进之处
1.可在板上合适的位置增加几个独立按键,日常使用调节更方便些;
2.显示内容可增加农历和湿度;
3.可以用光敏电阻配合串行A/D转换芯片(如TLC549)实现显示亮度的自动调节,以适应环境光线的变化,这样子就更加具有专业性了。
- 串口线制作方法(12-15)
- 光立方的制作经验杂谈(12-01)
- 热转印法制作PCB个人经验谈(11-30)
- 嵌入式根文件制作方法(11-26)
- 嵌入式linux内核制作方法(11-26)
- 51单片机最小系统制作笔记(11-25)