📄 12864.lst
字号:
0143 0745 CPC R20,R21
0144 F461 BNE 0x0151
(0053) {
(0054) LCD_DATA_PORT = data_temp; //send 8bit
0145 BB6B OUT 0x1B,R22
(0055)
(0056) LCD_RS_PORT |= LCD_RS; //RS=1
0146 9AC0 SBI 0x18,0
(0057)
(0058) LCD_EN_PORT &= ~LCD_EN; //EN=0
0147 98C1 CBI 0x18,1
(0059) delay_nus(2);
0148 E002 LDI R16,2
0149 E010 LDI R17,0
014A D05D RCALL _delay_nus
(0060) LCD_EN_PORT |= LCD_EN; //EN=1
014B 9AC1 SBI 0x18,1
(0061) delay_nus(500);
014C EF04 LDI R16,0xF4
014D E011 LDI R17,1
014E D059 RCALL _delay_nus
(0062) LCD_EN_PORT &= ~LCD_EN; //EN=0
014F 98C1 CBI 0x18,1
(0063) }
0150 C00B RJMP 0x015C
(0064) else
(0065) {
(0066) LCD_DATA_PORT = command_temp;//send command
0151 BB4B OUT 0x1B,R20
(0067)
(0068) LCD_RS_PORT &= ~LCD_RS; //RS=0
0152 98C0 CBI 0x18,0
(0069) LCD_EN_PORT &= ~LCD_EN; //EN=0
0153 98C1 CBI 0x18,1
(0070) delay_nus(2);
0154 E002 LDI R16,2
0155 E010 LDI R17,0
0156 D051 RCALL _delay_nus
(0071) LCD_EN_PORT |= LCD_EN; //EN=1
0157 9AC1 SBI 0x18,1
(0072) delay_nus(500);
0158 EF04 LDI R16,0xF4
0159 E011 LDI R17,1
015A D04D RCALL _delay_nus
(0073) LCD_EN_PORT &= ~LCD_EN; //EN=0
015B 98C1 CBI 0x18,1
(0074) }
015C 940E01D6 CALL pop_gset4
015E 9508 RET
_LCD_set_xy:
address --> R20
y --> R20
x --> R22
015F 940E01DF CALL push_gset2
0161 2F42 MOV R20,R18
0162 2F60 MOV R22,R16
(0075)
(0076) }
(0077)
(0078)
(0079) /*-----------------------------------------------------------------------
(0080) LCD_set_xy : 设置LCD显示的起始位置
(0081)
(0082) 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-3
(0083) LCD第一行显示寄存器地址:0X80-0X8F
(0084) LCD第一行显示寄存器地址:0XC0-0XCF
(0085)
(0086) 编写日期 :2005
(0087) 最后修改日期 :2005
(0088) -----------------------------------------------------------------------*/
(0089) void LCD_set_xy( unsigned char x, unsigned char y )
(0090) {
(0091) unsigned char address;
(0092) switch(y){
0163 2755 CLR R21
0164 3040 CPI R20,0
0165 0745 CPC R20,R21
0166 F069 BEQ 0x0174
0167 3041 CPI R20,1
0168 E0E0 LDI R30,0
0169 075E CPC R21,R30
016A F061 BEQ 0x0177
016B 3042 CPI R20,2
016C E0E0 LDI R30,0
016D 075E CPC R21,R30
016E F059 BEQ 0x017A
016F 3043 CPI R20,3
0170 E0E0 LDI R30,0
0171 075E CPC R21,R30
0172 F051 BEQ 0x017D
0173 C00C RJMP 0x0180
(0093) case 0:
(0094) address = 0x80 + x;
0174 2F46 MOV R20,R22
0175 5840 SUBI R20,0x80
(0095) break;
0176 C00B RJMP 0x0182
(0096) case 1:
(0097) address = 0x90 + x;
0177 2F46 MOV R20,R22
0178 5740 SUBI R20,0x70
(0098) break;
0179 C008 RJMP 0x0182
(0099) case 2:
(0100) address = 0x88 + x;
017A 2F46 MOV R20,R22
017B 5748 SUBI R20,0x78
(0101) break;
017C C005 RJMP 0x0182
(0102) case 3:
(0103) address = 0x98 + x;
017D 2F46 MOV R20,R22
017E 5648 SUBI R20,0x68
(0104) break;
017F C002 RJMP 0x0182
(0105) default:address = 0x80 + x;}
0180 2F46 MOV R20,R22
0181 5840 SUBI R20,0x80
(0106) LCD_write_char( address, 0 );
0182 2722 CLR R18
0183 2733 CLR R19
0184 2F04 MOV R16,R20
0185 2711 CLR R17
0186 DFB5 RCALL _LCD_write_char
0187 940E01D0 CALL pop_gset2
0189 9508 RET
_LCD_write_string:
s --> R20
Y --> R10
X --> R22
018A 940E01DD CALL push_gset3
018C 2EA2 MOV R10,R18
018D 2F60 MOV R22,R16
018E 814E LDD R20,Y+6
018F 815F LDD R21,Y+7
(0107)
(0108) }
(0109) /*-----------------------------------------------------------------------
(0110) LCD_write_string : 中英文字符串显示函数
(0111)
(0112) 输入参数:*s :英文字符串指针;
(0113) X、Y : 显示字符串的位置
(0114)
(0115) 编写日期 :2005
(0116) 最后修改日期 :2005
(0117) -----------------------------------------------------------------------*/
(0118) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0119) {
(0120) LCD_set_xy( X, Y );
0190 2D2A MOV R18,R10
0191 2F06 MOV R16,R22
0192 DFCC RCALL _LCD_set_xy
0193 C00B RJMP 0x019F
(0121)
(0122) while (*s)
(0123) {
(0124) LCD_write_char( 0, *s );
0194 01FA MOVW R30,R20
0195 8120 LDD R18,Z+0
0196 2733 CLR R19
0197 2700 CLR R16
0198 2711 CLR R17
0199 DFA2 RCALL _LCD_write_char
(0125) s ++;
019A 5F4F SUBI R20,0xFF
019B 4F5F SBCI R21,0xFF
(0126) delay_nms(5);
019C E005 LDI R16,5
019D E010 LDI R17,0
019E D022 RCALL _delay_nms
019F 01FA MOVW R30,R20
01A0 8020 LDD R2,Z+0
01A1 2022 TST R2
01A2 F789 BNE 0x0194
01A3 940E01D3 CALL pop_gset3
01A5 9508 RET
(0127) }
(0128) }
(0129)
(0130) /*-----------------------------------------------------------------------
(0131) 延时函数
(0132) 系统时钟:8M
(0133) -----------------------------------------------------------------------*/
(0134) void delay_1us(void) //1us延时函数
(0135) {
(0136) asm("nop");
_delay_1us:
01A6 0000 NOP
01A7 9508 RET
_delay_nus:
i --> R20
n --> R22
01A8 940E01DF CALL push_gset2
01AA 01B8 MOVW R22,R16
(0137) }
(0138)
(0139) void delay_nus(unsigned int n) //N us延时函数
(0140) {
(0141) unsigned int i=0;
01AB 2744 CLR R20
01AC 2755 CLR R21
(0142) for (i=0;i<n;i++)
01AD C003 RJMP 0x01B1
(0143) delay_1us();
01AE DFF7 RCALL _delay_1us
01AF 5F4F SUBI R20,0xFF
01B0 4F5F SBCI R21,0xFF
01B1 1746 CP R20,R22
01B2 0757 CPC R21,R23
01B3 F3D0 BCS 0x01AE
01B4 940E01D0 CALL pop_gset2
01B6 9508 RET
(0144) }
(0145)
(0146) void delay_1ms(void) //1ms延时函数
(0147) {
(0148) unsigned int i;
(0149) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
01B7 2700 CLR R16
01B8 2711 CLR R17
01B9 C002 RJMP 0x01BC
01BA 5F0F SUBI R16,0xFF
01BB 4F1F SBCI R17,0xFF
01BC 3704 CPI R16,0x74
01BD E0E4 LDI R30,4
01BE 071E CPC R17,R30
01BF F3D0 BCS 0x01BA
01C0 9508 RET
_delay_nms:
i --> R20
n --> R22
01C1 940E01DF CALL push_gset2
01C3 01B8 MOVW R22,R16
(0150) }
(0151)
(0152) void delay_nms(unsigned int n) //N ms延时函数
(0153) {
(0154) unsigned int i=0;
01C4 2744 CLR R20
01C5 2755 CLR R21
(0155) for (i=0;i<n;i++)
01C6 C003 RJMP 0x01CA
(0156) delay_1ms();
FILE: <library>
01C7 DFEF RCALL _delay_1ms
01C8 5F4F SUBI R20,0xFF
01C9 4F5F SBCI R21,0xFF
01CA 1746 CP R20,R22
01CB 0757 CPC R21,R23
01CC F3D0 BCS 0x01C7
01CD 940E01D0 CALL pop_gset2
01CF 9508 RET
pop_gset2:
01D0 E0E2 LDI R30,2
01D1 940C01E5 JMP pop
pop_gset3:
01D3 E0E4 LDI R30,4
01D4 940C01E5 JMP pop
pop_gset4:
01D6 E0E8 LDI R30,0x8
01D7 940C01E5 JMP pop
push_gset5:
01D9 92FA ST R15,-Y
01DA 92EA ST R14,-Y
push_gset4:
01DB 92DA ST R13,-Y
01DC 92CA ST R12,-Y
push_gset3:
01DD 92BA ST R11,-Y
01DE 92AA ST R10,-Y
push_gset2:
01DF 937A ST R23,-Y
01E0 936A ST R22,-Y
push_gset1:
01E1 935A ST R21,-Y
01E2 934A ST R20,-Y
01E3 9508 RET
pop_gset1:
01E4 E0E1 LDI R30,1
pop:
01E5 9149 LD R20,Y+
01E6 9159 LD R21,Y+
01E7 FDE0 SBRC R30,0
01E8 9508 RET
01E9 9169 LD R22,Y+
01EA 9179 LD R23,Y+
01EB FDE1 SBRC R30,1
01EC 9508 RET
01ED 90A9 LD R10,Y+
01EE 90B9 LD R11,Y+
01EF FDE2 SBRC R30,2
01F0 9508 RET
01F1 90C9 LD R12,Y+
01F2 90D9 LD R13,Y+
01F3 FDE3 SBRC R30,3
01F4 9508 RET
01F5 90E9 LD R14,Y+
01F6 90F9 LD R15,Y+
01F7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -