;********************************************************************************************
;LED显示驱动器SAA1060 测试程序:双位共阳绿 {MOD}显示器HDSP-5621,89C2051,SAA1060,330*16只电阻
; 高位LED接线: Q16 Q15 Q14 Q13 Q12 Q11 Q10 Q09----------SAA1060 端子号码
; dp1 g1 f1 e1 d1 c1 b1 a1----------LED段码
; 低位LED接线: Q08 Q07 Q06 Q05 Q04 Q03 Q02 Q01----------SAA1060 端子号码
; dp2 g2 f2 e2 d2 c2 b2 a2----------LED段码
; 单片机89C2051 和SAA1060 接线: LOEX--P1.7;SLEN--P1.6;DUP--P1.5;DATA--P1.4;
;CLB--P1.3;IR--P3.2
;试验时间及地点: 北京市房山 -----2009/03/23-----
;版本号 01 晶体频率12M,20P*2;复位参数:10UF,10K
;图纸及资料 : 记事本有 SAA1060---见PDF文件夹
;*********************************************************************************************
LOEX EQU P1.7 ;单16、双16通道选择:0-双;1--单
DLEN EQU P1.6 ;平时时为低电平,传数据时为高电平,锁存结果时也为低平
DUP EQU P1.5 ;选择A、B通道:0--A ,1--B
DATA_16 EQU P1.4 ;数据输入口
CLB EQU P1.3 ;传送时钟口,最大F《50KHZ(周期为20us)
IR EQU P3.2 ; 红外线接收口(配套试验用,这里边暂不用)
SEG_Q1Q8 EQU 31H ; 低位段码
SEG_Q9Q16 EQU 30H ; 高位段码
HW_LW EQU 32H ; 二位要显示的BCD码
;-------------------------------------------------------------
ORG 0000H
AJMP STRAT ;转开始
STRAT: CALL INT_1 ; 调初始化子程序
MOV R4,#16 ; 循环显示16次--00-----16
MOV 32H,#00 ; 初期值为00
K3: LCALL K0 ;调转换成段码子程序
CALL W_DATA_16 ;调写入SAA1060子程序
CALL W_DATA_16 ; 为可靠再写一次
CALL S2 ;为显示的数据能看清楚做三次延时
CALL S2 ;
CALL S2 ;
INC 32H ;码加一
DJNZ R4, K3 ;循环
AJMP STRAT ; 转开始
;-------------------------------------------------------
INT_1: MOV SP,#60H ;设堆栈
SETB LOEX ; 选择单通道模式
CLR DUP ; 选择A通道
CLR DLEN ; 使能无效时为低电平
CLR CLB ;时钟为低电平
RET
;--------------------------------------------------------
K0: MOV A,32H ; 取码值
ANL A,#0FH ; 去高位
MOV DPTR,#DBTF ; 送码表地址
MOVC A,@A+DPTR ; 取码值
MOV 31H,A ; 送低位
MOV A,32H ; 再取码值
ANL A,#0F0H ; 留高位
SWAP A ; 半字节交换
MOVC A,@A+DPTR ; 换成段码
MOV 30H,A ; 送高位
RET
;------------------------------------------------------
W_DATA_16:
;--------------strat bit ------------------------ 开始位
SETB CLB ;最先为高电平
NOP
NOP
SETB DLEN ;小延时后使能线为高
CLR C ;清位C为0
MOV DATA_16,C ;传送至数据端
CALL DELAY1 ;位传输延时
CLR CLB ;时钟位为低
CALL DELAY1 ;再延时
;----------------Q1-Q8 8-bit data -------------------
MOV A,SEG_Q1Q8 ; 传高位数据段码值至A
MOV R3,#8 ;
K1: RRC A ;带进位C右移一位,Q1送到C中
NOP
MOV DATA_16,C ;C送至数据端
NOP
SETB CLB ;时钟位为高电平
CALL DELAY1 ;位传输延时
CLR CLB ;时钟位为低电平
CALL DELAY1 ;位传输延时
DJNZ R3,K1 ;共传送8次,高位数据传完
;---------------Q9-Q16 8-bit data --------------------
MOV A,SEG_Q9Q16 ;
MOV R3,#8 ;
K2: RRC A ;
NOP
MOV DATA_16,C ;
NOP
SETB CLB ;
CALL DELAY1 ;
CLR CLB ;
CALL DELAY1 ;
DJNZ R3,K2 ;
;----------------- end bit ----------------------
MOV C,DUP ; A或B组选取值送17比特
MOV DATA_16,C ;
SETB CLB ;
CALL DELAY1 ;
CLR CLB ;
CALL DELAY1 ;
NOP ;
NOP ;
CLR DLEN ; 使能线为低电平,数据传输结束
;-------------- load pulse --------------------------
CLR DUP ;
NOP
NOP
NOP
NOP
NOP
SETB DUP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB CLB ; 装入数据脉冲
CALL DELAY1 ;
CLR CLB ;
CALL DELAY1 ;
;-----------------------------------------------
RET ;
;----------------------------------------------------
DELAY1: MOV R7,10 ;
DJNZ R7,$ ;
RET
;----------------------------------------------------
S2: MOV R4,#0FFH ;延时子程序
D2: MOV R5,#0FFH
DJNZ R5,$
DJNZ R4,D2
RET
DBTF: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H,088H,083H,0C6H,0A1H,086H,08EH,08CH
; 0 1 2 3 4 5 6 7 8 9 A B C D E F P
DBTF1: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H,08H,03H,41H,21H,06H,0EH,0CH
; 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. A. B. C. D. E. F. P.
END
一周热门 更多>