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

📄 lcd1602.lis

📁 LCD1602液晶屏的四线驱动模块
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00AC 969A              sbi 0x12,6
 00AE                   .dbline 73
 00AE           ;       PORTB&=0x0f;
 00AE 88B3              in R24,0x18
 00B0 8F70              andi R24,15
 00B2 88BB              out 0x18,R24
 00B4                   .dbline 74
 00B4           ;       PORTB|= data&0xf0;
 00B4 842F              mov R24,R20
 00B6 807F              andi R24,240
 00B8 28B2              in R2,0x18
 00BA 282A              or R2,R24
 00BC 28BA              out 0x18,R2
 00BE                   .dbline 75
 00BE           ;       EN_CLR;
 00BE 9698              cbi 0x12,6
 00C0                   .dbline -2
 00C0           L17:
 00C0 0E940000          xcall pop_gset1
 00C4                   .dbline 0 ; func end
 00C4 0895              ret
 00C6                   .dbsym r data 20 c
 00C6                   .dbend
 00C6                   .dbfunc e LCD_clear _LCD_clear fV
                        .even
 00C6           _LCD_clear::
 00C6                   .dbline -1
 00C6                   .dbline 79
 00C6           ; }
 00C6           ; 
 00C6           ; /*显示屏清空显示*/
 00C6           ; void LCD_clear(void) {
 00C6                   .dbline 81
 00C6           ; 
 00C6           ;       LCD_write_com(0x01);
 00C6 01E0              ldi R16,1
 00C8 B5DF              xcall _LCD_write_com
 00CA                   .dbline 82
 00CA           ;       delay_ms(5);
 00CA 05E0              ldi R16,5
 00CC A4DF              xcall _delay_ms
 00CE                   .dbline -2
 00CE           L18:
 00CE                   .dbline 0 ; func end
 00CE 0895              ret
 00D0                   .dbend
 00D0                   .dbfunc e LCD_write_str _LCD_write_str fV
 00D0           ;              s -> R20,R21
 00D0           ;              y -> R10
 00D0           ;              x -> R22
                        .even
 00D0           _LCD_write_str::
 00D0 0E940000          xcall push_gset3
 00D4 A22E              mov R10,R18
 00D6 602F              mov R22,R16
 00D8 4E81              ldd R20,y+6
 00DA 5F81              ldd R21,y+7
 00DC                   .dbline -1
 00DC                   .dbline 86
 00DC           ; }
 00DC           ; 
 00DC           ; /*显示屏字符串写入函数*/
 00DC           ; void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) {
 00DC                   .dbline 88
 00DC           ;       
 00DC           ;     if (y == 0) {
 00DC AA20              tst R10
 00DE 21F4              brne L20
 00E0                   .dbline 88
 00E0                   .dbline 89
 00E0           ;       LCD_write_com(0x80 + x);
 00E0 062F              mov R16,R22
 00E2 0058              subi R16,128    ; addi 128
 00E4 A7DF              xcall _LCD_write_com
 00E6                   .dbline 90
 00E6           ;       }
 00E6 09C0              xjmp L23
 00E8           L20:
 00E8                   .dbline 91
 00E8           ;     else {
 00E8                   .dbline 92
 00E8           ;       LCD_write_com(0xC0 + x);
 00E8 062F              mov R16,R22
 00EA 0054              subi R16,64    ; addi 192
 00EC A3DF              xcall _LCD_write_com
 00EE                   .dbline 93
 00EE           ;       }
 00EE 05C0              xjmp L23
 00F0           L22:
 00F0                   .dbline 95
 00F0                   .dbline 96
 00F0 FA01              movw R30,R20
 00F2 0081              ldd R16,z+0
 00F4 C5DF              xcall _LCD_write_data
 00F6                   .dbline 97
 00F6 4F5F              subi R20,255  ; offset = 1
 00F8 5F4F              sbci R21,255
 00FA                   .dbline 98
 00FA           L23:
 00FA                   .dbline 95
 00FA           ;     
 00FA           ;     while (*s) {
 00FA FA01              movw R30,R20
 00FC 2080              ldd R2,z+0
 00FE 2220              tst R2
 0100 B9F7              brne L22
 0102                   .dbline -2
 0102           L19:
 0102 0E940000          xcall pop_gset3
 0106                   .dbline 0 ; func end
 0106 0895              ret
 0108                   .dbsym r s 20 pc
 0108                   .dbsym r y 10 c
 0108                   .dbsym r x 22 c
 0108                   .dbend
 0108                   .dbfunc e LCD_write_char _LCD_write_char fV
 0108           ;           data -> y+4
 0108           ;              y -> R22
 0108           ;              x -> R20
                        .even
 0108           _LCD_write_char::
 0108 0E940000          xcall push_gset2
 010C 622F              mov R22,R18
 010E 402F              mov R20,R16
 0110                   .dbline -1
 0110                   .dbline 102
 0110           ;       LCD_write_data( *s);
 0110           ;       s ++;
 0110           ;       }
 0110           ; }
 0110           ; 
 0110           ; /*显示屏单字符写入函数*/
 0110           ; void LCD_write_char(unsigned char x,unsigned char y,unsigned char data) {
 0110                   .dbline 104
 0110           ;       
 0110           ;     if (y == 0) {
 0110 6623              tst R22
 0112 21F4              brne L26
 0114                   .dbline 104
 0114                   .dbline 105
 0114           ;       LCD_write_com(0x80 + x);
 0114 042F              mov R16,R20
 0116 0058              subi R16,128    ; addi 128
 0118 8DDF              xcall _LCD_write_com
 011A                   .dbline 106
 011A           ;       }
 011A 03C0              xjmp L27
 011C           L26:
 011C                   .dbline 107
 011C           ;     else {
 011C                   .dbline 108
 011C           ;       LCD_write_com(0xC0 + x);
 011C 042F              mov R16,R20
 011E 0054              subi R16,64    ; addi 192
 0120 89DF              xcall _LCD_write_com
 0122                   .dbline 109
 0122           ;       }
 0122           L27:
 0122                   .dbline 111
 0122           ;     
 0122           ;     LCD_write_data( data);  
 0122 0C81              ldd R16,y+4
 0124 ADDF              xcall _LCD_write_data
 0126                   .dbline -2
 0126           L25:
 0126 0E940000          xcall pop_gset2
 012A                   .dbline 0 ; func end
 012A 0895              ret
 012C                   .dbsym l data 4 c
 012C                   .dbsym r y 22 c
 012C                   .dbsym r x 20 c
 012C                   .dbend
 012C                   .dbfunc e LCD_init _LCD_init fV
                        .even
 012C           _LCD_init::
 012C                   .dbline -1
 012C                   .dbline 115
 012C           ; }
 012C           ; 
 012C           ; /*显示屏初始化函数*/
 012C           ; void LCD_init(void) {
 012C                   .dbline 117
 012C           ;       
 012C           ;       DDRB = 0xFF;                                            /*I/O口方向设置*/
 012C 8FEF              ldi R24,255
 012E 87BB              out 0x17,R24
 0130                   .dbline 118
 0130           ;       DDRD |= (1 << PD3) | (1 << PD4) | (1 << PD6);
 0130 81B3              in R24,0x11
 0132 8865              ori R24,88
 0134 81BB              out 0x11,R24
 0136                   .dbline 119
 0136           ;       LCD_write_com(0x28);                            /*显示模式设置*/
 0136 08E2              ldi R16,40
 0138 7DDF              xcall _LCD_write_com
 013A                   .dbline 120
 013A           ;       delay_ms(15);
 013A 0FE0              ldi R16,15
 013C 6CDF              xcall _delay_ms
 013E                   .dbline 121
 013E           ;       LCD_write_com(0x28);
 013E 08E2              ldi R16,40
 0140 79DF              xcall _LCD_write_com
 0142                   .dbline 122
 0142           ;       delay_ms(5);
 0142 05E0              ldi R16,5
 0144 68DF              xcall _delay_ms
 0146                   .dbline 123
 0146           ;       LCD_write_com(0x28);
 0146 08E2              ldi R16,40
 0148 75DF              xcall _LCD_write_com
 014A                   .dbline 124
 014A           ;       delay_ms(5);
 014A 05E0              ldi R16,5
 014C 64DF              xcall _delay_ms
 014E                   .dbline 125
 014E           ;       LCD_write_com(0x28);
 014E 08E2              ldi R16,40
 0150 71DF              xcall _LCD_write_com
 0152                   .dbline 127
 0152           ;       
 0152           ;       LCD_write_com(0x08);                            /*显示关闭*/
 0152 08E0              ldi R16,8
 0154 6FDF              xcall _LCD_write_com
 0156                   .dbline 128
 0156           ;       LCD_write_com(0x01);                            /*显示清屏*/
 0156 01E0              ldi R16,1
 0158 6DDF              xcall _LCD_write_com
 015A                   .dbline 129
 015A           ;       LCD_write_com(0x06);                            /*显示光标移动设置*/
 015A 06E0              ldi R16,6
 015C 6BDF              xcall _LCD_write_com
 015E                   .dbline 130
 015E           ;       delay_ms(5);
 015E 05E0              ldi R16,5
 0160 5ADF              xcall _delay_ms
 0162                   .dbline 131
 0162           ;       LCD_write_com(0x0C);                            /*显示开及光标设置*/
 0162 0CE0              ldi R16,12
 0164 67DF              xcall _LCD_write_com
 0166                   .dbline -2
 0166           L28:
 0166                   .dbline 0 ; func end
 0166 0895              ret
 0168                   .dbend

⌨️ 快捷键说明

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