工程师电子制作故事:实战单片机电子钟
扫描二维码
随时随地手机看文章
前一段时间开始带学生进行毕业设计,学生想做一个电子钟,问我怎么做,我告诉他得有一点专业性,否则不能称其为毕业设计。经过1个月的反复酝酿,我们确定了如下方案和最终目标:
1.整体功能达到市售电子日历效果,显示内容包括年、月、日、星期、时、分、秒、室温。
2.实时时钟芯片有两种:DS12C887、DS1302。学习和使用过程中可进行选择。
3.数码管控制采用MAX7219专用扫描驱动芯片。
4.电路板上留有PS/2键盘接口,用于调节当前时间、数码管显示亮度、闹铃时间。这一点和普通电子日历有明显区别,毕竟我们做的是一个有点专业要求的电子钟。
5.电路板上安装有继电器,可作为简单的时间控制或温度控制装置。
6.设计出原理图和PCB图,找厂家制出PCB,编程实现预期效果。
下面对整个电子钟的设计和制作过程做一个图示说明,希望对想做这方面毕业设计的学生朋友有所帮助。
主要元器件选用
1.单片机
就用AT89S51吧,太方便了,只要在侧面留有ISP插针接口,外接编程器就可以方便地在线改写调试程序了。ISP编程插针设置如图1所示。
图1 AT89S51侧面ISP插针设置图
2.实时时钟芯片
有DS12C887、DS1302两种。前者内部自带锂电池,后者要外接后备电池,二者的实物对比如图2所示。DS12C887的最大特点是有15种频率可编程方波输出功能,在某些情况下可作为简易的方波发生器,电路板上也设有输出拉环和插针,便于不同场合的连接需求,如图1中的标示。
图2 DS1302和DS12C887
3.PS/2接口
PS/2接口就是电脑主机后面的键盘或鼠标接口,实物如图3所示,共有6个引脚,实际只用4个,分别是电源正、电源负、数据脚、时钟脚,各插孔功能标识见图4。
图3 PS/2接口 图4 PS/2插孔功能分布
4.MAX7219
很方便的一款专用数码管驱动芯片,与单片机之间采用三线连接,串行传送数据,就是对电源要求高一些,在紧靠它的地方加上两个电容就能使其稳定工作,实物见图5。
图5 MAX7219
5.温度传感器
DS18B20是最佳选择,体积小巧,与单片机连接简单,数据处理方便,实物如图6所示。
图6 DS18B20实物
原理图设计
经过试验板搭接和综合考虑,各器件与单片机各引脚的连接关系如下:
1.AT89S51的P1.5、P1.6、P1.7用于ISP编程,不作他用。
2.DS1302的第7脚(SCLK)、第6脚(I/O)、第5脚(RST)分别接AT89S51的P1.0、P1.1、P1.2。
3.MAX7219的第1脚(DIN)、第12脚(CS)、第13脚(SCL)分别接AT89S51的P2.0、P2.1、P2.2。
4.DS12C887的第4脚(AD0)—第11脚(AD7)接AT89S51的P0.0~P0.7、第13脚(/CS)接P2.7、第14脚(AS)接ALE、第15脚(R/W)接P3.6、第17脚(DS)接P3.7、第19脚(IRQ)接P3.3。
5.LED、继电器、DS18B20分别占用P3.0、P1.4、P1.3。
设计原理图如图7所示。
图7 单片机电子钟原理总图(此图为工程图,为与印制电路板一致,元器件代号未做标准化处理)
PCB设计
这里PCB设计没有按照传统的设计顺序,即由原理图到网络表再到PCB,主要是因为有的元件没有现成的封装,相比之下对于这个不太复杂的电路,手工布线更为灵活。经过半个多月的纯手工设计,最终的PCB图如图8所示。
图8 单片机电子钟PCB图
焊接制作及编程调试
将PCB图发给电路板厂家,经过半个月的等待,终于等到了成品电路板,黑色的阻焊层与白色的字符层,更显得对比分明,尤其是对着电路板长时间进行目测检查,没有视觉疲劳感,之前的绿色电路板观察时间长了会感觉眼花。空PCB如图9所示。作者在电路板上作了很多引脚功能和连接标注,对编程调试很有帮助。
图9 单片机电子钟空PCB板照片[!--empirenews.page--]
购齐所有元器件,焊接好电路板,最终焊接完成的电子钟实物如图10所示。
到这里就可以进入编程调试阶段了,这个时钟程序的编写主要包括以下4个主要部分:
1.PS/2键盘通信
PS/2接口6只引脚中4只引脚是有效的,两只用于供电,只有2只引脚可以用来传输数据。PS/2通信协议是一种双向同步串行通信协议。通信的两端通过Clock(时钟脚)同步,并通过Data(数据脚)交换数据。任何一方如果想抑制另外一方通信时,只需要把Clock(时钟脚)拉到低电平。每一数据帧包含11~12个位,具体含义如表1所列。更多的PS/2说明可以参考网上的应用介绍。
表1 PS/2数据帧格式说明
1个起始位 总是逻辑0
8个数据位 低位在前
1个奇偶校验位 奇校验
1个停止位 总是逻辑1
1个应答位 仅用在主机对设备的通信中
表2 DS12C887时钟控制寄存器功能说明
地址 功能说明
7F00H 秒存储单元
7F01H 秒闹钟存储单元
7F02H 分存储单元
7F03H 分闹钟存储单元
7F04H 时存储单元
7F05H 时闹钟存储单元
7F06H 星期存储单元
7F07H 日期存储单元
7F08H 月份存储单元
7F09H 年份存储单元
7F0AH 控制芯片是否立即进行更新、晶振是否起振、可编程方波参数设置
7F0BH 各个位用于控制芯片更新是否禁止、周期/闹钟/更新结束3种中断允许设置、可编 程方波输出、数据存取格式(二进制/BCD)、时制设置、夏令时允许标志。
7F0CH 该寄存器只读,低4位无用,高4位由高到低分别是中断请求标志位、周期中断标志、闹钟中断标志、更新结束中断标志。
7F0DH 该寄存器只读,低7位无用,最高位VRT如为0表示内置电池能量耗尽
PS/2接口与单片机的连接如原理图7所示,由于PS/2键盘要向单片机发送数据时,总是先将第5脚时钟线拉低,这样就可以将PS/2接口的第5脚与单片机的外中断输入引脚相连,一旦PS/2要向单片机发送数据,单片机就可以以外中断的方式优先响应PS/2键盘的输入请求,开始接收数据,接收完毕后,PS/2键盘将时钟线恢复为高电平。
由表1可知,单片机以外中断方式接收PS/2键盘数据时,每接收一帧数据就要中断11次,接收完成后,只要对其中8位有效数据进行比较或查表,就可以知道哪个按键被按下。例如把小键盘区的数字键通码进行排序制表,根据查表的次数就可知道是哪个数字按键被按下。这就是PS/2键盘编程的思路。单片机成功接收了PS/2键盘数据确定是哪个按键后,就可转到相应的程序段执行指定的功能,如设定时间,设定亮度、设定闹铃等。
2.DS12C887的设置和读写
DS12C887内部共有128个寄存器,前14个为时钟控制寄存器,剩下114个供编程者自由使用。14个时钟控制寄存器中的前10个用于存储时钟参数,后4个用于控制DS12C887的各功能组件工作状态。在DS12C887的第13脚片选端(CS)与P2.7相连接情况下,14个时钟控制寄存器地址及具体功能说明如表2所示。
在本文所示电路连接情况下,DS12C887就相当于是单片机的一个外部并行扩展RAM,数据读写采用MOVX指令直接一次性读出或写入,很是方便。在程序初始根据要求对相关功能寄存器进行设定,然后在每次循环当中读出当前各时间寄存器的数据,经单片机处理后分别送到两片MAX7219的指定位置显示即可,具体可参考源程序。
3.MAX7219的初始化和数据写入
MAX7219是一款专用数码管驱动芯片,内部设有动态扫描电路,它以串行通信方式接收到单片机的显示数据后,对指定位置的数码管显示内容进行更新,为单片机节省了宝贵的软、硬件资源。MAX7219的一个显著特点是可以通过设定亮度控制寄存器的数值来控制所接数码管的显示亮度。MAX7219内部有14个寄存器,用于控制数码管显示的内容和状态,各寄存器功能列表如表3所示。
表3 MAX7219寄存器功能说明
编号 功能说明
0 空操作地址
1?8 第1?8个数码管显示地址
9 译码方式控制寄存器,为0FFH表示使用内部BCD译码器,为00H表示不使用
A 亮度调节控制寄存器,分16级,参数范围:00H—0FH
B 扫描位数控制寄存器,根据所接数码管数量确定,参数范围:00H—07H (1只—8只)
C 显示开关控制寄存器,为1所有数码正常显示,为0关闭所有数码管
D 显示器检测控制寄存器,为1所接数码管的各段全部点亮,用于检测是否有损坏,再送入0,恢复正常显示内容
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所示。
图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)实现显示亮度的自动调节,以适应环境光线的变化,这样子就更加具有专业性了。
程序或硬件电路,读者可结合自己的想法,做出更加合理的改动。