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

📄 lcd.lis

📁 atmega16与lcd1604的的代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 008C                   .dbline 91
 008C           ;       LCD_DATA_PORT &=0x0F;
 008C 8BB3              in R24,0x1b
 008E 8F70              andi R24,15
 0090 8BBB              out 0x1b,R24
 0092                   .dbline 92
 0092           ;     LCD_DATA_PORT |= data&0xf0;            
 0092 842F              mov R24,R20
 0094 807F              andi R24,240
 0096 2BB2              in R2,0x1b
 0098 282A              or R2,R24
 009A 2BBA              out 0x1b,R2
 009C                   .dbline 93
 009C           ;     LCD16xx_en_write();
 009C D2DF              xcall _LCD16xx_en_write
 009E                   .dbline -2
 009E           L4:
 009E 0E940000          xcall pop_gset2
 00A2                   .dbline 0 ; func end
 00A2 0895              ret
 00A4                   .dbsym r data 20 c
 00A4                   .dbsym r command 22 c
 00A4                   .dbend
 00A4                   .dbfunc e LCD16xx_set_xy _LCD16xx_set_xy fV
 00A4           ;        address -> R20
 00A4           ;              y -> R10
 00A4           ;              x -> R22
                        .even
 00A4           _LCD16xx_set_xy::
 00A4 0E940000          xcall push_gset3
 00A8 A22E              mov R10,R18
 00AA 602F              mov R22,R16
 00AC                   .dbline -1
 00AC                   .dbline 118
 00AC           ;       
 00AC           ; }
 00AC           ; /*
 00AC           ; void LCD16xx_wait_Ready(void)              //等待LCD空闲
 00AC           ; {
 00AC           ;     LCD_DATA_DDR &= ~0x80;                 //PA7 I/O口方向设置为输入
 00AC           ;     RW_H;                                  //RW=1
 00AC           ;     RS_L;                                  //RS=0
 00AC           ;     E_H;                                   //EN=1
 00AC           ;     while (!( LCD_DATA_PIN&0x80 ) == 0);   //RW=1,读PA7,为0表示空闲;
 00AC           ;     E_L;                                   //EN=0
 00AC           ;     LCD_DATA_DDR |= LCD_DATA;
 00AC           ; }
 00AC           ; */
 00AC           ; /*-----------------------------------------------------------------------
 00AC           ; LCD_set_xy        : 设置LCD显示的起始位置
 00AC           ; 
 00AC           ; 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
 00AC           ;                     LCD第一行显示寄存器地址:0x80-0x8F
 00AC           ;                     LCD第一行显示寄存器地址:0xC0-0xCF
 00AC           ; 编写日期          :2008年04月11日
 00AC           ; 最后修改日期      :2008年04月11日
 00AC           ; -----------------------------------------------------------------------*/
 00AC           ; void LCD16xx_set_xy( unsigned char x, unsigned char y )
 00AC           ; {
 00AC                   .dbline 120
 00AC           ;     unsigned char address;
 00AC           ;     if (y == 0)
 00AC AA20              tst R10
 00AE 19F4              brne L8
 00B0                   .dbline 121
 00B0           ;        address = 0x80 + x;
 00B0 462F              mov R20,R22
 00B2 4058              subi R20,128    ; addi 128
 00B4 0EC0              xjmp L9
 00B6           L8:
 00B6                   .dbline 122
 00B6           ;     else if(y == 1)
 00B6 8A2D              mov R24,R10
 00B8 8130              cpi R24,1
 00BA 19F4              brne L10
 00BC                   .dbline 123
 00BC           ;        address = 0xc0 + x;
 00BC 462F              mov R20,R22
 00BE 4054              subi R20,64    ; addi 192
 00C0 08C0              xjmp L11
 00C2           L10:
 00C2                   .dbline 124
 00C2           ;     else if(y == 2)
 00C2 8A2D              mov R24,R10
 00C4 8230              cpi R24,2
 00C6 19F4              brne L12
 00C8                   .dbline 125
 00C8           ;        address = 0x90 + x;
 00C8 462F              mov R20,R22
 00CA 4057              subi R20,112    ; addi 144
 00CC 02C0              xjmp L13
 00CE           L12:
 00CE                   .dbline 127
 00CE           ;     else
 00CE           ;        address = 0xd0 + x;
 00CE 462F              mov R20,R22
 00D0 4053              subi R20,48    ; addi 208
 00D2           L13:
 00D2           L11:
 00D2           L9:
 00D2                   .dbline 128
 00D2           ;     LCD16xx_write_char( 1,address );
 00D2 242F              mov R18,R20
 00D4 01E0              ldi R16,1
 00D6 C0DF              xcall _LCD16xx_write_char
 00D8                   .dbline -2
 00D8           L7:
 00D8 0E940000          xcall pop_gset3
 00DC                   .dbline 0 ; func end
 00DC 0895              ret
 00DE                   .dbsym r address 20 c
 00DE                   .dbsym r y 10 c
 00DE                   .dbsym r x 22 c
 00DE                   .dbend
 00DE                   .dbfunc e LCD16xx_write_string _LCD16xx_write_string fV
 00DE           ;              s -> R20,R21
 00DE           ;              Y -> R10
 00DE           ;              X -> R22
                        .even
 00DE           _LCD16xx_write_string::
 00DE 0E940000          xcall push_gset3
 00E2 A22E              mov R10,R18
 00E4 602F              mov R22,R16
 00E6 4E81              ldd R20,y+6
 00E8 5F81              ldd R21,y+7
 00EA                   .dbline -1
 00EA                   .dbline 139
 00EA           ; }
 00EA           ; /*-----------------------------------------------------------------------
 00EA           ; LCD16xx_write_string  : 英文字符串显示函数
 00EA           ; 
 00EA           ; 输入参数:*s      :英文字符串指针;
 00EA           ;           X、Y    : 显示字符串的位置
 00EA           ; 编写日期          :2008年04月11日
 00EA           ; 最后修改日期      :2008年04月11日            
 00EA           ; -----------------------------------------------------------------------*/
 00EA           ; void LCD16xx_write_string(unsigned char X,unsigned char Y,unsigned char *s)
 00EA           ; {
 00EA                   .dbline 140
 00EA           ;     LCD16xx_set_xy( X, Y );
 00EA 2A2D              mov R18,R10
 00EC 062F              mov R16,R22
 00EE DADF              xcall _LCD16xx_set_xy
 00F0 0AC0              xjmp L16
 00F2           L15:
 00F2                   .dbline 142
 00F2                   .dbline 143
 00F2 05E0              ldi R16,5
 00F4 10E0              ldi R17,0
 00F6 0E940000          xcall _delay_nus
 00FA                   .dbline 144
 00FA FA01              movw R30,R20
 00FC 2081              ldd R18,z+0
 00FE 0027              clr R16
 0100 ABDF              xcall _LCD16xx_write_char
 0102                   .dbline 145
 0102 4F5F              subi R20,255  ; offset = 1
 0104 5F4F              sbci R21,255
 0106                   .dbline 146
 0106           L16:
 0106                   .dbline 141
 0106           ;     while (*s) 
 0106 FA01              movw R30,R20
 0108 2080              ldd R2,z+0
 010A 2220              tst R2
 010C 91F7              brne L15
 010E                   .dbline -2
 010E           L14:
 010E 0E940000          xcall pop_gset3
 0112                   .dbline 0 ; func end
 0112 0895              ret
 0114                   .dbsym r s 20 pc
 0114                   .dbsym r Y 10 c
 0114                   .dbsym r X 22 c
 0114                   .dbend
 0114                   .dbfunc e LCD16xx_dispaly_char _LCD16xx_dispaly_char fV
 0114           ;            key -> y+4
 0114           ;              Y -> R22
 0114           ;              X -> R20
                        .even
 0114           _LCD16xx_dispaly_char::
 0114 0E940000          xcall push_gset2
 0118 622F              mov R22,R18
 011A 402F              mov R20,R16
 011C                   .dbline -1
 011C                   .dbline 152
 011C           ;     {
 011C           ;         delay_nus(5);
 011C           ;         LCD16xx_write_char( 0, *s );
 011C           ;         s++;
 011C           ;     }
 011C           ; }
 011C           ; 
 011C           ; 
 011C           ; void LCD16xx_dispaly_char(unsigned char X,unsigned char Y,unsigned char key)
 011C           ;  
 011C           ;   {
 011C                   .dbline 153
 011C           ;     LCD16xx_set_xy( X, Y );
 011C 262F              mov R18,R22
 011E 042F              mov R16,R20
 0120 C1DF              xcall _LCD16xx_set_xy
 0122                   .dbline 154
 0122           ;       LCD16xx_write_char(0,key);
 0122 2C81              ldd R18,y+4
 0124 0027              clr R16
 0126 98DF              xcall _LCD16xx_write_char
 0128                   .dbline -2
 0128           L18:
 0128 0E940000          xcall pop_gset2
 012C                   .dbline 0 ; func end
 012C 0895              ret
 012E                   .dbsym l key 4 c
 012E                   .dbsym r Y 22 c
 012E                   .dbsym r X 20 c
 012E                   .dbend

⌨️ 快捷键说明

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