⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd12864.asm

📁 很实用的单片机例程
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 
;*          控制器:KS0107                                                      *
;*          LCD型号:TS12864A-2或兼容型号                                       *
;*          MCU:AT89S5* ,晶体频率:11.0592MHz                                   *
;*          取模方式:纵向字节倒序                                              *
;*          CS1和CS2为高电平有效                                                *                                                                           *      

        
;***************硬件端口定义***********
          RS       EQU   P2.0
          RW       EQU   P2.1
          E        EQU   P2.2
          CS1      EQU   P2.3
          CS2      EQU   P2.4
          RST      EQU   P2.5   
          COM      EQU   20H    ;指令数据寄存器
          DAT      EQU   21H    ;显示数据寄存器

;**********************************主程序入口地址 
        ORG     0000H  
        AJMP    STR  
        ORG     0003H           
     
;*********************************中断程序入口地址
STR:    
        AJMP    L0100
  
L0100:  CLR     RST
        NOP
        NOP
        SETB    RST
        
;********************************以上是软件复位
        CLR P2.6
        MOV	SP,#60H
        MOV     IE,#81H            ;中断允许
        MOV     IP,#01H            ;优先中断
        MOV     TCON,#00H          ;电平中断
        MOV     COM,#3FH         ;显示开
        LCALL   S02A9            ;左半屏写指令子程序
        LCALL   S02C1            ;右半屏写指令子程序
;----------------------------------------------------------------------
        MOV     COM,#0C0H        ;第一行        
        LCALL   S02A9            ;左半屏写指令子程序
        LCALL   S02C1            ;右半屏写指令子程序
;----------------------------------------------------------------------
        MOV     COM,#0B8H       ;第一页        
        LCALL   S02A9           ;左半屏写指令子程序
        LCALL   S02C1           ;右半屏写指令子程序
;----------------------------------------------------------------------
        MOV     COM,#40H        ;第一列
        LCALL   S02A9           ;左半屏写指令子程序
        LCALL   S02C1           ;右半屏写指令子程序
;********************************************************以上是软件初始化
        MOV     B,#0AAH
        LCALL   XIHX            ;显示横线1
        LCALL   DELAY 
      ; MOV     B,#55H
       ; LCALL   XIHX    
       ; LCALL   DELAY           ;显示横线2
        MOV     B,#0FFH
        MOV     29H,#00H       
        LCALL   XISX    
        LCALL   DELAY            ;显示竖线1
       ; MOV     B,#00H
       ; MOV     29H,#0FFH
      ; LCALL   XISX    
       ; LCALL   DELAY            ;显示竖线2

        MOV     DPTR,#TAB1
        LCALL   LEFT
        MOV     DPTR,#TAB2
        LCALL   RIGHT       
        LCALL   DELAY             ;显示第一幅图片

        MOV     DPTR,#TAB3
        LCALL   LEFT
        MOV     DPTR,#TAB4
        LCALL   RIGHT       
        LCALL   DELAY              ;显示第二幅图片

        MOV     DPTR,#TAB5
        LCALL   LEFT
        MOV     DPTR,#TAB6
        LCALL   RIGHT       
        LCALL   DELAY              ;显示第三幅图片
        

        

        AJMP    L0100
;=======================================================以上是主程序
LEFT:   MOV     R1,#0B8H
_AB:     MOV     COM,R1          ;第一页        
        LCALL   S02A9           ;左半屏写指令子程序     
        MOV     COM,#40H        ;第一列
        LCALL   S02A9           ;左半屏写指令子程序      
        MOV     R0, #64 
S027B:  MOV     A,#00H
        MOVC    A,@A+DPTR               
        MOV     DAT,A        
        LCALL   S02B1           ;左半屏写数据子程序         
        INC     DPTR    
        DJNZ    R0,S027B
        INC     R1        
        CJNE    R1, #0C0H,_AB      
        RET
;======================================================以上是左半屏写数据子程序
RIGHT:  MOV     R1,#0B8H
ABC:    MOV     COM,R1          ;第一页        
        LCALL   S02C1           ;右半屏写指令子程序     
        MOV     COM,#40H        ;第一列
        LCALL   S02C1           ;右半屏写指令子程序      
        MOV     R0, #64 
