数码管显示驱动和键盘扫描控制器CH451及其应用
将P1.0与DIN连接可用于输入串行数据,串行数据输入的顺序是低位在前,高位在后。另外,在上电复位后,CH451 默认选择1线串行接口,如需选择4线串行接口,则应在DCLK输出串行时钟之前,先在DIN上输出一个低电平脉冲,以通知CH451为4线串行接口。将P1.1与DCLK连接可提供串行时钟,以使CH451在其上升沿从DIN输入数据,并在其下降沿从DOUT输出数据。LOAD用于加载串行数据,CH451一般在其上升沿加载移位寄存器中的12位数据以作为操作命令进行分析并处理。也就是说,LOAD的上升沿是串行数据帧的帧完成标志,此时无论移位寄存器中的12位数据是否有效,CH451都会将其当作操作命令来处理。应注意的是,在级联电路中,单片机每次输出的串行数据必须是单个CH451的串行数据的位数乘以级联的级数。
下面是该电路的驱动程序:
;主程序需要定义的参数
DCLK BIT P1.1 ;串行数据时钟,上升沿激活
DIN BIT P1.0 ;串行数据输入
LOAD BIT P1.2 ;串行命令加载,上升沿激活
DOUT BIT P3.2 ;接INT0,键盘中断和键值数据输出
KEY DATA 7FH ;存放键盘中断时读取的键值
;******* 初始化子程序 *******
INIT CLR DIN ;先低后高,输出上升沿通知
CH451选择4线串行接口
SETB DCLK ;置为默认的高电平
SETB DIN
SETB LOAD
SETB DOUT ;置为输入
MOV B#04H ;设置系统参数命令
MOV A#07H ; Watch-Dog使能,开键盘、显示功能
LCALL WRITE
MOV B#03H ;设置移位命令
MOV A#00H ;开环左移
LCALL WRITE
MOV B#05H ;设置显示参数
MOV A#00H ;不译码,8位显示,最亮
LCALL WRITE
MOV B#06H ;设置闪烁控制
MOV A#00H ;不闪烁
LCALL WRITE
CLR IT0 ;置外部信号为低电平触发
CLR IE0 ;清中断标志
SETB EX0 ;允许键盘中断
SETB EA
RET
;******* 输出命令子程序 ******
;入参:B、ACC待写的12位数据 低8位在ACC中 高4位在B的低4位中
WRITE CLR EX0 ;禁止键盘中断
CLR LOAD ;命令开始,此命令可以放在后面
MOV R7#08H ;将ACC中8位送出
WRITE_8RRC A ;低位在前,高位在后
CLR DCLK
MOV DINC ;送出一位数据
SETB DCLK ;产生时钟上升沿通知
CH451输入位数据
DJNZ R7 WRITE 8 ;位数据未完,继续
MOV AB
MOV R7#04H ;将B中4位送出
WRITE 4RRC A ;低位在前高位在后
CLR DCLK
MOV DINC
SETB DCLK
DJNZ R7 WRITE 4
SETB LOAD ;产生加载上升沿通知
CH451处理命令数据
SETB EX0 ;允许键盘中断
RET
******* 输入键值子程序 ******
出参 ACC键值数据
READ CLR EX0 ;禁止键盘中断
CLR LOAD ;命令开始
MOV A#07H ;读取键值命令的高4
位0111B
MOV R7#04H ;忽略12位命令的低
8位
READ 4 RRC A ;低位在前,高位在后
CLR DCLK
MOV DINC
SETB DCLK
DJNZ R7 READ 4
SETB LOAD ;产生加载上升沿通知
CH451处理命令数据
CLR A ;先清除键值单元以便移位
MOV R7#07H ;读入7位键值
READ_7 MOV CDOUT ;读入一位数据
CLR DCLK ;产生时钟下降沿通知
CH451输出下一位
RLC A ;数据移入ACC,高位
在前,低位在后
SETB DCLK
DJNZ R7 READ_7 ;位数据未完继续
CLR IE0 ;清中断标志,读操作
过程中有低电平脉冲
SETB EX0 ;允许键盘中断
RET
4 结束语
用CH451扩展键盘显示接口,具有接口简单、占用CPU资源少、外围器件简单、性能价格比高等优点,可在各种单片机系统中得到广泛的应用。