CH451中 不译码指的是什么?还有数据加协、1线串行接口、4线串行接口。求解释

如题所述

不译码指的是不转成BCD码,也就是说如果连接是按顺序连接数码管的八个管脚,在对CH451初始化后,可发送设置,让它用译码方式,(默认不译码),译码后,有个表,发送数据是多少显多少。不译码,需要在程序中写个表,手工译码,也就是数码管的a、b、c...对应的灯亮,总体显一个数。
4线串行接口,是和单片机的通信采用串行通信,其中一次传输4个数据,通过CLOCK管教控制,具体请看CH451手册
下面是一段CH451用汇编编写的驱动程序,望对理解有帮助
;****************************************************************************
;需要主程序定义的参数
CH451_DCLK BIT P3.4 ;串行数据时钟,上升沿激活
CH451_DIN BIT P3.3 ;串行数据输出,接 CH451 的数据输入
CH451_LOAD BIT P2.3 ;串行命令加载,上升沿激活
CH451_DOUT BIT P2.2 ;INT0,键盘中断和键值数据输入,接 CH451 的数据输出
CH451_KEY DATA 7FH ;存放键盘中断中读取的键值
;****************************************************************************
; R452 367 1
ORG 0000H
START:
ACALL CH451_INIT ;调用初始化程序
MOV R5,#10H ;将要显示的数放入R5中
MOV R4,#04H ;将要在第几位上显示放在R4中,最右边是0位

KEYSHOW:
ACALL SCAN1
ACALL CHANGE
SJMP KEYSHOW

SJMP $

;****************************************************************************
;子程序调用
;****************************************************************************

; 初始化子程序
CH451_INIT:
CLR CH451_DIN ;先低后高,输出上升沿通知 CH451 选择 4 线串行接口
SETB CH451_DCLK ;置为默认的高电平
SETB CH451_DIN
SETB CH451_LOAD
SETB CH451_DOUT ;置为输入
CLR IT0 ;置外部信号为低电平触发
SETB PX0 ;置高优先级或者低优先级
CLR IE0 ;清中断标志
SETB EX0 ;允许键盘中断

MOV B,#04H ;设置为键盘与显示开
MOV A,#03H
ACALL CH451_WRITE
RET

;****************************************************************************
;数码管显示程序
;****************************************************************************
;转换程序,在R4位显示R5值
CHANGE:
MOV A,R5
ACALL TTA ;对应M2t1板的数码管转换
MOV R2,A
MOV A,R4
ACALL TTB ;对应m2t1板的数码管位置转换
MOV B,A
MOV A,R2
ACALL CH451_WRITE
RET

;M2T1板数码管对应表
TTA: MOV DPTR,#TAB_A
MOVC A,@A+DPTR
RET
;对应m2t1板的数码管位置转换
TTB: MOV DPTR,#TAB_B
MOVC A,@A+DPTR
RET
TAB_A:
DB 0BEH;0 显示数
DB 24H ;1
DB 0EAH;2
DB 0E6H;3
DB 74H ;4
DB 0D6H;5
DB 0DEH;6
DB 0A4H;7
DB 0FEH;8
DB 0F6H;9
DB 0FCH;A
DB 5EH ;B
DB 4AH ;C
DB 0BEH;D
DB 0DAH;E
DB 0E4H;F
DB 00H ;10H无显示
DB 0FEH;11H对于数码管0位倒过来焊接的人,可以显示°C
DB 40H ;12H - 号
TAB_B:
DB 0AH;0 显示数码管号
DB 09H;1
DB 0BH;2
DB 08H;3
DB 0CH;4
DB 0DH;5
DB 0EH;6
DB 0FH;7
;****************************************************************************
;键盘扫描程序
;****************************************************************************
SCAN1:MOV C,CH451_DOUT
JC SCAN1
ACALL CH451_READ
MOV R1,A
C0: CJNE A,#40H,C1
MOV R5,#00H
AJMP TES
C1: CJNE A,#43H,C2
MOV R5,#01H
AJMP TES
C2: CJNE A,#41H,C3
MOV R5,#02H
AJMP TES
C3: CJNE A,#42H,C4
MOV R5,#03H
AJMP TES
C4: CJNE A,#48H,C5
MOV R5,#04H
AJMP TES
C5: CJNE A,#4BH,C6
MOV R5,#05H
AJMP TES
C6: CJNE A,#49H,C7
MOV R5,#06H
AJMP TES
C7: CJNE A,#4AH,SCAN1
MOV R5,#07H
AJMP TES
TES:
RET
;****************************************************************************
;移位程序
;****************************************************************************
;DELAY_1S 延迟1秒
DELAY_1S:
MOV R7,#20
DEL1:MOV R6,#200
DEL2:MOV R3,#248
DJNZ R3,$
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
;左四位左移位
/*LIFT:
MOV B,#03H
MOV A,#00H
ACALL CH451_WRITE

INC R5
ACALL CHANGE
ACALL DELAY_1S
CJNE R5,#09H,LIFT
SJMP START
RET*/

;****************************************************************************
;串口通信读出写入程序
;****************************************************************************
CH451_WRITE:
CLR EX0 ;禁止键盘中断
CLR CH451_LOAD ;命令开始,此命令可以放在后面
MOV R7,#08H ;将 ACC 中 8 位送出
CH451_WRITE_8: RRC A ;低位在前,高位在后
CLR CH451_DCLK
MOV CH451_DIN,C ;送出一位数据
SETB CH451_DCLK ;产生时钟上升沿通知 CH451 输入位数据
DJNZ R7,CH451_WRITE_8 ;位数据未完继续

MOV A,B
MOV R7,#04H ;将 B 中 4 位送出
CH451_WRITE_4: RRC A ;低位在前,高位在后
CLR CH451_DCLK
MOV CH451_DIN,C ;送出一位数据
SETB CH451_DCLK ;产生时钟上升沿通知 CH451 输入位数据
DJNZ R7,CH451_WRITE_4 ;位数据未完继续
SETB CH451_LOAD ;产生加载上升沿通知 CH451 处理命令数据
SETB EX0 ;允许键盘中断
RET

; 输入键值子程序

CH451_READ: CLR EX0 ;禁止键盘中断
CLR CH451_LOAD ;命令开始
MOV A,#07H ;读取键值命令的高 4 位 0111B
MOV R7,#04H ;忽略 12 位命令的低 8 位
CH451_READ_4: RRC A ;低位在前,高位在后
CLR CH451_DCLK
MOV CH451_DIN,C ;送出一位数据
SETB CH451_DCLK ;产生时钟上升沿锁通知 CH451 输入位数据
DJNZ R7,CH451_READ_4 ;位数据未完继续
SETB CH451_LOAD ;产生加载上升沿通知 CH451 处理命令数据
CLR A ;先清除键值单元以便移位
MOV R7,#07H ;读入 7 位键值
CH451_READ_7:
MOV C,CH451_DOUT ;读入一位数据
CLR CH451_DCLK ;产生时钟下升沿通知 CH451 输出下一位
RLC A ;数据移入 ACC,高位在前,低位在后
SETB CH451_DCLK
DJNZ R7,CH451_READ_7 ;位数据未完继续
CLR IE0 ;清中断标志,读操作过程中有低电平脉冲
SETB EX0 ;允许键盘中断
RET

END
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网