📄 avr_gy-29.lis
字号:
0166 08E2 ldi R16,40
0168 14D0 xcall _LCD_write_command
016A .dbline 49
016A ; LCD_en_write();
016A 0DD0 xcall _LCD_en_write
016C .dbline 50
016C ; delay_nus(40);
016C 08E2 ldi R16,40
016E 10E0 ldi R17,0
0170 4DDF xcall _delay_nus
0172 .dbline 51
0172 ; LCD_write_command(0x28); //4位显示
0172 08E2 ldi R16,40
0174 0ED0 xcall _LCD_write_command
0176 .dbline 52
0176 ; LCD_write_command(0x0c); //显示开
0176 0CE0 ldi R16,12
0178 0CD0 xcall _LCD_write_command
017A .dbline 53
017A ; LCD_write_command(0x01); //清屏
017A 01E0 ldi R16,1
017C 0AD0 xcall _LCD_write_command
017E .dbline 54
017E ; delay_nms(10);
017E 0AE0 ldi R16,10
0180 10E0 ldi R17,0
0182 5CDF xcall _delay_nms
0184 .dbline -2
0184 L69:
0184 .dbline 0 ; func end
0184 0895 ret
0186 .dbend
0186 .dbfunc e LCD_en_write _LCD_en_write fV
.even
0186 _LCD_en_write::
0186 .dbline -1
0186 .dbline 58
0186 ; }
0186 ;
0186 ; void LCD_en_write(void) //液晶使能
0186 ; {
0186 .dbline 59
0186 ; LCD_EN_PORT|=LCD_EN;
0186 AF9A sbi 0x15,7
0188 .dbline 60
0188 ; delay_nus(1);
0188 01E0 ldi R16,1
018A 10E0 ldi R17,0
018C 3FDF xcall _delay_nus
018E .dbline 61
018E ; LCD_EN_PORT&=~LCD_EN;
018E AF98 cbi 0x15,7
0190 .dbline -2
0190 L70:
0190 .dbline 0 ; func end
0190 0895 ret
0192 .dbend
0192 .dbfunc e LCD_write_command _LCD_write_command fV
0192 ; command -> R20
.even
0192 _LCD_write_command::
0192 4A93 st -y,R20
0194 402F mov R20,R16
0196 .dbline -1
0196 .dbline 65
0196 ; }
0196 ;
0196 ; void LCD_write_command(unsigned char command) //写指令
0196 ; {
0196 .dbline 67
0196 ; //连线为高4位的写法
0196 ; delay_nus(16);
0196 00E1 ldi R16,16
0198 10E0 ldi R17,0
019A 38DF xcall _delay_nus
019C .dbline 68
019C ; LCD_RS_PORT&=~LCD_RS; //RS=0
019C AE98 cbi 0x15,6
019E .dbline 69
019E ; LCD_DATA_PORT&=0X0f; //清高四位
019E 8BB3 in R24,0x1b
01A0 8F70 andi R24,15
01A2 8BBB out 0x1b,R24
01A4 .dbline 70
01A4 ; LCD_DATA_PORT|=command&0xf0; //写高四位
01A4 842F mov R24,R20
01A6 807F andi R24,240
01A8 2BB2 in R2,0x1b
01AA 282A or R2,R24
01AC 2BBA out 0x1b,R2
01AE .dbline 71
01AE ; LCD_en_write();
01AE EBDF xcall _LCD_en_write
01B0 .dbline 72
01B0 ; command=command<<4; //低四位移到高四位
01B0 842F mov R24,R20
01B2 8F70 andi R24,#0x0F
01B4 8295 swap R24
01B6 482F mov R20,R24
01B8 .dbline 73
01B8 ; LCD_DATA_PORT&=0x0f; //清高四位
01B8 8BB3 in R24,0x1b
01BA 8F70 andi R24,15
01BC 8BBB out 0x1b,R24
01BE .dbline 74
01BE ; LCD_DATA_PORT|=command&0xf0; //写低四位
01BE 842F mov R24,R20
01C0 807F andi R24,240
01C2 2BB2 in R2,0x1b
01C4 282A or R2,R24
01C6 2BBA out 0x1b,R2
01C8 .dbline 75
01C8 ; LCD_en_write();
01C8 DEDF xcall _LCD_en_write
01CA .dbline -2
01CA L71:
01CA .dbline 0 ; func end
01CA 4991 ld R20,y+
01CC 0895 ret
01CE .dbsym r command 20 c
01CE .dbend
01CE .dbfunc e LCD_write_data _LCD_write_data fV
01CE ; data -> R20
.even
01CE _LCD_write_data::
01CE 4A93 st -y,R20
01D0 402F mov R20,R16
01D2 .dbline -1
01D2 .dbline 92
01D2 ;
01D2 ; /*
01D2 ; //连线为低四位的写法
01D2 ; delay_nus(16);
01D2 ; LCD_RS_PORT&=~LCD_RS; //RS=0
01D2 ; LCD_DATA_PORT&=0xf0; //清高四位
01D2 ; LCD_DATA_PORT|=(command>>4)&0x0f; //写高四位
01D2 ; LCD_en_write();
01D2 ; LCD_DATA_PORT&=0xf0; //清高四位
01D2 ; LCD_DATA_PORT|=command&0x0f; //写低四位
01D2 ; LCD_en_write();
01D2 ; */
01D2 ;
01D2 ; }
01D2 ;
01D2 ; void LCD_write_data(unsigned char data) //写数据
01D2 ; {
01D2 .dbline 94
01D2 ; //连线为高4位的写法
01D2 ; delay_nus(16);
01D2 00E1 ldi R16,16
01D4 10E0 ldi R17,0
01D6 1ADF xcall _delay_nus
01D8 .dbline 95
01D8 ; LCD_RS_PORT|=LCD_RS; //RS=1
01D8 AE9A sbi 0x15,6
01DA .dbline 96
01DA ; LCD_DATA_PORT&=0X0f; //清高四位
01DA 8BB3 in R24,0x1b
01DC 8F70 andi R24,15
01DE 8BBB out 0x1b,R24
01E0 .dbline 97
01E0 ; LCD_DATA_PORT|=data&0xf0; //写高四位
01E0 842F mov R24,R20
01E2 807F andi R24,240
01E4 2BB2 in R2,0x1b
01E6 282A or R2,R24
01E8 2BBA out 0x1b,R2
01EA .dbline 98
01EA ; LCD_en_write();
01EA CDDF xcall _LCD_en_write
01EC .dbline 99
01EC ; data=data<<4; //低四位移到高四位
01EC 842F mov R24,R20
01EE 8F70 andi R24,#0x0F
01F0 8295 swap R24
01F2 482F mov R20,R24
01F4 .dbline 100
01F4 ; LCD_DATA_PORT&=0X0f; //清高四位
01F4 8BB3 in R24,0x1b
01F6 8F70 andi R24,15
01F8 8BBB out 0x1b,R24
01FA .dbline 101
01FA ; LCD_DATA_PORT|=data&0xf0; //写低四位
01FA 842F mov R24,R20
01FC 807F andi R24,240
01FE 2BB2 in R2,0x1b
0200 282A or R2,R24
0202 2BBA out 0x1b,R2
0204 .dbline 102
0204 ; LCD_en_write();
0204 C0DF xcall _LCD_en_write
0206 .dbline -2
0206 L72:
0206 .dbline 0 ; func end
0206 4991 ld R20,y+
0208 0895 ret
020A .dbsym r data 20 c
020A .dbend
020A .dbfunc e LCD_set_xy _LCD_set_xy fV
020A ; address -> R20
020A ; y -> R10
020A ; x -> R22
.even
020A _LCD_set_xy::
020A 0E940000 xcall push_xgsetF00C
020E A22E mov R10,R18
0210 602F mov R22,R16
0212 .dbline -1
0212 .dbline 121
0212 ;
0212 ; /*
0212 ; //连线为低四位的写法
0212 ; delay_nus(16);
0212 ; LCD_RS_PORT|=LCD_RS; //RS=1
0212 ; LCD_DATA_PORT&=0Xf0; //清高四位
0212 ; LCD_DATA_PORT|=(data>>4)&0x0f; //写高四位
0212 ; LCD_en_write();
0212 ;
0212 ; LCD_DATA_PORT&=0Xf0; //清高四位
0212 ; LCD_DATA_PORT|=data&0x0f; //写低四位
0212 ; LCD_en_write();
0212 ; */
0212 ;
0212 ; }
0212 ;
0212 ;
0212 ; void LCD_set_xy( unsigned char x, unsigned char y ) //写地址函数
0212 ; {
0212 .dbline 123
0212 ; unsigned char address;
0212 ; if (y == 0) address = 0x80 + x;
0212 AA20 tst R10
0214 19F4 brne L74
0216 X23:
0216 .dbline 123
0216 462F mov R20,R22
0218 4058 subi R20,128 ; addi 128
021A 02C0 xjmp L75
021C L74:
021C .dbline 124
021C ; else address = 0xc0 + x;
021C 462F mov R20,R22
021E 4054 subi R20,64 ; addi 192
0220 L75:
0220 .dbline 125
0220 ; LCD_write_command( address);
0220 042F mov R16,R20
0222 B7DF xcall _LCD_write_command
0224 .dbline -2
0224 L73:
0224 .dbline 0 ; func end
0224 0C940000 xjmp pop_xgsetF00C
0228 .dbsym r address 20 c
0228 .dbsym r y 10 c
0228 .dbsym r x 22 c
0228 .dbend
0228 .dbfunc e LCD_write_string _LCD_write_string fV
0228 ; s -> R20,R21
0228 ; Y -> R12
0228 ; X -> R10
.even
0228 _LCD_write_string::
0228 0E940000 xcall push_xgset303C
022C C22E mov R12,R18
022E A02E mov R10,R16
0230 4E81 ldd R20,y+6
0232 5F81 ldd R21,y+7
0234 .dbline -1
0234 .dbline 129
0234 ; }
0234 ;
0234 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1
0234 ; {
0234 .dbline 130
0234 ; LCD_set_xy( X, Y ); //写地址
0234 2C2D mov R18,R12
0236 0A2D mov R16,R10
0238 E8DF xcall _LCD_set_xy
023A 05C0 xjmp L78
023C L77:
023C .dbline 132
023C ; while (*s) // 写显示字符
023C ; {
023C .dbline 133
023C ; LCD_write_data( *s );
023C FA01 movw R30,R20
023E 0081 ldd R16,z+0
0240 C6DF xcall _LCD_write_data
0242 .dbline 134
0242 ; s ++;
0242 4F5F subi R20,255 ; offset = 1
0244 5F4F sbci R21,255
0246 .dbline 135
0246 ; }
0246 L78:
0246 .dbline 131
0246 FA01 movw R30,R20
0248 2080 ldd R2,z+0
024A 2220 tst R2
024C B9F7 brne L77
024E X24:
024E .dbline -2
024E L76:
024E .dbline 0 ; func end
024E 0C940000 xjmp pop_xgset303C
0252 .dbsym r s 20 pc
0252 .dbsym r Y 12 c
0252 .dbsym r X 10 c
0252 .dbend
0252 .dbfunc e LCD_write_char _LCD_write_char fV
0252 ; data -> y+2
0252 ; Y -> R12
0252 ; X -> R10
.even
0252 _LCD_write_char::
0252 AA92 st -y,R10
0254 CA92 st -y,R12
0256 C22E mov R12,R18
0258 A02E mov R10,R16
025A .dbline -1
025A .dbline 140
025A ;
025A ; }
025A ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -