``
本帖最后由 gk320830 于 2015-3-5 03:27 编辑
PS/2接口6只引脚中4只引脚是有效的,两只用于供电,只有2只引脚可以用来传输数据。PS/2通信协议是一种双向同步串行通信协议。通信的两端通过Clock(时钟脚)同步,并通过Data(数据脚)交换数据。任何一方如果想抑制另外一方通信时,只需要把Clock(时钟脚)拉到低电平。每一数据帧包含11~12个位,具体含义如表1所列。更多的PS/2说明可以参考网上的应用介绍。
PS/2数据帧格式说明 表1
1个起始位 总是逻辑0
8个数据位 低位在前
1个奇偶校验位 奇校验
1个停止位 总是逻辑1
1个应答位 仅用在主机对设备的通信中
DS12C887时钟控制寄存器功能说明 表2
地址 功能说明
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的相应位置显示即可。
编好的程序写入单片机,一个原汁原味的单片机
电子钟就制作好了
``