新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 工程师电子制作故事:实战单片机电子钟

工程师电子制作故事:实战单片机电子钟

作者:时间:2012-06-01来源:网络收藏

  购齐所有元器件,焊接好电路板,最终焊接完成的实物如图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)实现显示亮度的自动调节,以适应环境光线的变化,这样子就更加具有专业性了。

  程序或硬件电路,读者可结合自己的想法,做出更加合理的改动。

51单片机相关文章:51单片机教程



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