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