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重新編輯 ]
|