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

📄 lcd.lis

📁 mage16,LCM1604驱动8线,调试成功
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 006C           L4:
 006C 0E940000          xcall pop_gset2
 0070                   .dbline 0 ; func end
 0070 0895              ret
 0072                   .dbsym r data 20 c
 0072                   .dbsym r command 22 c
 0072                   .dbend
 0072                   .dbfunc e LCD16xx_wait_Ready _LCD16xx_wait_Ready fV
                        .even
 0072           _LCD16xx_wait_Ready::
 0072                   .dbline -1
 0072                   .dbline 94
 0072           ; 
 0072           ; }
 0072           ; 
 0072           ; void LCD16xx_wait_Ready(void)              //等待LCD空闲
 0072           ; {
 0072                   .dbline 95
 0072           ;     LCD_DATA_DDR &= ~0x80;                 //PD7 I/O口方向设置为输入
 0072 A798              cbi 0x14,7
 0074                   .dbline 96
 0074           ;     LCD_RS_PORT &= ~LCD_RS;                //RS=0
 0074 9698              cbi 0x12,6
 0076                   .dbline 97
 0076           ;     LCD_EN_PORT |= LCD_EN;                 //EN=1
 0076 979A              sbi 0x12,7
 0078           L8:
 0078                   .dbline 98
 0078           L9:
 0078                   .dbline 98
 0078           ;     while (!( LCD_DATA_PIN&0x80 ) == 0);   //RW=1,读PD7,为0表示空闲;
 0078 9F99              sbic 0x13,7
 007A 03C0              rjmp L11
 007C 01E0              ldi R16,1
 007E 10E0              ldi R17,0
 0080 02C0              xjmp L12
 0082           L11:
 0082 0027              clr R16
 0084 1127              clr R17
 0086           L12:
 0086 0030              cpi R16,0
 0088 0107              cpc R16,R17
 008A B1F3              breq L8
 008C           X0:
 008C                   .dbline 99
 008C           ;     LCD_EN_PORT &= ~LCD_EN;                //EN=0
 008C 9798              cbi 0x12,7
 008E                   .dbline 100
 008E           ;     LCD_DATA_DDR |= LCD_DATA;
 008E 84B3              in R24,0x14
 0090 8F6F              ori R24,255
 0092 84BB              out 0x14,R24
 0094                   .dbline -2
 0094           L7:
 0094                   .dbline 0 ; func end
 0094 0895              ret
 0096                   .dbend
 0096                   .dbfunc e LCD16xx_set_xy _LCD16xx_set_xy fV
 0096           ;        address -> R20
 0096           ;              y -> R10
 0096           ;              x -> R22
                        .even
 0096           _LCD16xx_set_xy::
 0096 0E940000          xcall push_gset3
 009A A22E              mov R10,R18
 009C 602F              mov R22,R16
 009E                   .dbline -1
 009E                   .dbline 113
 009E           ; }
 009E           ; 
 009E           ; /*-----------------------------------------------------------------------
 009E           ; LCD_set_xy        : 设置LCD显示的起始位置
 009E           ; 
 009E           ; 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
 009E           ;                     LCD第一行显示寄存器地址:0x80-0x8F
 009E           ;                     LCD第一行显示寄存器地址:0xC0-0xCF
 009E           ; 编写日期          :2006年08月30日
 009E           ; 最后修改日期      :2006年08月30日
 009E           ; -----------------------------------------------------------------------*/
 009E           ; void LCD16xx_set_xy( unsigned char x, unsigned char y )
 009E           ; {
 009E                   .dbline 115
 009E           ;     unsigned char address;
 009E           ;     if (y == 0)
 009E AA20              tst R10
 00A0 19F4              brne L14
 00A2                   .dbline 116
 00A2           ;        address = 0x81 + x;
 00A2 462F              mov R20,R22
 00A4 4F57              subi R20,127    ; addi 129
 00A6 11C0              xjmp L15
 00A8           L14:
 00A8                   .dbline 117
 00A8           ;     else if(y == 1)
 00A8 8A2D              mov R24,R10
 00AA 8130              cpi R24,1
 00AC 19F4              brne L16
 00AE                   .dbline 118
 00AE           ;        address = 0xc1 + x;
 00AE 462F              mov R20,R22
 00B0 4F53              subi R20,63    ; addi 193
 00B2 0BC0              xjmp L17
 00B4           L16:
 00B4                   .dbline 119
 00B4           ;     else if(y == 2)
 00B4 8A2D              mov R24,R10
 00B6 8230              cpi R24,2
 00B8 19F4              brne L18
 00BA                   .dbline 120
 00BA           ;        address = 0x91 + x;
 00BA 462F              mov R20,R22
 00BC 4F56              subi R20,111    ; addi 145
 00BE 05C0              xjmp L19
 00C0           L18:
 00C0                   .dbline 121
 00C0           ;     else if(y == 3)
 00C0 8A2D              mov R24,R10
 00C2 8330              cpi R24,3
 00C4 11F4              brne L20
 00C6                   .dbline 122
 00C6           ;        address = 0xd1 + x;
 00C6 462F              mov R20,R22
 00C8 4F52              subi R20,47    ; addi 209
 00CA           L20:
 00CA           L19:
 00CA           L17:
 00CA           L15:
 00CA                   .dbline 123
 00CA           ;     LCD16xx_write_char( 1,address );
 00CA 242F              mov R18,R20
 00CC 01E0              ldi R16,1
 00CE BCDF              xcall _LCD16xx_write_char
 00D0                   .dbline -2
 00D0           L13:
 00D0 0E940000          xcall pop_gset3
 00D4                   .dbline 0 ; func end
 00D4 0895              ret
 00D6                   .dbsym r address 20 c
 00D6                   .dbsym r y 10 c
 00D6                   .dbsym r x 22 c
 00D6                   .dbend
 00D6                   .dbfunc e LCD16xx_write_string _LCD16xx_write_string fV
 00D6           ;              s -> R20,R21
 00D6           ;              Y -> R10
 00D6           ;              X -> R22
                        .even
 00D6           _LCD16xx_write_string::
 00D6 0E940000          xcall push_gset3
 00DA A22E              mov R10,R18
 00DC 602F              mov R22,R16
 00DE 4E81              ldd R20,y+6
 00E0 5F81              ldd R21,y+7
 00E2                   .dbline -1
 00E2                   .dbline 134
 00E2           ; }
 00E2           ; /*-----------------------------------------------------------------------
 00E2           ; LCD16xx_write_string  : 英文字符串显示函数
 00E2           ; 
 00E2           ; 输入参数:*s      :英文字符串指针;
 00E2           ;           X、Y    : 显示字符串的位置
 00E2           ; 编写日期          :2006年08月30日
 00E2           ; 最后修改日期      :2006年08月30日            
 00E2           ; -----------------------------------------------------------------------*/
 00E2           ; void LCD16xx_write_string(unsigned char X,unsigned char Y,unsigned char *s)
 00E2           ; {
 00E2                   .dbline 135
 00E2           ;     LCD16xx_set_xy( X, Y );
 00E2 2A2D              mov R18,R10
 00E4 062F              mov R16,R22
 00E6 D7DF              xcall _LCD16xx_set_xy
 00E8 06C0              xjmp L24
 00EA           L23:
 00EA                   .dbline 137
 00EA                   .dbline 138
 00EA FA01              movw R30,R20
 00EC 2081              ldd R18,z+0
 00EE 0027              clr R16
 00F0 ABDF              xcall _LCD16xx_write_char
 00F2                   .dbline 139
 00F2 4F5F              subi R20,255  ; offset = 1
 00F4 5F4F              sbci R21,255
 00F6                   .dbline 140
 00F6           L24:
 00F6                   .dbline 136
 00F6           ;     while (*s) 
 00F6 FA01              movw R30,R20
 00F8 2080              ldd R2,z+0
 00FA 2220              tst R2
 00FC B1F7              brne L23
 00FE                   .dbline -2
 00FE           L22:
 00FE 0E940000          xcall pop_gset3
 0102                   .dbline 0 ; func end
 0102 0895              ret
 0104                   .dbsym r s 20 pc
 0104                   .dbsym r Y 10 c
 0104                   .dbsym r X 22 c
 0104                   .dbend

⌨️ 快捷键说明

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