黄金会员 
 
主题
回帖0
积分9861
阅读权限40
注册时间2009-11-11
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
 
org 0000h 
ajmp 0030h 
org 0030h 
rck bit p2.0;显示更新使能脚 
reset: 
      mov scon,#00h 
      clr es 
     ;;;;;;;;;;;;;;;;;;;;;;; 
     ;;;;; ;lcd初始化;;;;;;; 
      ACALL ys45  ;上电延时 
      acall ys45 
      acall ys45 
      acall ys45 
       
      mov a,#33h 
      acall xzl 
      mov a,#30h 
      acall xzl 
      mov a,#02h 
      acall xzl 
      
      mov a,#101000b  ;4BIT ,2行显示 
      acall delay1 
      acall xzl 
       
      mov a,#01h  ;清屏 
      acall xzl 
       
      mov a,#00000010b   ;光标复位 
      acall xzl 
     MOV A,#00000110B  ;地址增量1,字符不移动 
     acall xzl 
     mov a,#00001111b   ;显示开,光标有,光标闪 
     acall xzl 
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   
      
    MOV A,#83H ;指定显示地址 
    mov r1,#10 ;显示10个字符 
    ACALL XZL 
     mov dptr,#tab 
disp:mov a,#00h 
     movc a,@a+dptr 
     acall xsj 
     inc dptr 
     djnz r1,disp 
   
  mov a,#0c6h  ;指定显示地址 
    acall xzl 
    mov a,#41h    ;显示"A" 
    acall xsj 
    mov a,#41h 
    acall xsj 
    mov a,#41h 
    acall xsj 
    mov a,#41h 
    acall xsj 
     
     ajmp $ 
      
      
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;     
  ;;;;;;;;;;;;写指令 ;;;;;;;;;;;;;;;;;;    
xzl:   
      mov 30h,a       ;指令数据送30H暂存 
      acall xzl1 
      mov a,30h 
      swap a 
xzl1: CLR RCK         ;拉底RCK 
      anl a,#0F0h    ;屏蔽低4位(4线驱动1602要求先写高4位再写低4位 
      ORL A,#000000001B;RS=0,E=1(指定是指令) 
      mov sbuf,a 
      jnb ti,$ 
      clr ti 
      SETB RCK          ;RCK 为高,存储寄存器内容更新 
      ACALL DELAY1       
      CLR rck 
      ANL A,#11111110B 
      MOV SBUF,A 
      jnb ti,$ 
      clr ti 
      SETB RCK 
      ;ACALL DELAY1 
       
      ret 
       
       
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   
    ;;;;;;;;;;写数据 ;;;;;;;;;;;;;;; 
xsj:   
      mov 30h,a  ;显示数据送30H暂存 
      acall xsj1  
      mov a,30h 
      swap a 
       
xsj1: CLR RCK         ;拉底RCK 
      anl a,#0f0h   ;屏蔽低4位(4线驱动1602要求先写高4位再写低4位)   
      orl a,#00000011b ;RS=1,E=1 指定写数据 
      mov sbuf,a 
      jnb ti,$ 
      clr ti 
      SETB RCK       ;RCK 为高,存储寄存器内容更新(据595文档说给RCK的正脉冲宽度只要几十纳秒) 
       NOP           ;增加5个空操做,这样换用24MHZ晶振时也能很好的显示 
       NOP 
       NOP 
       NOP 
       NOP 
      CLR rck          
      
      ANL A,#11111110B  ;E脚对应位设为0(使能有效,给E一个下降沿) 
      mov sbuf,a 
      jnb ti,$ 
      clr ti 
      SETB  rck 
     ;ACALL DELAY1 
      ret 
       
       
       
ys45:mov r7,#0bh 
ys1:  mov r6,#0cbh 
      djnz r6,$ 
      djnz r7,ys1 
      ret 
       
delay1:mov r7,#20   ;这是初始化完成后正常操作1602的延时程序 
d11:   mov r6,#15 
      djnz r6,$ 
      djnz r7,d11 
      ret 
 tab:db "abcde12345"      
       
      end 
       
       
       
       
 |   
- 
 
 
 
- 
 
 
- 
595.rar
 
18.06 KB, 下载次数: 2468, 下载积分: 一乐金币 -1  
 
 
 
 
 
 
 
 |