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

📄 1602b_lcd.lis

📁 本实验以常见的1602B字符型LCD模块为例
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00B2           X1:
 00B2                   .dbline 78
 00B2           ;       LCD_DATA_PORT |= data_temp&0xf0;
 00B2 CB01              movw R24,R22
 00B4 807F              andi R24,240
 00B6 9070              andi R25,0
 00B8 22B2              in R2,0x12
 00BA 3324              clr R3
 00BC 282A              or R2,R24
 00BE 392A              or R3,R25
 00C0 22BA              out 0x12,R2
 00C2 08C0              rjmp L7
 00C4           L6:
 00C4                   .dbline 80
 00C4           ;     else
 00C4           ;       LCD_DATA_PORT |= command_temp&0xf0;
 00C4 CA01              movw R24,R20
 00C6 807F              andi R24,240
 00C8 9070              andi R25,0
 00CA 22B2              in R2,0x12
 00CC 3324              clr R3
 00CE 282A              or R2,R24
 00D0 392A              or R3,R25
 00D2 22BA              out 0x12,R2
 00D4           L7:
 00D4                   .dbline 81
 00D4           ;     LCD_en_write();
 00D4 ADDF              rcall _LCD_en_write
 00D6                   .dbline 83
 00D6           ;    
 00D6           ;     LCD_RW_PORT |= LCD_RW;
 00D6 939A              sbi 0x12,3
 00D8                   .dbline 85
 00D8           ;   
 00D8           ;     LCD_RS_PORT ^= LCD_RS;    
 00D8 80E1              ldi R24,16
 00DA 25B2              in R2,0x15
 00DC 2826              eor R2,R24
 00DE 25BA              out 0x15,R2
 00E0                   .dbline -2
 00E0           L3:
 00E0 00D0              rcall pop_gset4
 00E2                   .dbline 0 ; func end
 00E2 0895              ret
 00E4                   .dbsym r data_temp 22 i
 00E4                   .dbsym r command_temp 20 i
 00E4                   .dbsym r data 12 i
 00E4                   .dbsym r command 10 i
 00E4                   .dbend
 00E4                   .dbfunc e LCD_wait_Ready _LCD_wait_Ready fV
                        .even
 00E4           _LCD_wait_Ready::
 00E4                   .dbline -1
 00E4                   .dbline 89
 00E4           ;   }
 00E4           ; 
 00E4           ; void LCD_wait_Ready(void)                  //等待LCD空闲
 00E4           ;   {
 00E4                   .dbline 90
 00E4           ;     LCD_DATA_DDR &= ~0x80;                 //PD7 I/O口方向设置为输入
 00E4 8F98              cbi 0x11,7
 00E6                   .dbline 92
 00E6           ;    
 00E6           ;     LCD_RW_PORT |= LCD_RW;                 //RW=1
 00E6 939A              sbi 0x12,3
 00E8                   .dbline 94
 00E8           ;    
 00E8           ;     LCD_RS_PORT &= ~LCD_RS;                //RS=0
 00E8 AC98              cbi 0x15,4
 00EA                   .dbline 96
 00EA           ;    
 00EA           ;     LCD_EN_PORT |= LCD_EN;                 //EN=1
 00EA AD9A              sbi 0x15,5
 00EC           L9:
 00EC                   .dbline 98
 00EC           L10:
 00EC                   .dbline 98
 00EC           ;    
 00EC           ;     while (!( LCD_DATA_PIN&0x80 ) == 0);   //RW=1,读PD7,为0表示空闲;
 00EC 8799              sbic 0x10,7
 00EE 03C0              rjmp L12
 00F0 01E0              ldi R16,1
 00F2 10E0              ldi R17,0
 00F4 02C0              rjmp L13
 00F6           L12:
 00F6 0027              clr R16
 00F8 1127              clr R17
 00FA           L13:
 00FA 0030              cpi R16,0
 00FC 0107              cpc R16,R17
 00FE B1F3              breq L9
 0100           X2:
 0100                   .dbline 100
 0100           ;    
 0100           ;     LCD_EN_PORT &= ~LCD_EN;                //EN=0
 0100 AD98              cbi 0x15,5
 0102                   .dbline 102
 0102           ;    
 0102           ;     LCD_DATA_DDR |= 0xf0;
 0102 81B3              in R24,0x11
 0104 806F              ori R24,240
 0106 81BB              out 0x11,R24
 0108                   .dbline -2
 0108           L8:
 0108                   .dbline 0 ; func end
 0108 0895              ret
 010A                   .dbend
 010A                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 010A           ;        address -> R20
 010A           ;              y -> R20
 010A           ;              x -> R22
                        .even
 010A           _LCD_set_xy::
 010A 00D0              rcall push_gset2
 010C 422F              mov R20,R18
 010E 602F              mov R22,R16
 0110                   .dbline -1
 0110                   .dbline 116
 0110           ;   }
 0110           ; 
 0110           ; /*-----------------------------------------------------------------------
 0110           ; LCD_set_xy        : 设置LCD显示的起始位置
 0110           ; 
 0110           ; 输入参数:x、y    : 显示字符串的位置,X:0-15,Y:0-1
 0110           ;                     LCD第一行显示寄存器地址:0X80-0X8F
 0110           ;                     LCD第一行显示寄存器地址:0XC0-0XCF
 0110           ; 
 0110           ; 编写日期          :2004-8-19 
 0110           ; 最后修改日期      :2004-8-19                 
 0110           ; -----------------------------------------------------------------------*/
 0110           ; void LCD_set_xy( unsigned char x, unsigned char y )
 0110           ;   {
 0110                   .dbline 118
 0110           ;     unsigned char address;
 0110           ;     if (y == 0) address = 0x80 + x;
 0110 4423              tst R20
 0112 19F4              brne L15
 0114                   .dbline 118
 0114 462F              mov R20,R22
 0116 4058              subi R20,128    ; addi 128
 0118 02C0              rjmp L16
 011A           L15:
 011A                   .dbline 120
 011A           ;     else 
 011A           ;        address = 0xc0 + x;
 011A 462F              mov R20,R22
 011C 4054              subi R20,64    ; addi 192
 011E           L16:
 011E                   .dbline 121
 011E           ;     LCD_write_char( address, 0 );
 011E 2227              clr R18
 0120 3327              clr R19
 0122 042F              mov R16,R20
 0124 1127              clr R17
 0126 8ADF              rcall _LCD_write_char
 0128                   .dbline -2
 0128           L14:
 0128 00D0              rcall pop_gset2
 012A                   .dbline 0 ; func end
 012A 0895              ret
 012C                   .dbsym r address 20 c
 012C                   .dbsym r y 20 c
 012C                   .dbsym r x 22 c
 012C                   .dbend
 012C                   .dbfunc e LCD_write_string _LCD_write_string fV
 012C           ;              s -> R20,R21
 012C           ;              Y -> R10
 012C           ;              X -> R22
                        .even
 012C           _LCD_write_string::
 012C 00D0              rcall push_gset3
 012E A22E              mov R10,R18
 0130 602F              mov R22,R16
 0132 4E81              ldd R20,y+6
 0134 5F81              ldd R21,y+7
 0136                   .dbline -1
 0136                   .dbline 133
 0136           ;   }
 0136           ; /*-----------------------------------------------------------------------
 0136           ; LCD_write_string  : 英文字符串显示函数
 0136           ; 
 0136           ; 输入参数:*s      :英文字符串指针;
 0136           ;           X、Y    : 显示字符串的位置
 0136           ; 
 0136           ; 编写日期          :2004-8-19 
 0136           ; 最后修改日期      :2004-8-19                 
 0136           ; -----------------------------------------------------------------------*/
 0136           ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
 0136           ;   {
 0136                   .dbline 134
 0136           ;     LCD_set_xy( X, Y );
 0136 2A2D              mov R18,R10
 0138 062F              mov R16,R22
 013A E7DF              rcall _LCD_set_xy
 013C 08C0              rjmp L19
 013E           L18:
 013E                   .dbline 137
 013E                   .dbline 138
 013E FA01              movw R30,R20
 0140 2081              ldd R18,z+0
 0142 3327              clr R19
 0144 0027              clr R16
 0146 1127              clr R17
 0148 79DF              rcall _LCD_write_char
 014A                   .dbline 139
 014A 4F5F              subi R20,255  ; offset = 1
 014C 5F4F              sbci R21,255
 014E                   .dbline 140
 014E           L19:
 014E                   .dbline 136
 014E           ;     
 014E           ;     while (*s) 
 014E FA01              movw R30,R20
 0150 2080              ldd R2,z+0
 0152 2220              tst R2
 0154 A1F7              brne L18
 0156                   .dbline -2
 0156           L17:
 0156 00D0              rcall pop_gset3
 0158                   .dbline 0 ; func end
 0158 0895              ret
 015A                   .dbsym r s 20 pc
 015A                   .dbsym r Y 10 c
 015A                   .dbsym r X 22 c
 015A                   .dbend

⌨️ 快捷键说明

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