| 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重新编辑 ] 
 |