📄 nokia5110.lst
字号:
i --> R20
00299 934A ST -Y,R20
0029A 935A ST -Y,R21
(0224) }
(0225)
(0226) /********************************/
(0227) void LCD_clear(void)
(0228) {
(0229) unsigned int i;
(0230) LCD_write_byte(0x0c, 0);
0029B 2722 CLR R18
0029C E00C LDI R16,0xC
0029D D0E7 RCALL _LCD_write_byte
(0231) LCD_write_byte(0x80, 0);
0029E 2722 CLR R18
0029F E800 LDI R16,0x80
002A0 D0E4 RCALL _LCD_write_byte
(0232) for (i=0; i<504; i++)
002A1 2744 CLR R20
002A2 2755 CLR R21
002A3 C005 RJMP 0x02A9
(0233) {
(0234) LCD_write_byte(0, 1);
002A4 E021 LDI R18,1
002A5 2700 CLR R16
002A6 D0DE RCALL _LCD_write_byte
002A7 5F4F SUBI R20,0xFF
002A8 4F5F SBCI R21,0xFF
002A9 3F48 CPI R20,0xF8
002AA E0E1 LDI R30,1
002AB 075E CPC R21,R30
002AC F3B8 BCS 0x02A4
002AD 9159 LD R21,Y+
002AE 9149 LD R20,Y+
002AF 9508 RET
(0235) }
(0236) }
(0237)
(0238) /************************************/
(0239) void delay_1us(void) //1us延时函数
(0240) {
(0241) unsigned int i;
(0242) for(i=0;i<12000;i++);
_delay_1us:
i --> R16
002B0 2700 CLR R16
002B1 2711 CLR R17
002B2 C002 RJMP 0x02B5
002B3 5F0F SUBI R16,0xFF
002B4 4F1F SBCI R17,0xFF
002B5 3E00 CPI R16,0xE0
002B6 E2EE LDI R30,0x2E
002B7 071E CPC R17,R30
002B8 F3D0 BCS 0x02B3
002B9 9508 RET
_LCD_set_XY:
Y --> R22
X --> R20
002BA 934A ST -Y,R20
002BB 936A ST -Y,R22
002BC 2F62 MOV R22,R18
002BD 2F40 MOV R20,R16
(0243) }
(0244)
(0245) /************************************/
(0246) void LCD_set_XY(unsigned char X, unsigned char Y)
(0247) {
(0248) LCD_write_byte(0x40 | Y, 0);// column
002BE 2722 CLR R18
002BF 2F06 MOV R16,R22
002C0 6400 ORI R16,0x40
002C1 D0C3 RCALL _LCD_write_byte
(0249) LCD_write_byte(0x80 | X, 0);// row
002C2 2722 CLR R18
002C3 2F04 MOV R16,R20
002C4 6800 ORI R16,0x80
002C5 D0BF RCALL _LCD_write_byte
002C6 9169 LD R22,Y+
002C7 9149 LD R20,Y+
002C8 9508 RET
_LCD_write_char:
line --> R20
c --> R22
002C9 934A ST -Y,R20
002CA 936A ST -Y,R22
002CB 2F60 MOV R22,R16
(0250) }
(0251)
(0252) /*******************************************/
(0253) void LCD_write_char(unsigned char c)
(0254) {
(0255) unsigned char line;
(0256) c -= 32;
002CC 5260 SUBI R22,0x20
(0257) for (line=0; line<6; line++)
002CD 2744 CLR R20
002CE C010 RJMP 0x02DF
(0258) {
(0259) LCD_write_byte(font6x8[c][line], 1);
002CF E021 LDI R18,1
002D0 E006 LDI R16,6
002D1 2F16 MOV R17,R22
002D2 0301 MULSU R16,R17
002D3 0110 MOVW R2,R0
002D4 E880 LDI R24,0x80
002D5 E093 LDI R25,3
002D6 0E28 ADD R2,R24
002D7 1E39 ADC R3,R25
002D8 2FE4 MOV R30,R20
002D9 27FF CLR R31
002DA 0DE2 ADD R30,R2
002DB 1DF3 ADC R31,R3
002DC 8100 LD R16,Z
002DD D0A7 RCALL _LCD_write_byte
002DE 9543 INC R20
002DF 3046 CPI R20,6
002E0 F370 BCS 0x02CF
002E1 9169 LD R22,Y+
002E2 9149 LD R20,Y+
002E3 9508 RET
_LCD_write_english_string:
s --> R20
Y --> R12
X --> R10
002E4 940E 040B CALL push_xgset303C
002E6 2EC2 MOV R12,R18
002E7 2EA0 MOV R10,R16
002E8 814E LDD R20,Y+6
002E9 815F LDD R21,Y+7
(0260) }
(0261) }
(0262) /********************************************/
(0263) /*-------------------------------------------------
(0264) LCD_write_english_String : 英文字符串显示函数
(0265)
(0266) 输入参数:*s :英文字符串指针;
(0267) X、Y : 显示字符串的位置,x 0-83 ,y 0-5
(0268) --------------------------------------------------*/
(0269) void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
(0270) {
(0271) LCD_set_XY(X,Y);
002EA 2D2C MOV R18,R12
002EB 2D0A MOV R16,R10
002EC DFCD RCALL _LCD_set_XY
002ED C005 RJMP 0x02F3
(0272) while (*s)
(0273) {
(0274) LCD_write_char(*s);
002EE 01FA MOVW R30,R20
002EF 8100 LD R16,Z
002F0 DFD8 RCALL _LCD_write_char
(0275) s++;
002F1 5F4F SUBI R20,0xFF
002F2 4F5F SBCI R21,0xFF
002F3 01FA MOVW R30,R20
002F4 8020 LD R2,Z
002F5 2022 TST R2
002F6 F7B9 BNE 0x02EE
002F7 940C 0412 JMP pop_xgset303C
_LCD_write_chinese_string:
i --> R10
n --> R14
row --> R22
line --> R12
num --> R20
ch_with --> Y,+14
Y --> Y,+12
X --> Y,+10
002F9 940E 03C8 CALL push_arg4
002FB 940E 0400 CALL push_xgsetF0FC
002FD 8948 LDD R20,Y+16
002FE 88CA LDD R12,Y+18
002FF 896C LDD R22,Y+20
(0276) }
(0277) }
(0278) /**************************************************************/
(0279) /*-------------------------------------------------
(0280) LCD_write_chinese_string: 在LCD上显示汉字
(0281)
(0282) 输入参数:X、Y :显示汉字的起始X、Y坐标;
(0283) ch_with :汉字点阵的宽度
(0284) num :显示汉字的个数;
(0285) line :汉字点阵数组中的起始行数
(0286) row :汉字显示的行间距
(0287) --------------------------------------------------*/
(0288) void LCD_write_chinese_string(unsigned char X, unsigned char Y,
(0289) unsigned char ch_with,unsigned char num,
(0290) unsigned char line,unsigned char row)
(0291) {
(0292) unsigned char i,n;
(0293) LCD_set_XY(X,Y); //设置初始位置
00300 852C LDD R18,Y+12
00301 850A LDD R16,Y+10
00302 DFB7 RCALL _LCD_set_XY
(0294) for (i=0;i<num;)
00303 24AA CLR R10
00304 C031 RJMP 0x0336
(0295) {
(0296) for (n=0; n<ch_with*2; n++) //写一个汉字
00305 24EE CLR R14
00306 C023 RJMP 0x032A
(0297) {
(0298) if (n==ch_with) //写汉字的下半部分
00307 840E LDD R0,Y+14
00308 14E0 CP R14,R0
00309 F479 BNE 0x0319
(0299) {
(0300) if (i==0) LCD_set_XY(X,Y+1);
0030A 20AA TST R10
0030B F429 BNE 0x0311
0030C 852C LDD R18,Y+12
0030D 5F2F SUBI R18,0xFF
0030E 850A LDD R16,Y+10
0030F DFAA RCALL _LCD_set_XY
00310 C008 RJMP 0x0319
(0301) else
(0302) {
(0303) LCD_set_XY((X+(ch_with+row)*i),Y+1);
00311 852C LDD R18,Y+12
00312 5F2F SUBI R18,0xFF
00313 842E LDD R2,Y+14
00314 0E26 ADD R2,R22
00315 9C2A MUL R2,R10
00316 850A LDD R16,Y+10
00317 0D00 ADD R16,R0
00318 DFA1 RCALL _LCD_set_XY
(0304) }
(0305) }
(0306) LCD_write_byte(HZK[line+i][n],1);
00319 E021 LDI R18,1
0031A 2D1C MOV R17,R12
0031B 0D1A ADD R17,R10
0031C E108 LDI R16,0x18
0031D 0301 MULSU R16,R17
0031E 0110 MOVW R2,R0
0031F E980 LDI R24,0x90
00320 E092 LDI R25,2
00321 0E28 ADD R2,R24
00322 1E39 ADC R3,R25
00323 2DEE MOV R30,R14
00324 27FF CLR R31
00325 0DE2 ADD R30,R2
00326 1DF3 ADC R31,R3
00327 8100 LD R16,Z
00328 D05C RCALL _LCD_write_byte
00329 94E3 INC R14
0032A 842E LDD R2,Y+14
0032B 0C22 LSL R2
0032C 14E2 CP R14,R2
0032D F2C8 BCS 0x0307
(0307) }
(0308) i++;
0032E 94A3 INC R10
(0309) LCD_set_XY((X+(ch_with+row)*i),Y);
0032F 852C LDD R18,Y+12
00330 842E LDD R2,Y+14
00331 0E26 ADD R2,R22
00332 9C2A MUL R2,R10
00333 850A LDD R16,Y+10
00334 0D00 ADD R16,R0
00335 DF84 RCALL _LCD_set_XY
00336 16A4 CP R10,R20
00337 F268 BCS 0x0305
00338 940E 03F5 CALL pop_xgsetF0FC
0033A 9624 ADIW R28,4
0033B 9508 RET
_LCD_draw_bmp_pixel:
row --> R22
n --> R20
i --> R12
Pix_y --> R12
Pix_x --> R10
map --> R14
Y --> Y,+12
X --> Y,+10
0033C 940E 03C8 CALL push_arg4
0033E 940E 0400 CALL push_xgsetF0FC
00340 84EE LDD R14,Y+14
00341 84FF LDD R15,Y+15
00342 88A8 LDD R10,Y+16
00343 88CA LDD R12,Y+18
(0310) }
(0311) }
(0312) /***********************************************/
(0313) /*----------------------------------------------
(0314) LCD_draw_map : 位图绘制函数
(0315)
(0316) 输入参数:X、Y :位图绘制的起始X、Y坐标;
(0317) *map :位图点阵数据;
(0318) Pix_x :位图像素(长)
(0319) Pix_y :位图像素(宽)
(0320) -----------------------------------------------*/
(0321) void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
(0322) unsigned char Pix_x,unsigned char Pix_y)
(0323) {
(0324) unsigned int i,n;
(0325) unsigned char row;
(0326) if (Pix_y%8==0)
00344 E018 LDI R17,0x8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -