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

📄 lcd1602.lis

📁 meg16 的所有功能实例
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00B4 7070              andi R23,0
 00B6                   .dbline 103
 00B6           ;  if(x) //第二行
 00B6 6030              cpi R22,0
 00B8 6707              cpc R22,R23
 00BA 09F0              breq L20
 00BC           X2:
 00BC                   .dbline 104
 00BC           ;   tmp|=0x40;
 00BC 4064              ori R20,64
 00BE           L20:
 00BE                   .dbline 105
 00BE           ;  tmp|=0x80;
 00BE 4068              ori R20,128
 00C0                   .dbline 106
 00C0           ;  lcd_write_cmd(tmp,0);
 00C0 2227              clr R18
 00C2 042F              mov R16,R20
 00C4 D8DF              xcall _lcd_write_cmd
 00C6                   .dbline -2
 00C6           L19:
 00C6 0E940000          xcall pop_gset2
 00CA                   .dbline 0 ; func end
 00CA 0895              ret
 00CC                   .dbsym r tmp 20 I
 00CC                   .dbsym r y 20 I
 00CC                   .dbsym r x 22 I
 00CC                   .dbend
 00CC                   .dbfunc e lcd_write_byte _lcd_write_byte fV
 00CC           ;           byte -> R20
                        .even
 00CC           _lcd_write_byte::
 00CC 0E940000          xcall push_gset1
 00D0 402F              mov R20,R16
 00D2                   .dbline -1
 00D2                   .dbline 110
 00D2           ; }
 00D2           ; 
 00D2           ; void lcd_write_byte(char byte) //写字节
 00D2           ; {
 00D2                   .dbline 111
 00D2           ;  lcd_wait_enable();
 00D2 B7DF              xcall _lcd_wait_enable
 00D4                   .dbline 112
 00D4           ;  set_rs();
 00D4 AB9A              sbi 0x15,3
 00D6                   .dbline 113
 00D6           ;  clr_rw();
 00D6 AC98              cbi 0x15,4
 00D8                   .dbline 114
 00D8           ;  delay_nus(1);
 00D8 01E0              ldi R16,1
 00DA 10E0              ldi R17,0
 00DC 92DF              xcall _delay_nus
 00DE                   .dbline 115
 00DE           ;  Data_PORT=byte;
 00DE 4BBB              out 0x1b,R20
 00E0                   .dbline 116
 00E0           ;  set_en();
 00E0 AD9A              sbi 0x15,5
 00E2                   .dbline 117
 00E2           ;  delay_nus(2);
 00E2 02E0              ldi R16,2
 00E4 10E0              ldi R17,0
 00E6 8DDF              xcall _delay_nus
 00E8                   .dbline 118
 00E8           ;  clr_en();
 00E8 AD98              cbi 0x15,5
 00EA                   .dbline -2
 00EA           L22:
 00EA 0E940000          xcall pop_gset1
 00EE                   .dbline 0 ; func end
 00EE 0895              ret
 00F0                   .dbsym r byte 20 c
 00F0                   .dbend
 00F0                   .dbfunc e lcd_disp_char _lcd_disp_char fV
 00F0           ;             ch -> y+4
 00F0           ;              y -> R22,R23
 00F0           ;              x -> R20,R21
                        .even
 00F0           _lcd_disp_char::
 00F0 0E940000          xcall push_gset2
 00F4 B901              movw R22,R18
 00F6 A801              movw R20,R16
 00F8                   .dbline -1
 00F8                   .dbline 122
 00F8           ; }
 00F8           ; 
 00F8           ; void lcd_disp_char(int x,int y,char ch) //写字串
 00F8           ; {
 00F8                   .dbline 123
 00F8           ;  lcd_set_xy(x,y);
 00F8 9B01              movw R18,R22
 00FA 8A01              movw R16,R20
 00FC D4DF              xcall _lcd_set_xy
 00FE                   .dbline 124
 00FE           ;  lcd_write_byte(ch);
 00FE 0C81              ldd R16,y+4
 0100 E5DF              xcall _lcd_write_byte
 0102                   .dbline -2
 0102           L23:
 0102 0E940000          xcall pop_gset2
 0106                   .dbline 0 ; func end
 0106 0895              ret
 0108                   .dbsym l ch 4 c
 0108                   .dbsym r y 22 I
 0108                   .dbsym r x 20 I
 0108                   .dbend
 0108                   .dbfunc e lcd_disp_string _lcd_disp_string fV
 0108           ;              i -> R20
 0108           ;              s -> R22,R23
 0108           ;              y -> R10,R11
 0108           ;              x -> R12,R13
                        .even
 0108           _lcd_disp_string::
 0108 0E940000          xcall push_gset4
 010C 5901              movw R10,R18
 010E 6801              movw R12,R16
 0110 2197              sbiw R28,1
 0112 6985              ldd R22,y+9
 0114 7A85              ldd R23,y+10
 0116                   .dbline -1
 0116                   .dbline 128
 0116           ; }
 0116           ; 
 0116           ; void lcd_disp_string(int x,int y,char *s) //写字串,支持换行
 0116           ; {      
 0116                   .dbline 129
 0116           ;       unsigned char i=0;
 0116 4427              clr R20
 0118 2DC0              xjmp L26
 011A           L25:
 011A                   .dbline 131
 011A           ;     while (*s) 
 011A           ;       {
 011A                   .dbline 132
 011A           ;          if(y+i<16)
 011A 242E              mov R2,R20
 011C 3324              clr R3
 011E C501              movw R24,R10
 0120 820D              add R24,R2
 0122 931D              adc R25,R3
 0124 8031              cpi R24,16
 0126 E0E0              ldi R30,0
 0128 9E07              cpc R25,R30
 012A 74F4              brge L28
 012C                   .dbline 133
 012C           ;          {
 012C                   .dbline 134
 012C           ;               lcd_disp_char(x,y+i,*s);
 012C FB01              movw R30,R22
 012E 2080              ldd R2,z+0
 0130 2882              std y+0,R2
 0132 242E              mov R2,R20
 0134 3324              clr R3
 0136 9501              movw R18,R10
 0138 220D              add R18,R2
 013A 331D              adc R19,R3
 013C 8601              movw R16,R12
 013E D8DF              xcall _lcd_disp_char
 0140                   .dbline 135
 0140           ;               s++;
 0140 6F5F              subi R22,255  ; offset = 1
 0142 7F4F              sbci R23,255
 0144                   .dbline 136
 0144           ;               i++;
 0144 4395              inc R20
 0146                   .dbline 137
 0146           ;          }
 0146 16C0              xjmp L29
 0148           L28:
 0148                   .dbline 139
 0148           ;          else
 0148           ;          {
 0148                   .dbline 140
 0148           ;           delay_nus(50); //换行至少延时20us,否则会造成显示不正常
 0148 02E3              ldi R16,50
 014A 10E0              ldi R17,0
 014C 5ADF              xcall _delay_nus
 014E                   .dbline 141
 014E           ;           lcd_disp_char(x^1,y+i-16,*s);
 014E FB01              movw R30,R22
 0150 2080              ldd R2,z+0
 0152 2882              std y+0,R2
 0154 242E              mov R2,R20
 0156 3324              clr R3
 0158 9501              movw R18,R10
 015A 220D              add R18,R2
 015C 331D              adc R19,R3
 015E 2051              subi R18,16
 0160 3040              sbci R19,0
 0162 81E0              ldi R24,1
 0164 90E0              ldi R25,0
 0166 8601              movw R16,R12
 0168 0827              eor R16,R24
 016A 1927              eor R17,R25
 016C C1DF              xcall _lcd_disp_char
 016E                   .dbline 142
 016E           ;               s++;
 016E 6F5F              subi R22,255  ; offset = 1
 0170 7F4F              sbci R23,255
 0172                   .dbline 143
 0172           ;               i++;
 0172 4395              inc R20
 0174                   .dbline 144
 0174           ;          }
 0174           L29:
 0174                   .dbline 145
 0174           L26:
 0174                   .dbline 130
 0174 FB01              movw R30,R22
 0176 2080              ldd R2,z+0
 0178 2220              tst R2
 017A 09F0              breq X3
 017C CECF              xjmp L25
 017E           X3:
 017E                   .dbline -2
 017E           L24:
 017E 2196              adiw R28,1
 0180 0E940000          xcall pop_gset4
 0184                   .dbline 0 ; func end
 0184 0895              ret
 0186                   .dbsym r i 20 c
 0186                   .dbsym r s 22 pc
 0186                   .dbsym r y 10 I
 0186                   .dbsym r x 12 I
 0186                   .dbend
 0186                   .dbfunc e lcd_init _lcd_init fV
                        .even
 0186           _lcd_init::
 0186                   .dbline -1
 0186                   .dbline 149
 0186           ;       }
 0186           ; }
 0186           ; 
 0186           ; void lcd_init(void) //初始化液晶
 0186           ; {
 0186                   .dbline 150
 0186           ;  Open_Ctrl();
 0186 88EB              ldi R24,184
 0188 84BB              out 0x14,R24
 018A                   .dbline 151
 018A           ;  Data_out();
 018A 8FEF              ldi R24,255
 018C 8ABB              out 0x1a,R24
 018E                   .dbline 152
 018E           ;  lcd_write_cmd(0x38,0); //显示模式设置(不测试忙信号)共三次
 018E 2227              clr R18
 0190 08E3              ldi R16,56
 0192 71DF              xcall _lcd_write_cmd
 0194                   .dbline 153
 0194           ;  delay_nms(5);
 0194 05E0              ldi R16,5
 0196 10E0              ldi R17,0
 0198 44DF              xcall _delay_nms
 019A                   .dbline 154
 019A           ;  lcd_write_cmd(0x38,0);
 019A 2227              clr R18
 019C 08E3              ldi R16,56
 019E 6BDF              xcall _lcd_write_cmd
 01A0                   .dbline 155
 01A0           ;  delay_nms(5);
 01A0 05E0              ldi R16,5
 01A2 10E0              ldi R17,0
 01A4 3EDF              xcall _delay_nms
 01A6                   .dbline 156
 01A6           ;  lcd_write_cmd(0x38,0);
 01A6 2227              clr R18
 01A8 08E3              ldi R16,56
 01AA 65DF              xcall _lcd_write_cmd
 01AC                   .dbline 157
 01AC           ;  delay_nms(5);
 01AC 05E0              ldi R16,5
 01AE 10E0              ldi R17,0
 01B0 38DF              xcall _delay_nms
 01B2                   .dbline 159
 01B2           ; 
 01B2           ;  lcd_write_cmd(0x38,1); //8位数据口,2行显示,5*7点阵
 01B2 21E0              ldi R18,1
 01B4 08E3              ldi R16,56
 01B6 5FDF              xcall _lcd_write_cmd
 01B8                   .dbline 160
 01B8           ;  lcd_write_cmd(0x08,1); //显示关
 01B8 21E0              ldi R18,1
 01BA 08E0              ldi R16,8
 01BC 5CDF              xcall _lcd_write_cmd
 01BE                   .dbline 161
 01BE           ;  lcd_write_cmd(0x01,1); //清屏
 01BE 21E0              ldi R18,1
 01C0 01E0              ldi R16,1
 01C2 59DF              xcall _lcd_write_cmd
 01C4                   .dbline 162
 01C4           ;  lcd_write_cmd(0x06,1); //数据读,写后AC自增1,画面不动
 01C4 21E0              ldi R18,1
 01C6 06E0              ldi R16,6
 01C8 56DF              xcall _lcd_write_cmd
 01CA                   .dbline 163
 01CA           ;  lcd_write_cmd(0x0C,1); //显示开
 01CA 21E0              ldi R18,1
 01CC 0CE0              ldi R16,12
 01CE 53DF              xcall _lcd_write_cmd
 01D0                   .dbline -2
 01D0           L30:
 01D0                   .dbline 0 ; func end
 01D0 0895              ret
 01D2                   .dbend

⌨️ 快捷键说明

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