1、13.3.1 LCD编程汇编程序例(1)LCD编程汇编子程序LCD编程汇编子程序(LcdShow.asm)*LCD引脚定义LcdData EQU PTB ;Lcd显示数据传送口LcdData_D EQU DDRB ;数据口方向寄存器LcdCtrl EQU PTC ;Lcd控制信号传送口LcdCtrl_D EQU DDRC ;控制口方向寄存器LcdRS EQU 0 ;Lcd寄存器选择信号PTC0LcdRW EQU 1 ;读写信号接PTC1LcdE EQU 2 ;Lcd使能信号接PTC2*LCDShow:在HD44780显示屏上显示数据-*功能描述:在HD44780显示屏上显示HX所指向的32个数
2、据 *入口:HX=待显示的数据 *出口:无 *堆栈深度:2+8+2=12 *内部调用:InitLCD,LCDCommand *-以上为子程序说明-*LcdShow: PSHA ;保护A AIS #-!1 ;开辟临时变量 JSR InitLcd ;调用Lcd初始化子程序 ;显示第1行16个字符 BCLR LcdRS,LcdCtrl ;RS=0 设置显示字符首DD RAM地址 BCLR LcdRW,LcdCtrl ;R/W=0 LDA #%10000000 ;后7位为DDRAM地址,=0x00 JSR LcdCommand LDA #!16 ;临时变量初值=16(1行显示个数) STA !1,SP
3、 LcdShow1: BSET LcdRS,LcdCtrl ;RS、R/W=1 0 写数据到DDRAM BCLR LcdRW,LcdCtrl LDA ,X ;取待显示的数据 JSR LcdCommand AIX #!1 ;指向下一个待显示的数据 DBNZ !1,SP,LcdShow1 ;显示完毕?否,继续 ;显示第2行16个字符 BCLR LcdRS,LcdCtrl ;RS=0 设置显示字符首DD RAM地址 BCLR LcdRW,LcdCtrl ;R/W=0 LDA #%11000000 ;后7位为DDRAM地址,=0x40 JSR LcdCommand LDA #!16 ;临时变量初值=1
4、6(1行显示个数) STA !1,SP LcdShow2: BSET LcdRS,LcdCtrl ;RS、R/W=1 0 写数据到DDRAM BCLR LcdRW,LcdCtrl 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 *内部调用:
5、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 #%00111100 ;8位数据,2行显示,5*7点阵 JSR LcdCommand LDA #%00001000 ;关显示,关光标显示,不闪烁 JSR LcdCom
6、mand LDA #%00000001 ;清屏 JSR LcdCommand LDHX #$03DF ;等待清屏完毕,时间1.6msDelay2ms: ;延时 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命令-*
7、功能描述:执行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(2)LCD编程汇编主程序 实例编号:A07 路径:ASMA07_ 液晶LCD显示(Lcdmai
8、n.asm)*-*文 件 名:LcdMain.asm *硬件连接: 1.LCD的DB0-7与MCU的B口的PTB0-7连接 * 2.LCD的RS,R/W,E与MCU的PTC0,PTC1,PTC2连接 *功能:1.初始显示:Wait Receiving. Soochow 2005.08* 2.等待接收字符,当收到32个字符时显示,重复此功能 *-嵌入式应用技术基础教程教学实例-*头文件$include GP32ASM.H ;包含GP32的头文件*两个起始地址名RAMstartAddr equ $0040 ;RAM的起始地址FlashStartAddr equ $8000 ;程序开始地址*内存变量
9、 org RAMstartAddr ;RAM的起始地址 LCD_Buf32 rmb !32 ;存放32字节*=*主程序 org FlashStartAddr ;程序起始地址MainInit: ;复位后程序从此开始执行 ;系统初始化 SEI LDHX #$023F ;堆栈初始化 TXS JSR GP32Init ;调系统初始化子程序GP32Init ;串行口初始化 JSR SCIInit ;显示初始字符Wait Receiving. Soochow 2005.08 LDHX #DisplayInit JSR LCDShow ;程序总循环入口MainLoop: LDHX #LCD_Buf32 LD
10、A #!32 JSR SCIReN BCS MainLoop ;C=1,未收到 ;把LCD_Buf32为首址32个字符送LCD显示 LDHX #LCD_Buf32 JSR LCDShow JMP MainLoopDisplayInit FCB WAIT RECEIVING. FCB Soochow 2005.08 *外部子程序存放处,这些子程序都在当前目录中$INCLUDE H08SCI.asm $INCLUDE GP32init.asm$INCLUDE SCIInit.asm$include LcdSub.asm*中断向量 ORG $FFFE ;复位向量 DW MainInit (3)PC机
11、方程序 图13-5 LCD实验程序PC机方操作界面PCJ机部分主要功能是输入要在单片机板的液晶屏上显示的32个字符,然后以串行通信方式发向单片机,单片机接收此组字符在液晶屏上显示出来。下面给出PC机方程序。PC机方操作界面见图13-5。可在图中的输入框中输入要显示的字符,仅限于可显示字符,以便与LCD模块内部字符编码相一致,LCD才能正确显示。数据输入后,单击“发送数据”按钮,数据从串行口发向单片机,则LCD上显示相应字符。可以重复操作。实例编号:A07 路径:ASMA07_ 液晶LCD显示 vb_lcd Option ExplicitDim i As Integer 临时使用Dim send
12、data(31) As Byte 发送数据数组Private Sub Form_Load() 初始化 串行口初始化 Call SCIinit(MSComm1, 1, 9600,N,8,1) Text1.MaxLength = 32 输入框限制32个字符End SubPrivate Sub Command1_click(Index As Integer) Select Case Index Case 0 单击“发送数据”命令按钮 For i = 1 To Len(Text1.Text) 给senddata数组赋值senddata(i - 1) = Asc(Mid(Text1.Text, i, 1) Next i If Len(Text1.Text) 32 Then 不足部分补空格 For i = Len(Text1.Text) To 31 senddata(i) = 32 Next i End If MSComm1.Output = senddata 发送出去 Case 1 单击“退出”命令按钮 MSComm1.PortOpen = False 关闭 End End SelectEnd Sub