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

📄 lcd.lis

📁 基于AVR单片机的lm1602字符液晶模块显示的C代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0082 8F70              andi R24,15
 0084 82BB              out 0x12,R24
 0086                   .dbline 95
 0086           ;     LCD_DATA_PORT |= datal&0xf0;            //send low 4bit
 0086 842F              mov R24,R20
 0088 807F              andi R24,240
 008A 22B2              in R2,0x12
 008C 282A              or R2,R24
 008E 22BA              out 0x12,R2
 0090                   .dbline 96
 0090           ;     LCD16xx_en_write();
 0090 D5DF              xcall _LCD16xx_en_write
 0092                   .dbline -2
 0092                   .dbline 97
 0092           ; }
 0092           L4:
 0092 0E940000          xcall pop_gset3
 0096                   .dbline 0 ; func end
 0096 0895              ret
 0098                   .dbsym r datal 20 c
 0098                   .dbsym r datah 22 c
 0098                   .dbsym r data 20 c
 0098                   .dbsym r command 10 c
 0098                   .dbend
 0098                   .dbfunc e LCD16xx_wait_Ready _LCD16xx_wait_Ready fV
                        .even
 0098           _LCD16xx_wait_Ready::
 0098                   .dbline -1
 0098                   .dbline 100
 0098           ; 
 0098           ; void LCD16xx_wait_Ready(void)              //等待LCD空闲
 0098           ; {
 0098                   .dbline 101
 0098           ;     LCD_DATA_DDR &= ~0x80;                 //PD7 I/O口方向设置为输入
 0098 8F98              cbi 0x11,7
 009A                   .dbline 102
 009A           ;     RW_H;                                  //RW=1
 009A D99A              sbi 0x1b,1
 009C                   .dbline 103
 009C           ;     RS_L;                                  //RS=0
 009C DA98              cbi 0x1b,2
 009E                   .dbline 104
 009E           ;     E_H;                                   //EN=1
 009E D89A              sbi 0x1b,0
 00A0           L8:
 00A0                   .dbline 105
 00A0           L9:
 00A0                   .dbline 105
 00A0           ;     while (!( LCD_DATA_PIN&0x80 ) == 0);   //RW=1,读PD7,为0表示空闲;
 00A0 8799              sbic 0x10,7
 00A2 03C0              rjmp L11
 00A4 01E0              ldi R16,1
 00A6 10E0              ldi R17,0
 00A8 02C0              xjmp L12
 00AA           L11:
 00AA 0027              clr R16
 00AC 1127              clr R17
 00AE           L12:
 00AE 0030              cpi R16,0
 00B0 0107              cpc R16,R17
 00B2 B1F3              breq L8
 00B4           X0:
 00B4                   .dbline 106
 00B4           ;     E_L;                                   //EN=0
 00B4 D898              cbi 0x1b,0
 00B6                   .dbline 107
 00B6           ;     LCD_DATA_DDR |= LCD_DATA;
 00B6 81B3              in R24,0x11
 00B8 806F              ori R24,240
 00BA 81BB              out 0x11,R24
 00BC                   .dbline -2
 00BC                   .dbline 108
 00BC           ; }
 00BC           L7:
 00BC                   .dbline 0 ; func end
 00BC 0895              ret
 00BE                   .dbend
 00BE                   .dbfunc e LCD16xx_set_xy _LCD16xx_set_xy fV
 00BE           ;        address -> R20
 00BE           ;              y -> R10
 00BE           ;              x -> R22
                        .even
 00BE           _LCD16xx_set_xy::
 00BE 0E940000          xcall push_gset3
 00C2 A22E              mov R10,R18
 00C4 602F              mov R22,R16
 00C6                   .dbline -1
 00C6                   .dbline 120
 00C6           ; 
 00C6           ; /*-----------------------------------------------------------------------
 00C6           ; LCD_set_xy        : 设置LCD显示的起始位置
 00C6           ; 
 00C6           ; 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
 00C6           ;                     LCD第一行显示寄存器地址:0x80-0x8F
 00C6           ;                     LCD第一行显示寄存器地址:0xC0-0xCF
 00C6           ; 编写日期          :2006年08月30日
 00C6           ; 最后修改日期      :2006年08月30日
 00C6           ; -----------------------------------------------------------------------*/
 00C6           ; void LCD16xx_set_xy( unsigned char x, unsigned char y )
 00C6           ; {
 00C6                   .dbline 122
 00C6           ;     unsigned char address;
 00C6           ;     if (y == 0)
 00C6 AA20              tst R10
 00C8 19F4              brne L14
 00CA                   .dbline 123
 00CA           ;        address = 0x80 + x;
 00CA 462F              mov R20,R22
 00CC 4058              subi R20,128    ; addi 128
 00CE 0EC0              xjmp L15
 00D0           L14:
 00D0                   .dbline 124
 00D0           ;     else if(y == 1)
 00D0 8A2D              mov R24,R10
 00D2 8130              cpi R24,1
 00D4 19F4              brne L16
 00D6                   .dbline 125
 00D6           ;        address = 0xc0 + x;
 00D6 462F              mov R20,R22
 00D8 4054              subi R20,64    ; addi 192
 00DA 08C0              xjmp L17
 00DC           L16:
 00DC                   .dbline 126
 00DC           ;     else if(y == 2)
 00DC 8A2D              mov R24,R10
 00DE 8230              cpi R24,2
 00E0 19F4              brne L18
 00E2                   .dbline 127
 00E2           ;        address = 0x90 + x;
 00E2 462F              mov R20,R22
 00E4 4057              subi R20,112    ; addi 144
 00E6 02C0              xjmp L19
 00E8           L18:
 00E8                   .dbline 129
 00E8           ;     else
 00E8           ;        address = 0xd0 + x;
 00E8 462F              mov R20,R22
 00EA 4053              subi R20,48    ; addi 208
 00EC           L19:
 00EC           L17:
 00EC           L15:
 00EC                   .dbline 130
 00EC           ;     LCD16xx_write_char( 1,address );
 00EC 242F              mov R18,R20
 00EE 01E0              ldi R16,1
 00F0 AFDF              xcall _LCD16xx_write_char
 00F2                   .dbline -2
 00F2                   .dbline 131
 00F2           ; }
 00F2           L13:
 00F2 0E940000          xcall pop_gset3
 00F6                   .dbline 0 ; func end
 00F6 0895              ret
 00F8                   .dbsym r address 20 c
 00F8                   .dbsym r y 10 c
 00F8                   .dbsym r x 22 c
 00F8                   .dbend
 00F8                   .dbfunc e LCD16xx_write_string _LCD16xx_write_string fV
 00F8           ;              s -> R20,R21
 00F8           ;              Y -> R10
 00F8           ;              X -> R22
                        .even
 00F8           _LCD16xx_write_string::
 00F8 0E940000          xcall push_gset3
 00FC A22E              mov R10,R18
 00FE 602F              mov R22,R16
 0100 4E81              ldd R20,y+6
 0102 5F81              ldd R21,y+7
 0104                   .dbline -1
 0104                   .dbline 141
 0104           ; /*-----------------------------------------------------------------------
 0104           ; LCD16xx_write_string  : 英文字符串显示函数
 0104           ; 
 0104           ; 输入参数:*s      :英文字符串指针;
 0104           ;           X、Y    : 显示字符串的位置
 0104           ; 编写日期          :2006年08月30日
 0104           ; 最后修改日期      :2006年08月30日            
 0104           ; -----------------------------------------------------------------------*/
 0104           ; void LCD16xx_write_string(unsigned char X,unsigned char Y,unsigned char *s)
 0104           ; {
 0104                   .dbline 142
 0104           ;     LCD16xx_set_xy( X, Y );
 0104 2A2D              mov R18,R10
 0106 062F              mov R16,R22
 0108 DADF              xcall _LCD16xx_set_xy
 010A 0AC0              xjmp L22
 010C           L21:
 010C                   .dbline 144
 010C                   .dbline 145
 010C 05E0              ldi R16,5
 010E 10E0              ldi R17,0
 0110 0E940000          xcall _delay_nus
 0114                   .dbline 146
 0114 FA01              movw R30,R20
 0116 2081              ldd R18,z+0
 0118 0027              clr R16
 011A 9ADF              xcall _LCD16xx_write_char
 011C                   .dbline 147
 011C 4F5F              subi R20,255  ; offset = 1
 011E 5F4F              sbci R21,255
 0120                   .dbline 148
 0120           L22:
 0120                   .dbline 143
 0120           ;     while (*s) 
 0120 FA01              movw R30,R20
 0122 2080              ldd R2,z+0
 0124 2220              tst R2
 0126 91F7              brne L21
 0128                   .dbline -2
 0128                   .dbline 149
 0128           ;     {
 0128           ;         delay_nus(5);
 0128           ;         LCD16xx_write_char( 0, *s );
 0128           ;         s++;
 0128           ;     }
 0128           ; }
 0128           L20:
 0128 0E940000          xcall pop_gset3
 012C                   .dbline 0 ; func end
 012C 0895              ret
 012E                   .dbsym r s 20 pc
 012E                   .dbsym r Y 10 c
 012E                   .dbsym r X 22 c
 012E                   .dbend

⌨️ 快捷键说明

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