S027D:  MOV     A,#00H
        MOVC    A,@A+DPTR               
        MOV     DAT,A        
        LCALL   S02B9           ;右半屏写数据子程序         
        INC     DPTR    
        DJNZ    R0,S027D
        INC     R1        
        CJNE    R1, #0C0H,ABC       
        RET

;*******************************************************以上是右半屏写数据子程序

XIHX:   MOV     R1,#0B8H       
BA:     MOV     COM,R1          ;第一页        
        LCALL   S02A9           ;左半屏写指令子程序
        LCALL   S02C1           ;右半屏写指令子程序
        MOV     COM,#40H        ;第一列
        LCALL   S02A9           ;左半屏写指令子程序 
        LCALL   S02C1           ;右半屏写指令子程序
        MOV     R0, #64 
W027B:  MOV     DAT,B        
        LCALL   S02B1           ;左半屏写数据子程序         
        LCALL   S02B9           ;右半屏写数据子程序    
        DJNZ    R0,W027B
        INC     R1        
        CJNE    R1, #0C0H,BA      
        RET 
;--------------------------------------------------------- 
XISX:   MOV     R1,#0B8H       
CA:     MOV     COM,R1          ;第一页        
        LCALL   S02A9           ;左半屏写指令子程序
        LCALL   S02C1           ;右半屏写指令子程序
        MOV     COM,#40H        ;第一列
        LCALL   S02A9           ;左半屏写指令子程序 
        LCALL   S02C1           ;右半屏写指令子程序
        MOV     R0, #32 
X027B:  MOV     DAT,B        
        LCALL   S02B1           ;左半屏写数据子程序         
        LCALL   S02B9           ;右半屏写数据子程序   
        MOV     DAT,29H
        LCALL   S02B1           ;左半屏写数据子程序         
        LCALL   S02B9           ;右半屏写数据子程序
        DJNZ    R0,X027B
        INC     R1        
        CJNE    R1, #0C0H,CA      
        RET  
;****************************************************以上是显示线条程序
S02A9:  SETB    CS1
        LCALL   S02C9
        CLR     CS1         ;左半屏写指令子程序
        RET   
  
S02B1:  SETB    CS1         ;左半屏写数据子程序        
        LCALL   S02E0  
        CLR     CS1     
        RET  

S02C1:  SETB    CS2         ;右半屏写指令子程序        
        LCALL   S02C9  
        CLR     CS2      
        RET    

S02B9:  SETB    CS2         ;右半屏写数据子程序       
        LCALL   S02E0    
        CLR     CS2
        RET     
;**************************************************** 

S02C9:  CLR     RS         
        SETB    RW        
S02C9A: MOV     P0,#0FFH
        SETB    E
        MOV     A, P0
        CLR     E
        JB      ACC.7,S02C9A
        CLR     RW
        MOV     P0,COM       
        SETB    E
        NOP
        CLR     E
        RET     
;*************************************************以上是写指令子程序
S02E0:  CLR     RS         
        SETB    RW        
S02E0A: MOV     P0,#0FFH
        SETB    E
        MOV     A, P0
        CLR     E
        JB      ACC.7,S02E0A
        SETB    RS
        CLR     RW
        MOV     P0,DAT      
        SETB    E
        NOP
        CLR     E
        RET      
          
;************************************************以上是写数据子程序

DELAY:  MOV     R5,#0BH            ;延时
D1:     MOV     R7,#0FFH
D2:     MOV     R6,#0FFH
D3:     DJNZ    R6,$
        DJNZ    R7,D2
        DJNZ    R5,D1
        RET     
 ;****************************************************************  
TAB1:
;--  调入菲戈幅图像左半屏:纵向取模下高位,数据排列:从左到右从上到下 
;--  宽度x高度=64x64 
   DB  000h,000h,000h,040h,080h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,010h
DB  060h,080h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0FCh,000h,000h
DB  000h,000h,000h,000h,000h,000h,000h,000h,000h,0C0h,030h,008h,000h,000h,000h,000h
DB  000h,000h,000h,000h,000h,080h,040h,000h,000h,000h,000h,000h,000h,000h,000h,000h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -