📄 1602b_lcd.lis
字号:
0128 L12:
0128 0027 clr R16
012A 1127 clr R17
012C L13:
012C 0030 cpi R16,0
012E 0107 cpc R16,R17
0130 B1F3 breq L9
0132 X2:
0132 .dbline 88
0132 ; LCD_EN_PORT &= ~LCD_EN; //EN=0
0132 C398 cbi 0x18,3
0134 .dbline 89
0134 ; LCD_DATA_DDR |= 0xf0;
0134 87B3 in R24,0x17
0136 806F ori R24,240
0138 87BB out 0x17,R24
013A .dbline -2
013A .dbline 90
013A ; }
013A L8:
013A .dbline 0 ; func end
013A 0895 ret
013C .dbend
013C .dbfunc e LCD_set_xy _LCD_set_xy fV
013C ; address -> R20
013C ; y -> R20
013C ; x -> R22
.even
013C _LCD_set_xy::
013C 00D0 rcall push_gset2
013E 422F mov R20,R18
0140 602F mov R22,R16
0142 .dbline -1
0142 .dbline 99
0142 ;
0142 ; /**********************************************************
0142 ; /* LCD_set_xy : 设置LCD显示的起始位置
0142 ; /* 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-1
0142 ; LCD第一行显示寄存器地址:0X80-0X8F
0142 ; LCD第一行显示寄存器地址:0XC0-0XCF
0142 ; ***********************************************************/
0142 ; void LCD_set_xy( unsigned char x, unsigned char y )
0142 ; {
0142 .dbline 101
0142 ; unsigned char address;
0142 ; if (y == 0) address = 0x80 + x;
0142 4423 tst R20
0144 19F4 brne L15
0146 .dbline 101
0146 462F mov R20,R22
0148 4058 subi R20,128 ; addi 128
014A 02C0 rjmp L16
014C L15:
014C .dbline 103
014C ; else
014C ; address = 0xC0 + x;
014C 462F mov R20,R22
014E 4054 subi R20,64 ; addi 192
0150 L16:
0150 .dbline 104
0150 ; LCD_write_char( address, 0 );
0150 2227 clr R18
0152 3327 clr R19
0154 042F mov R16,R20
0156 1127 clr R17
0158 82DF rcall _LCD_write_char
015A .dbline -2
015A .dbline 105
015A ; }
015A L14:
015A 00D0 rcall pop_gset2
015C .dbline 0 ; func end
015C 0895 ret
015E .dbsym r address 20 c
015E .dbsym r y 20 c
015E .dbsym r x 22 c
015E .dbend
015E .dbfunc e LCD_write_string _LCD_write_string fV
015E ; s -> R20,R21
015E ; Y -> R10
015E ; X -> R22
.even
015E _LCD_write_string::
015E 00D0 rcall push_gset3
0160 A22E mov R10,R18
0162 602F mov R22,R16
0164 4E81 ldd R20,y+6
0166 5F81 ldd R21,y+7
0168 .dbline -1
0168 .dbline 112
0168 ; /**********************************************************
0168 ; /* LCD_write_string : 英文字符串显示函数
0168 ; /* 输入参数:*s :英文字符串指针;
0168 ; /* X、Y : 显示字符串的位置
0168 ; ***********************************************************/
0168 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
0168 ; {
0168 .dbline 113
0168 ; LCD_set_xy( X, Y );
0168 2A2D mov R18,R10
016A 062F mov R16,R22
016C E7DF rcall _LCD_set_xy
016E 09C0 rjmp L19
0170 L18:
0170 .dbline 115
0170 .dbline 116
0170 E42F mov R30,R20
0172 F52F mov R31,R21
0174 2081 ldd R18,z+0
0176 3327 clr R19
0178 0027 clr R16
017A 1127 clr R17
017C 70DF rcall _LCD_write_char
017E .dbline 117
017E 4F5F subi R20,255 ; offset = 1
0180 5F4F sbci R21,255
0182 .dbline 118
0182 L19:
0182 .dbline 114
0182 ; while (*s)
0182 E42F mov R30,R20
0184 F52F mov R31,R21
0186 2080 ldd R2,z+0
0188 2220 tst R2
018A 91F7 brne L18
018C .dbline -2
018C .dbline 119
018C ; {
018C ; LCD_write_char( 0, *s );
018C ; s ++;
018C ; }
018C ; }
018C L17:
018C 00D0 rcall pop_gset3
018E .dbline 0 ; func end
018E 0895 ret
0190 .dbsym r s 20 pc
0190 .dbsym r Y 10 c
0190 .dbsym r X 22 c
0190 .dbend
0190 .dbfunc e LCD_write _LCD_write fV
0190 ; data -> y+4
0190 ; Y -> R22
0190 ; X -> R20
.even
0190 _LCD_write::
0190 00D0 rcall push_gset2
0192 622F mov R22,R18
0194 402F mov R20,R16
0196 .dbline -1
0196 .dbline 126
0196 ; /**********************************************************
0196 ; /* LCD_write : 英文字符显示函数
0196 ; /* 输入参数:data :英文字符
0196 ; /* X、Y : 显示字符的位置
0196 ; ***********************************************************/
0196 ; void LCD_write(unsigned char X, unsigned char Y,unsigned data)
0196 ; {
0196 .dbline 127
0196 ; LCD_set_xy( X, Y );
0196 262F mov R18,R22
0198 042F mov R16,R20
019A D0DF rcall _LCD_set_xy
019C .dbline 128
019C ; LCD_write_char(0, data);
019C 2C81 ldd R18,y+4
019E 3D81 ldd R19,y+5
01A0 0027 clr R16
01A2 1127 clr R17
01A4 5CDF rcall _LCD_write_char
01A6 .dbline -2
01A6 .dbline 129
01A6 ; }
01A6 L21:
01A6 00D0 rcall pop_gset2
01A8 .dbline 0 ; func end
01A8 0895 ret
01AA .dbsym l data 4 i
01AA .dbsym r Y 22 c
01AA .dbsym r X 20 c
01AA .dbend
01AA .dbfunc e LCD_clr _LCD_clr fV
.even
01AA _LCD_clr::
01AA .dbline -1
01AA .dbline 134
01AA ; /**********************************************************
01AA ; /* LCD_clr : 清屏函数
01AA ; ***********************************************************/
01AA ; void LCD_clr(void)
01AA ; {
01AA .dbline 135
01AA ; LCD_write_char(0x01,0);
01AA 2227 clr R18
01AC 3327 clr R19
01AE 01E0 ldi R16,1
01B0 10E0 ldi R17,0
01B2 55DF rcall _LCD_write_char
01B4 .dbline 136
01B4 ; delay_nms(2);
01B4 02E0 ldi R16,2
01B6 10E0 ldi R17,0
01B8 .dbline -2
01B8 .dbline 137
01B8 ; }
01B8 L22:
01B8 .dbline 0 ; func end
01B8 00C0 rjmp _delay_nms
01BA .dbend
01BA .dbfunc e LCD_display _LCD_display fV
01BA ; temp -> R10
01BA ; i -> R12
01BA ; data -> y+18
01BA ; data_length -> R14
01BA ; y -> y+14
01BA ; x -> y+12
.even
01BA _LCD_display::
01BA 00D0 rcall push_arg4
01BC 00D0 rcall push_gset5
01BE 2297 sbiw R28,2
01C0 E888 ldd R14,y+16
01C2 .dbline -1
01C2 .dbline 147
01C2 ; /**********************************************************
01C2 ; /* LCD_display
01C2 ; /* 在LCD具体位置开始,显示一段长度不超过5的数值,如54321
01C2 ; /* x——列值
01C2 ; /* y——行值
01C2 ; /* data_length——数值长度<11
01C2 ; /* data ——数值内容
01C2 ; ***********************************************************/
01C2 ; void LCD_display(unsigned char x,unsigned char y,unsigned char data_length,unsigned long int data)
01C2 ; {
01C2 .dbline 149
01C2 ; unsigned char i,temp;
01C2 ; for(i=0;i<data_length;i++)
01C2 CC24 clr R12
01C4 3AC0 rjmp L27
01C6 L24:
01C6 .dbline 150
01C6 .dbline 151
01C6 4AE0 ldi R20,10
01C8 50E0 ldi R21,0
01CA 60E0 ldi R22,0
01CC 70E0 ldi R23,0
01CE EC2F mov R30,R28
01D0 FD2F mov R31,R29
01D2 2288 ldd R2,z+18
01D4 3388 ldd R3,z+19
01D6 4488 ldd R4,z+20
01D8 5588 ldd R5,z+21
01DA 7A93 st -y,R23
01DC 6A93 st -y,R22
01DE 5A93 st -y,R21
01E0 4A93 st -y,R20
01E2 022D mov R16,R2
01E4 132D mov R17,R3
01E6 242D mov R18,R4
01E8 352D mov R19,R5
01EA 00D0 rcall mod32u
01EC A02E mov R10,R16
01EE .dbline 152
01EE 8A2D mov R24,R10
01F0 9927 clr R25
01F2 C096 adiw R24,48
01F4 9983 std y+1,R25
01F6 8883 std y+0,R24
01F8 2E85 ldd R18,y+14
01FA 0E2D mov R16,R14
01FC 0C84 ldd R0,y+12
01FE 000D add R16,R0
0200 0C19 sub R16,R12
0202 0150 subi R16,1
0204 C5DF rcall _LCD_write
0206 .dbline 153
0206 4AE0 ldi R20,10
0208 50E0 ldi R21,0
020A 60E0 ldi R22,0
020C 70E0 ldi R23,0
020E EC2F mov R30,R28
0210 FD2F mov R31,R29
0212 2288 ldd R2,z+18
0214 3388 ldd R3,z+19
0216 4488 ldd R4,z+20
0218 5588 ldd R5,z+21
021A 7A93 st -y,R23
021C 6A93 st -y,R22
021E 5A93 st -y,R21
0220 4A93 st -y,R20
0222 022D mov R16,R2
0224 132D mov R17,R3
0226 242D mov R18,R4
0228 352D mov R19,R5
022A 00D0 rcall div32u
022C EC2F mov R30,R28
022E FD2F mov R31,R29
0230 028B std z+18,R16
0232 138B std z+19,R17
0234 248B std z+20,R18
0236 358B std z+21,R19
0238 .dbline 154
0238 L25:
0238 .dbline 149
0238 C394 inc R12
023A L27:
023A .dbline 149
023A CE14 cp R12,R14
023C 08F4 brsh X3
023E C3CF rjmp L24
0240 X3:
0240 .dbline -2
0240 .dbline 155
0240 ; {
0240 ; temp=data%10;
0240 ; LCD_write(data_length+x-i-1,y,'0'+temp);
0240 ; data=data/10;
0240 ; }
0240 ; }
0240 L23:
0240 2296 adiw R28,2
0242 00D0 rcall pop_gset5
0244 2496 adiw R28,4
0246 .dbline 0 ; func end
0246 0895 ret
0248 .dbsym r temp 10 c
0248 .dbsym r i 12 c
0248 .dbsym l data 18 l
0248 .dbsym r data_length 14 c
0248 .dbsym l y 14 c
0248 .dbsym l x 12 c
0248 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -