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

📄 lcdshow.asm

📁 Freescale HC08GP32单片机接LCD源程序
💻 ASM
字号:
*[LCD引脚定义]
LcdData   EQU PTB     ;Lcd显示数据传送口
LcdData_D EQU DDRB    ;数据口方向寄存器
LcdCtrl   EQU PTC     ;Lcd控制信号传送口
LcdCtrl_D EQU DDRC    ;控制口方向寄存器
LcdRS   EQU  0        ;Lcd寄存器选择信号PTC0
LcdRW   EQU  1        ;读写信号接PTC1
LcdE    EQU  2        ;Lcd使能信号接PTC2
*LCDShow:在HD44780显示屏上显示数据--------------------*
*功能描述:在HD44780显示屏上显示HX所指向的32个数据     *
*入口:HX=待显示数据的首地址                          *
*出口:无                                              *
*堆栈深度:2+8+2=12                                    *
*内部调用:InitLCD,LCDCommand                          *
*------------------以上为子程序说明-------------------*
LcdShow: 
     PSHA                 ;保护A
     AIS #-!1             ;开辟临时变量
     JSR  InitLcd         ;调用Lcd初始化子程序
     ;显示第1行16个字符 
     BCLR  LcdRS,LcdCtrl  ;RS、R/W=00 设置显示首地址
     BCLR  LcdRW,LcdCtrl  
     LDA  #%10000000      ;后7位为DDRAM地址,=$00
     JSR  LcdCommand
     LDA #!16             ;临时变量初值=16(1行显示个数)
     STA !1,SP 
      BSET  LcdRS,LcdCtrl  ;RS、R/W=10 写数据到DDRAM   
      BCLR  LcdRW,LcdCtrl       
LcdShow1:                  
      LDA  ,X              ;取待显示的数据
      JSR  LcdCommand
      AIX  #!1             ;指向下一个待显示的数据
      DBNZ !1,SP,LcdShow1   ;显示完毕?否,继续
      ;显示第2行16个字符 
      BCLR  LcdRS,LcdCtrl  ;RS、R/W=00 设置显示首地址
      BCLR  LcdRW,LcdCtrl  
      LDA  #%11000000      ;后7位为DDRAM地址,=$40
      JSR  LcdCommand
      LDA #!16             ;临时变量初值=16(1行显示个数)
      STA !1,SP
      BSET  LcdRS,LcdCtrl  ;RS、R/W=1 0 写数据到DDRAM   
      BCLR  LcdRW,LcdCtrl          
LcdShow2:                 
      LDA  ,X              ;取待显示的数据
      JSR  LcdCommand
      AIX  #!1             ;指向下一个待显示的数据
     DBNZ !1,SP,LcdShow2   ;显示完毕?否,继续
     AIS #!1               ;释放临时变量
     PULA                  ;恢复A
    RTS  
*InitLcd:初始化Lcd(HD44780)----------------------------*
*功能描述:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1*
*入    口:无                                           *
*出    口:无                                           *
*堆栈深度:2+3+3=8                                      *
*内部调用:LcdCommand                                   *
*------------------------------------------------------*
InitLcd:
     PSHH                ;保护HX、A
     PSHX
     PSHA    
     LDA  #%11111111     ;数据口为输出
     STA  LcdData_D
     LDA  LCDCtrl_D      ;控制口低三位为输出
     ORA  #%00000111
     STA  LCDCtrl_D
     BSET LcdE,LcdCtrl
     ;进行LCD设置
     BCLR  LcdRS,LcdCtrl ;RS、R/W=00
     BCLR  LcdRW,LcdCtrl 
     LDA  #%00111000    ;8位数据,2行显示,5*7点阵
     JSR  LcdCommand
     LDA  #%00001000    ;关显示,关光标显示,不闪烁
     JSR  LcdCommand
     LDA  #%00000001    ;清屏
     JSR  LcdCommand
     LDHX #$03DF        ;等待清屏完毕,时间>1.6ms
Delay2ms:               ;延时
      AIX #-1
      CPHX #0
      BNE Delay2ms
      LDA  #%00000110    ;AC自动增1,显示不移动,光标左移
      JSR  LcdCommand
      LDA  #%00010100    ;光标右移一个字符AC自动+1
      JSR  LcdCommand
      LDA  #%00001100    ;开显示,关光标显示,不闪烁
      JSR  LcdCommand
     PULA               ;恢复HX、A
     PULX               
     PULH
    RTS                
*LcdCommand:执行A中的Lcd命令---------------------------*
*功能描述:执行A中的Lcd命令,且延时                      *
*入    口:A,存放指令码或数据                           *
*出    口:无                                           *
*堆栈深度:2+1=3                                        *
*------------------------------------------------------*
LcdCommand:
    PSHX                 ;保护X
    LDX #$30             ;等待>40us
    DBNZX *
     STA  LcdData        ;A->LcdData
     BSET LcdE,LcdCtrl   ;LcdE=1,为了获得E下降沿
     NOP
     NOP
     NOP
     BCLR  LcdE,LcdCtrl  ;LcdE=0,E下降沿,Lcd获得数据
     LDX #$30            ;等待>40us
    DBNZX *
    PULX                 ;恢复X
   RTS                   

⌨️ 快捷键说明

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