📄 mp3.lst
字号:
09D3 D005 RCALL _LCD_clear
(0243) LCD_write_byte(0x0c, 0);// 设定显示模式,正常显示
09D4 2722 CLR R18
09D5 E00C LDI R16,0xC
09D6 D0AC RCALL _LCD_write_byte
(0244) LCD_port|=LCD_CS ;// 关闭LCD
09D7 9ADE SBI 0x1B,6
09D8 9508 RET
_LCD_clear:
09D9 9725 SBIW R28,5
(0245)
(0246) }
(0247)
(0248) //=======================================================================
(0249) //LCD_clear: LCD清屏函数
(0250)
(0251)
(0252) void LCD_clear(void)
(0253)
(0254) {
(0255) LCD_write_String(0,0,14," ",0);
09DA 2422 CLR R2
09DB 822C STD Y+4,R2
09DC E680 LDI R24,0x60
09DD E090 LDI R25,0
09DE 839B STD Y+3,R25
09DF 838A STD Y+2,R24
09E0 E08E LDI R24,0xE
09E1 8388 STD Y+0,R24
09E2 2722 CLR R18
09E3 2700 CLR R16
09E4 D082 RCALL _LCD_write_String
(0256) LCD_write_String(0,1,14," ",0);
09E5 2422 CLR R2
09E6 822C STD Y+4,R2
09E7 E680 LDI R24,0x60
09E8 E090 LDI R25,0
09E9 839B STD Y+3,R25
09EA 838A STD Y+2,R24
09EB E08E LDI R24,0xE
09EC 8388 STD Y+0,R24
09ED E021 LDI R18,1
09EE 2700 CLR R16
09EF D077 RCALL _LCD_write_String
(0257) LCD_write_String(0,2,14," ",0);
09F0 2422 CLR R2
09F1 822C STD Y+4,R2
09F2 E680 LDI R24,0x60
09F3 E090 LDI R25,0
09F4 839B STD Y+3,R25
09F5 838A STD Y+2,R24
09F6 E08E LDI R24,0xE
09F7 8388 STD Y+0,R24
09F8 E022 LDI R18,2
09F9 2700 CLR R16
09FA D06C RCALL _LCD_write_String
(0258) LCD_write_String(0,3,14," ",0);
09FB 2422 CLR R2
09FC 822C STD Y+4,R2
09FD E680 LDI R24,0x60
09FE E090 LDI R25,0
09FF 839B STD Y+3,R25
0A00 838A STD Y+2,R24
0A01 E08E LDI R24,0xE
0A02 8388 STD Y+0,R24
0A03 E023 LDI R18,3
0A04 2700 CLR R16
0A05 D061 RCALL _LCD_write_String
(0259) LCD_write_String(0,4,14," ",0);
0A06 2422 CLR R2
0A07 822C STD Y+4,R2
0A08 E680 LDI R24,0x60
0A09 E090 LDI R25,0
0A0A 839B STD Y+3,R25
0A0B 838A STD Y+2,R24
0A0C E08E LDI R24,0xE
0A0D 8388 STD Y+0,R24
0A0E E024 LDI R18,4
0A0F 2700 CLR R16
0A10 D056 RCALL _LCD_write_String
(0260) LCD_write_String(0,5,14," ",0);
0A11 2422 CLR R2
0A12 822C STD Y+4,R2
0A13 E680 LDI R24,0x60
0A14 E090 LDI R25,0
0A15 839B STD Y+3,R25
0A16 838A STD Y+2,R24
0A17 E08E LDI R24,0xE
0A18 8388 STD Y+0,R24
0A19 E025 LDI R18,5
0A1A 2700 CLR R16
0A1B D04B RCALL _LCD_write_String
(0261) LCD_write_String(0,6,14," ",0);
0A1C 2422 CLR R2
0A1D 822C STD Y+4,R2
0A1E E680 LDI R24,0x60
0A1F E090 LDI R25,0
0A20 839B STD Y+3,R25
0A21 838A STD Y+2,R24
0A22 E08E LDI R24,0xE
0A23 8388 STD Y+0,R24
0A24 E026 LDI R18,6
0A25 2700 CLR R16
0A26 D040 RCALL _LCD_write_String
0A27 9625 ADIW R28,5
0A28 9508 RET
_LCD_set_XY:
Y --> R22
X --> R20
0A29 940E1CCA CALL push_gset2
0A2B 2F62 MOV R22,R18
0A2C 2F40 MOV R20,R16
(0262) /*
(0263) uint16 i;
(0264) LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
(0265) LCD_write_byte(0x80, 0);
(0266) for (i=0; i<504; i++)
(0267) {
(0268) LCD_write_byte(0x00, 1);
(0269) }
(0270) */
(0271) }
(0272)
(0273) //=======================================================================
(0274) //LCD_set_XY: 设置LCD坐标函数
(0275) //输入参数:X:0-83
(0276) //Y:0-5
(0277)
(0278)
(0279) void LCD_set_XY(uint8 X, uint8 Y)
(0280)
(0281) {
(0282) LCD_write_byte(0x40|Y, 0); // row
0A2D 2722 CLR R18
0A2E 2F06 MOV R16,R22
0A2F 6400 ORI R16,0x40
0A30 D052 RCALL _LCD_write_byte
(0283) LCD_write_byte(0x80|X, 0); // cloumn
0A31 2722 CLR R18
0A32 2F04 MOV R16,R20
0A33 6800 ORI R16,0x80
0A34 D04E RCALL _LCD_write_byte
0A35 940E1CB8 CALL pop_gset2
0A37 9508 RET
_LCD_write_char:
line --> R20
N --> R22
c --> R10
0A38 940E1CC8 CALL push_gset3
0A3A 2F62 MOV R22,R18
0A3B 2EA0 MOV R10,R16
(0284) }
(0285)
(0286) //=======================================================================
(0287) //LCD_write_char: 显示英文字符
(0288) //输入参数:c:显示的字符;
(0289)
(0290) void LCD_write_char(uint8 c,uint8 N)
(0291) {
(0292) uint8 line;
(0293) c -= 32;
0A3C 2D8A MOV R24,R10
0A3D 5280 SUBI R24,0x20
0A3E 2EA8 MOV R10,R24
(0294) for (line=0; line<6; line++)
0A3F 2744 CLR R20
0A40 C021 RJMP 0x0A62
(0295) {if(N)
0A41 2366 TST R22
0A42 F081 BEQ 0x0A53
(0296) LCD_write_byte(~font6x8[c][line], 1);
0A43 E021 LDI R18,1
0A44 E086 LDI R24,6
0A45 9D8A MUL R24,R10
0A46 0110 MOVW R2,R0
0A47 E584 LDI R24,0x54
0A48 E090 LDI R25,0
0A49 0E28 ADD R2,R24
0A4A 1E39 ADC R3,R25
0A4B 2FE4 MOV R30,R20
0A4C 27FF CLR R31
0A4D 0DE2 ADD R30,R2
0A4E 1DF3 ADC R31,R3
0A4F 9104 LPM R16,0(Z)
0A50 9500 COM R16
0A51 D031 RCALL _LCD_write_byte
0A52 C00E RJMP 0x0A61
(0297) else
(0298) LCD_write_byte(font6x8[c][line], 1);
0A53 E021 LDI R18,1
0A54 E086 LDI R24,6
0A55 9D8A MUL R24,R10
0A56 0110 MOVW R2,R0
0A57 E584 LDI R24,0x54
0A58 E090 LDI R25,0
0A59 0E28 ADD R2,R24
0A5A 1E39 ADC R3,R25
0A5B 2FE4 MOV R30,R20
0A5C 27FF CLR R31
0A5D 0DE2 ADD R30,R2
0A5E 1DF3 ADC R31,R3
0A5F 9104 LPM R16,0(Z)
0A60 D022 RCALL _LCD_write_byte
0A61 9543 INC R20
0A62 3046 CPI R20,6
0A63 F2E8 BCS 0x0A41
0A64 940E1CBB CALL pop_gset3
0A66 9508 RET
_LCD_write_String:
N --> R20
s --> R22
l --> R10
Y --> R14
X --> R12
0A67 940E1CC4 CALL push_gset5
0A69 2EE2 MOV R14,R18
0A6A 2EC0 MOV R12,R16
0A6B 84AA LDD R10,Y+10
0A6C 856C LDD R22,Y+12
0A6D 857D LDD R23,Y+13
0A6E 854E LDD R20,Y+14
(0299) }
(0300) }
(0301)
(0302) //=======================================================================
(0303) //LCD_write_char: 英文字符串显示函数
(0304) //输入参数:*s:英文字符串指针;l:显示字符串的长度 ;X、Y: 显示字符串的位置
(0305)
(0306) void LCD_write_String(uint8 X,uint8 Y,uint8 l,uint8 *s,uint8 N)
(0307)
(0308) {
(0309) LCD_set_XY(X,Y);
0A6F 2D2E MOV R18,R14
0A70 2D0C MOV R16,R12
0A71 DFB7 RCALL _LCD_set_XY
0A72 C006 RJMP 0x0A79
(0310) while (l--)
(0311) {
(0312) LCD_write_char(*s,N);
0A73 2F24 MOV R18,R20
0A74 01FB MOVW R30,R22
0A75 8100 LDD R16,Z+0
0A76 DFC1 RCALL _LCD_write_char
(0313) s++;
0A77 5F6F SUBI R22,0xFF
0A78 4F7F SBCI R23,0xFF
0A79 2C2A MOV R2,R10
0A7A 2433 CLR R3
0A7B 2D82 MOV R24,R2
0A7C 5081 SUBI R24,1
0A7D 2EA8 MOV R10,R24
0A7E 2022 TST R2
0A7F F799 BNE 0x0A73
0A80 940E1CC1 CALL pop_gset5
0A82 9508 RET
(0314) }
(0315) }
(0316)
(0317)
(0318) //=======================================================================
(0319) //LCD_write_byte: 使用SPI接口写数据到LCD
(0320) //输入参数:data:写入的数据;command :写数据/命令选择;
(0321)
(0322) void LCD_write_byte(uint8 data, uint8 command)
(0323)
(0324) {
(0325)
(0326) LCD_port &= ~LCD_CS ;// 使能LCD
_LCD_write_byte:
command --> R18
data --> R16
0A83 98DE CBI 0x1B,6
(0327)
(0328) if (command == 1)
0A84 3021 CPI R18,1
0A85 F411 BNE 0x0A88
(0329)
(0330) LCD_port |= LCD_DC ;// 传送数据
0A86 9ADF SBI 0x1B,7
0A87 C001 RJMP 0x0A89
(0331)
(0332) else
(0333)
(0334) LCD_port &= ~LCD_DC ;// 传送命令
0A88 98DF CBI 0x1B,7
(0335)
(0336) SPDR = data;// 传送数据到SPI寄存器
0A89 B90F OUT 0x0F,R16
(0337)
(0338) while ((SPSR & 0x80) == 0)
0A8A 9B77 SBIS 0x0E,7
0A8B CFFE RJMP 0x0A8A
(0339) {
(0340) }// 等待数据传送完毕
(0341)
(0342) LCD_port |= LCD_CS ;// 关闭LCD
0A8C 9ADE SBI 0x1B,6
0A8D 9508 RET
_LCD_write_tubiao:
n --> R20
line --> R22
Y --> R10
X --> R20
0A8E 940E1CC8 CALL push_gset3
0A90 2EA2 MOV R10,R18
0A91 2F40 MOV R20,R16
0A92 816E LDD R22,Y+6
(0343)
(0344) }
(0345)
(0346) //=======================================================================
(0347) void LCD_write_tubiao(uint8 X, uint8 Y, uint8 line)
(0348) {
(0349) uint8 n;
(0350)
(0351) LCD_set_XY(X,Y);//设置初始位置
0A93 2D2A MOV R18,R10
0A94 2F04 MOV R16,R20
0A95 DF93 RCALL _LCD_set_XY
(0352)
(0353) for (n=0; n<6; n++)//画一个6*8的图标
0A96 2744 CLR R20
0A97 C00F RJMP 0x0AA7
(0354) {
(0355) LCD_write_byte(Hzk3[line][n],1);
0A98 E021 LDI R18,1
0A99 E086 LDI R24,6
0A9A 9F86 MUL R24,R22
0A9B 0110 MOVW R2,R0
0A9C E786 LDI R24,0x76
0A9D E092 LDI R25,2
0A9E 0E28 ADD R2,R24
0A9F 1E39 ADC R3,R25
0AA0 2FE4 MOV R30,R20
0AA1 27FF CLR R31
0AA2 0DE2 ADD R30,R2
0AA3 1DF3 ADC R31,R3
0AA4 9104 LPM R16,0(Z)
0AA5 DFDD RCALL _LCD_write_byte
0AA6 9543 INC R20
0AA7 3046 CPI R20,6
0AA8 F378 BCS 0x0A98
0AA9 940E1CBB CALL pop_gset3
0AAB 9508 RET
_JINGDU:
i --> R20
0AAC 940E1CCC CALL push_gset1
(0356)
(0357) }
(0358) }
(0359)
(0360) //=======================================================================
(0361) //LCD_write_chi: 在LCD上显示汉字
(0362)
(0363) //输入参数:X、Y:显示汉字的起始X、Y坐标;
(0364) //ch_with :汉字点阵的宽度
(0365) //num:显示汉字的个数;
(0366) //line:汉字点阵数组中的起始行数
(0367) //row:汉字显示的行间距
(0368)
(0369) /*
(0370) void LCD_write_chi(unsigned char X, unsigned char Y,
(0371) unsigned char ch_with,unsigned char num,
(0372) unsigned char line,unsigned char row)
(0373)
(0374) {
(0375)
(0376) unsigned char i,n;
(0377)
(0378) LCD_set_XY(X,Y);//设置初始位置
(0379)
(0380) for (i=0;i<num;)
(0381)
(0382) {
(0383) for (n=0; n<ch_with*2; n++)//写一个汉字
(0384)
(0385) {
(0386)
(0387) if (n==ch_with)//写汉字的下半部分
(0388)
(0389) {
(0390)
(0391) if (i==0) LCD_set_XY(X,Y+1);
(0392)
(0393) else
(0394)
(0395) LCD_set_XY((X+(ch_with+row)*i),Y+1);
(0396)
(0397) }
(0398)
(0399) LCD_write_byte(Hzk[line+i][n],1);
(0400)
(0401) }
(0402)
(0403) i++;
(0404)
(0405) LCD_set_XY((X+(ch_with+row)*i),Y);
(0406)
(0407) }
(0408)
(0409) }
(0410) */
(0411) //=======================================================================
(0412)
(0413) //LCD_write_chi: 汉字移动
(0414)
(0415) //输入参数:X、Y:显示汉字的起始X、Y坐标;
(0416) //T:移动速度;
(0417)
(0418) /*
(0419) void LCD_move_chi(void)
(0420)
(0421) {
(0422)
(0423)
(0424) unsigned char i,n,j=0;
(0425)
(0426) unsigned char buffer_h[84]={0};
(0427)
(0428) unsigned char buffer_l[84]={0};
(0429)
(0430) for (i=0; i<172; i++)
(0431)
(0432) {
(0433) if((i/12)>5)
(0434) {
(0435) buffer_h[83]=0x00;
(0436) buffer_l[83]=0x00;
(0437) }
(0438) else
(0439) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -