qlql753
|
分享:
▲
▼
能不能从这里面改呢?? 这个程式是显示是七段显示器上的 能不能改成LCD呢??
ORG 0 JMP INITIALIZE ORG 13H JMP INT1 EN REG P3.5 RW REG P3.6 RS REG P3.7 LCD REG P2 ;========================================================= ;=========================主程式========================== ;========================================================= INITALIZE: MOV A,#00111000B ;设定为8BIT,2列,5*7字型 CALL WR_INST MOV A,#00001000B ;关闭显示幕 CALL WR_INST MOV A,#00000001B ;清除显示幕 CALL WR_INST MOV A,#00001111B ;开启显示幕,游标,与闪烁 CALL WR_INST MOV A,#00000110B ;设定AC+1 CALL WR_INST
;========================================================= START: MOV 03H,#C0H ;使用位址站存器03H MOV P1,03H ;输出七段0 CALL DELAY1
AGAIN: MOV A,#10000000B ;设定A值为128 MOV R4,#8 ;做八次的测试 RR: MOV P0,#FFH ;设定P0为高阻态 MOV 03H,P0 ;取回P0的值,放入03H暂存器 CJNE A,03H,JJ ;若内容相等,做SHOW动作 CALL LOOP1 CALL SHOW AJMP AGAIN JJ: RR A ;右旋A=做除2动作 DJNZ R4,RR ;跳至RR继续下一个接脚测试
MOV A,03H ;若为零,输出七段0 JZ START
MOV P1,#FFH ;若皆错误,LCM显示错误 CALL LOOP AJMP AGAIN ;无限回圈
;========================================================= ;======================== SHOW ======================= ;========================================================= SHOW: PUSH A MOV DPTR,#TABLE ;输出字形表0~9 MOV A,R4 ; MOVC A,@A+DPTR ;
MOV P1,A ; CALL DELAY1 POP A
RET
;========================================================= ;======================== LCM副程式 ====================== ;========================================================= LOOP: MOV A,#10000000B ; CALL WR_INST MOV DPTR,#LINE1 MOV R0,#16 CALL WR_STRING CALL DELAY2 RET
;============================================================== LOOP1: MOV A,#10000000B ; CALL WR_INST MOV DPTR,#LINE2 MOV R0,#16 CALL WR_STRING CALL DELAY2 RET ;============================================================== WR_INST: CALL CHECK_BF CLR RS CLR RW SETB EN MOV LCD,A CLR EN RET
;================================================================ CHECK_BF: PUSH A BUSY: CLR RS SETB RW SETB EN MOV A,LCD CLR EN JB ACC.7,BUSY CALL DELAY POP A RET
;================================================================ WR_STRING: MOV R1,#0 NEXT: MOV A,R1 MOVC A,@A+DPTR CALL WR_DATA INC R1 DJNZ R0,NEXT RET
;================================================================ WR_DATA: CALL CHECK_BF SETB RS CLR RW SETB EN MOV LCD,A CLR EN RET
;========================================================= ;======================== 延迟时间 ======================= ;========================================================= DELAY1: MOV R5,#10 D0: MOV R6,#250 D1: MOV R7,#200 D2: DJNZ R7,D2 DJNZ R6,D1 DJNZ R5,D0
RET
;================================================================ DELAY: MOV R6,#15 D3: MOV R7,#200 DJNZ R7,$ DJNZ R6,D3 RET
;================================================================ DELAY2: MOV R5,#20 D4: MOV R6,#200 D5: MOV R7,#250 DJNZ R7,$ DJNZ R6,D5 DJNZ R5,D4 RET
;============================================================== ;====================== TABLE ========================= ;============================================================== TABLE: DB 11000000B ;0 DB 11111001B ;1 DB 10100100B ;2 DB 10110000B ;3 DB 10011001B ;4 DB 10010010B ;5 DB 10000010B ;6 DB 11111000B ;7 DB 10000000B ;8 DB 10010000B ;9
LINE1: DB ' ' LINE2: DB ' ERROR ' ;============================================================== END
[ 此文章被qlql753在2006-01-01 17:44重新编辑 ]
|