📄 tc_clock.lst
字号:
03EE DFB4 RCALL _delayUS
(0215) LCDENH;
03EF 9A96 SBI 0x12,6
(0216) delayUS(2);
03F0 E002 LDI R16,2
03F1 E010 LDI R17,0
03F2 DFB0 RCALL _delayUS
(0217) PORTC=com;
03F3 BB45 OUT 0x15,R20
(0218) delayUS(2);
03F4 E002 LDI R16,2
03F5 E010 LDI R17,0
03F6 DFAC RCALL _delayUS
(0219) LCDENL;
03F7 9896 CBI 0x12,6
03F8 940E0718 CALL pop_gset1
03FA 9508 RET
_LCD_WRITE_ADD_CHAR:
i --> R20
p --> R22
y --> R10
x --> R12
03FB 940E070F CALL push_gset4
03FD 2EA2 MOV R10,R18
03FE 2EC0 MOV R12,R16
03FF 8568 LDD R22,Y+8
(0220) }
(0221) /*******************************************
(0222) *函数名称:LCD_WRITE_ADD_CHAR(uchar x,y ,uchar *p)
(0223) *函数功能:在坐标xy处写入西文字符
(0224) *入口参数:x,y 写入字符的坐标, *p字符编码表的首地址
(0225) *出口参数:无
(0226) **********************************************/
(0227) void LCD_WRITE_ADD_CHAR(uchar x, uchar y, uchar p)
(0228) {
(0229) uchar i;
(0230) x=0xb8+x*2;
0400 E082 LDI R24,2
0401 9D8C MUL R24,R12
0402 2D80 MOV R24,R0
0403 5488 SUBI R24,0x48
0404 2EC8 MOV R12,R24
(0231) y=0x40+y*8;
0405 E088 LDI R24,0x8
0406 9D8A MUL R24,R10
0407 2D80 MOV R24,R0
0408 5C80 SUBI R24,0xC0
0409 2EA8 MOV R10,R24
(0232) LCD_WRITE_COM(x); //x为行
040A 2D0C MOV R16,R12
040B DFD8 RCALL _LCD_WRITE_COM
(0233) LCD_WRITE_COM(y); // y为列
040C 2D0A MOV R16,R10
040D DFD6 RCALL _LCD_WRITE_COM
(0234) for(i=0;i<8;i++)
040E 2744 CLR R20
040F C00E RJMP 0x041E
(0235) {
(0236) LCD_WRITE_DAT(table[p][i]); //西文字母的上半部分,由8行点构成(每行有8个点)
0410 E180 LDI R24,0x10
0411 9F86 MUL R24,R22
0412 0110 MOVW R2,R0
0413 E88C LDI R24,0x8C
0414 E090 LDI R25,0
0415 0E28 ADD R2,R24
0416 1E39 ADC R3,R25
0417 2FE4 MOV R30,R20
0418 27FF CLR R31
0419 0DE2 ADD R30,R2
041A 1DF3 ADC R31,R3
041B 9104 LPM R16,0(Z)
041C DFB0 RCALL _LCD_WRITE_DAT
041D 9543 INC R20
041E 3048 CPI R20,0x8
041F F380 BCS 0x0410
(0237) }
(0238) LCD_WRITE_COM(x+1);
0420 2D0C MOV R16,R12
0421 5F0F SUBI R16,0xFF
0422 DFC1 RCALL _LCD_WRITE_COM
(0239) LCD_WRITE_COM(y);
0423 2D0A MOV R16,R10
0424 DFBF RCALL _LCD_WRITE_COM
(0240) for(i=0;i<8;i++) //写入西文字母的下半部分
0425 2744 CLR R20
0426 C00F RJMP 0x0436
(0241) {
(0242) LCD_WRITE_DAT(table[p][8+i]);
0427 E180 LDI R24,0x10
0428 9F86 MUL R24,R22
0429 0110 MOVW R2,R0
042A E88C LDI R24,0x8C
042B E090 LDI R25,0
042C 0E28 ADD R2,R24
042D 1E39 ADC R3,R25
042E 2FE4 MOV R30,R20
042F 27FF CLR R31
0430 9638 ADIW R30,0x8
0431 0DE2 ADD R30,R2
0432 1DF3 ADC R31,R3
0433 9104 LPM R16,0(Z)
0434 DF98 RCALL _LCD_WRITE_DAT
0435 9543 INC R20
0436 3048 CPI R20,0x8
0437 F378 BCS 0x0427
0438 940E070A CALL pop_gset4
043A 9508 RET
_LCD_WRITE_ADD_CHINESE:
i --> R20
p --> R22
y --> R10
x --> R12
043B 940E070F CALL push_gset4
043D 2EA2 MOV R10,R18
043E 2EC0 MOV R12,R16
043F 8568 LDD R22,Y+8
(0243) }
(0244) }
(0245) void LCD_WRITE_ADD_CHINESE(uchar x,uchar y,uchar p)
(0246) {
(0247) uchar i;
(0248) x=0xb8+x*2;
0440 E082 LDI R24,2
0441 9D8C MUL R24,R12
0442 2D80 MOV R24,R0
0443 5488 SUBI R24,0x48
0444 2EC8 MOV R12,R24
(0249) y=0x40+y*8;
0445 E088 LDI R24,0x8
0446 9D8A MUL R24,R10
0447 2D80 MOV R24,R0
0448 5C80 SUBI R24,0xC0
0449 2EA8 MOV R10,R24
(0250) LCD_WRITE_COM(x);
044A 2D0C MOV R16,R12
044B DF98 RCALL _LCD_WRITE_COM
(0251) LCD_WRITE_COM(y);
044C 2D0A MOV R16,R10
044D DF96 RCALL _LCD_WRITE_COM
(0252) for(i=0;i<16;i++)
044E 2744 CLR R20
044F C011 RJMP 0x0461
(0253) {
(0254) LCD_WRITE_DAT(Tab_Chinesepoem[2*p][i]);
0450 E082 LDI R24,2
0451 9F86 MUL R24,R22
0452 2D10 MOV R17,R0
0453 E100 LDI R16,0x10
0454 0201 MULS R16,R17
0455 E98C LDI R24,0x9C
0456 E091 LDI R25,1
0457 0110 MOVW R2,R0
0458 0E28 ADD R2,R24
0459 1E39 ADC R3,R25
045A 2FE4 MOV R30,R20
045B 27FF CLR R31
045C 0DE2 ADD R30,R2
045D 1DF3 ADC R31,R3
045E 9104 LPM R16,0(Z)
045F DF6D RCALL _LCD_WRITE_DAT
0460 9543 INC R20
0461 3140 CPI R20,0x10
0462 F368 BCS 0x0450
(0255) }
(0256) LCD_WRITE_COM(x+1);
0463 2D0C MOV R16,R12
0464 5F0F SUBI R16,0xFF
0465 DF7E RCALL _LCD_WRITE_COM
(0257) LCD_WRITE_COM(y);
0466 2D0A MOV R16,R10
0467 DF7C RCALL _LCD_WRITE_COM
(0258) for(i=0;i<16;i++)
0468 2744 CLR R20
0469 C011 RJMP 0x047B
(0259) {
(0260) LCD_WRITE_DAT(Tab_Chinesepoem[2*p+1][i]);
046A E082 LDI R24,2
046B 9F86 MUL R24,R22
046C 2D10 MOV R17,R0
046D E100 LDI R16,0x10
046E 0201 MULS R16,R17
046F EA8C LDI R24,0xAC
0470 E091 LDI R25,1
0471 0110 MOVW R2,R0
0472 0E28 ADD R2,R24
0473 1E39 ADC R3,R25
0474 2FE4 MOV R30,R20
0475 27FF CLR R31
0476 0DE2 ADD R30,R2
0477 1DF3 ADC R31,R3
0478 9104 LPM R16,0(Z)
0479 DF53 RCALL _LCD_WRITE_DAT
047A 9543 INC R20
047B 3140 CPI R20,0x10
047C F368 BCS 0x046A
047D 940E070A CALL pop_gset4
047F 9508 RET
_LCD_WRITE_PICTURE:
a --> Y+1
k --> R20
i --> R22
j --> R10
0480 940E0711 CALL push_gset3
(0261) }
(0262) }
(0263)
(0264) /********************************************************
(0265) *函数名称:LCD_WRITE_PICTURE()
(0266) *函数功能:在LCD液晶屏上显示图片‘南华大学电气工程学院’
(0267) *函数引用了字模软件生成的字模表Tab_pic2[][16]
(0268) *其取模方式为 :从第一列开始向下取8个点作为一个字节
(0269) ,然后从第二列开始向下取8个点作为第二个字节...依此类推。
(0270) 如果最后不足8个点就补满8位。 取模顺序是从低到高,即第
(0271) 一个点作为最低位。如*-------取为00000001
(0272) ***********************************************************/
(0273) void LCD_WRITE_PICTURE()
(0274) {
(0275) uchar i,j,k;
(0276) uint a;
(0277) LCDCS1H;
0482 9A95 SBI 0x12,5
(0278) LCDCS2L;
0483 9894 CBI 0x12,4
(0279) LCD_WRITE_COM(0x3F);
0484 E30F LDI R16,0x3F
0485 DF5E RCALL _LCD_WRITE_COM
(0280) LCD_WRITE_COM(0xC0);
0486 EC00 LDI R16,0xC0
0487 DF5C RCALL _LCD_WRITE_COM
(0281) for(k=0;k<8;k++)
0488 2744 CLR R20
0489 C022 RJMP 0x04AC
(0282) {
(0283) LCD_WRITE_COM(0xB8+k); //起始行,每页有八行
048A 2F04 MOV R16,R20
048B 5408 SUBI R16,0x48
048C DF57 RCALL _LCD_WRITE_COM
(0284) LCD_WRITE_COM(0x40); //起始列,列自动加一
048D E400 LDI R16,0x40
048E DF55 RCALL _LCD_WRITE_COM
(0285) for(i=0;i<4;i++)
048F 2766 CLR R22
0490 C018 RJMP 0x04A9
(0286) for(j=0;j<16;j++)
0491 24AA CLR R10
0492 C012 RJMP 0x04A5
(0287) {
(0288) LCD_WRITE_DAT(Tab_pic2[i+k*8][j]);
0493 E088 LDI R24,0x8
0494 9F84 MUL R24,R20
0495 2E26 MOV R2,R22
0496 0C20 ADD R2,R0
0497 E180 LDI R24,0x10
0498 9D82 MUL R24,R2
0499 0110 MOVW R2,R0
049A EF8C LDI R24,0xFC
049B E092 LDI R25,2
049C 0E28 ADD R2,R24
049D 1E39 ADC R3,R25
049E 2DEA MOV R30,R10
049F 27FF CLR R31
04A0 0DE2 ADD R30,R2
04A1 1DF3 ADC R31,R3
04A2 9104 LPM R16,0(Z)
04A3 DF29 RCALL _LCD_WRITE_DAT
04A4 94A3 INC R10
04A5 2D8A MOV R24,R10
04A6 3180 CPI R24,0x10
04A7 F358 BCS 0x0493
04A8 9563 INC R22
04A9 3064 CPI R22,4
04AA F330 BCS 0x0491
04AB 9543 INC R20
04AC 3048 CPI R20,0x8
04AD F2E0 BCS 0x048A
(0289)
(0290) }
(0291)
(0292) }
(0293) LCDCS1L;
04AE 9895 CBI 0x12,5
(0294) LCDCS2H;
04AF 9A94 SBI 0x12,4
(0295) LCD_WRITE_COM(0x3F);
04B0 E30F LDI R16,0x3F
04B1 DF32 RCALL _LCD_WRITE_COM
(0296) LCD_WRITE_COM(0xC0);
04B2 EC00 LDI R16,0xC0
04B3 DF30 RCALL _LCD_WRITE_COM
(0297) for(k=0;k<8;k++)
04B4 2744 CLR R20
04B5 C023 RJMP 0x04D9
(0298) {
(0299) LCD_WRITE_COM(0xB8+k); //起始行,每页有八行
04B6 2F04 MOV R16,R20
04B7 5408 SUBI R16,0x48
04B8 DF2B RCALL _LCD_WRITE_COM
(0300) LCD_WRITE_COM(0x40); //起始列,列自动加一
04B9 E400 LDI R16,0x40
04BA DF29 RCALL _LCD_WRITE_COM
(0301) for(i=0;i<4;i++)
04BB 2766 CLR R22
04BC C019 RJMP 0x04D6
(0302) for(j=0;j<16;j++)
04BD 24AA CLR R10
04BE C013 RJMP 0x04D2
(0303) {
(0304) LCD_WRITE_DAT(Tab_pic2[i+4+k*8][j]);
04BF E088 LDI R24,0x8
04C0 9F84 MUL R24,R20
04C1 2F86 MOV R24,R22
04C2 5F8C SUBI R24,0xFC
04C3 0D80 ADD R24,R0
04C4 E190 LDI R25,0x10
04C5 9F98 MUL R25,R24
04C6 0110 MOVW R2,R0
04C7 EF8C LDI R24,0xFC
04C8 E092 LDI R25,2
04C9 0E28 ADD R2,R24
04CA 1E39 ADC R3,R25
04CB 2DEA MOV R30,R10
04CC 27FF CLR R31
04CD 0DE2 ADD R30,R2
04CE 1DF3 ADC R31,R3
04CF 9104 LPM R16,0(Z)
04D0 DEFC RCALL _LCD_WRITE_DAT
04D1 94A3 INC R10
04D2 2D8A MOV R24,R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -