📄 icc17-1.lst
字号:
092D 1DFB ADC R31,R11
092E 9144 LPM R20,0(Z)
(0107) if(fb)dx=255-dx;
092F 20CC TST R12
0930 F029 BEQ 0x0936
0931 2E24 MOV R2,R20
0932 2433 CLR R3
0933 EF4F LDI R20,0xFF
0934 1942 SUB R20,R2
0935 0953 SBC R21,R3
(0108) lw(xx*8+i,yy,dx);
0936 8348 STD Y+0,R20
0937 852D LDD R18,Y+13
0938 E088 LDI R24,0x8
0939 840B LDD R0,Y+11
093A 9D80 MUL R24,R0
093B 2D00 MOV R16,R0
093C 0F06 ADD R16,R22
093D DF65 RCALL _lw
(0109) dx=p[(2*i+1)+n*32];
093E E280 LDI R24,0x20
093F 9D8E MUL R24,R14
0940 0110 MOVW R2,R0
0941 E082 LDI R24,2
0942 9F86 MUL R24,R22
0943 01F0 MOVW R30,R0
0944 9631 ADIW R30,1
0945 0DE2 ADD R30,R2
0946 1DF3 ADC R31,R3
0947 0DEA ADD R30,R10
0948 1DFB ADC R31,R11
0949 9144 LPM R20,0(Z)
(0110) if(fb)dx=255-dx;
094A 20CC TST R12
094B F029 BEQ 0x0951
094C 2E24 MOV R2,R20
094D 2433 CLR R3
094E EF4F LDI R20,0xFF
094F 1942 SUB R20,R2
0950 0953 SBC R21,R3
(0111) lw(xx*8+i,yy+1,dx);
0951 8348 STD Y+0,R20
0952 852D LDD R18,Y+13
0953 5F2F SUBI R18,0xFF
0954 E088 LDI R24,0x8
0955 840B LDD R0,Y+11
0956 9D80 MUL R24,R0
0957 2D00 MOV R16,R0
0958 0F06 ADD R16,R22
0959 DF49 RCALL _lw
095A 9563 INC R22
095B 3160 CPI R22,0x10
095C F408 BCC 0x095E
095D CFC6 RJMP 0x0924
095E 9621 ADIW R28,1
095F 940E1292 CALL pop_gset5
0961 9624 ADIW R28,4
0962 9508 RET
_display_chinese:
loop --> R20
0963 940E129D CALL push_gset1
0965 9726 SBIW R28,6
(0112) }
(0113) }
(0114) /******************************************/
(0115)
(0116) void display_chinese(void)
(0117) {
(0118) uchar loop;
(0119) for(loop=0;loop<8;loop++)
0966 2744 CLR R20
0967 C00D RJMP 0x0975
(0120) {display_hz(2*loop,0,loop,1,chinese);}
0968 E28C LDI R24,0x2C
0969 E09C LDI R25,0xC
096A 839D STD Y+5,R25
096B 838C STD Y+4,R24
096C E081 LDI R24,1
096D 838A STD Y+2,R24
096E 8348 STD Y+0,R20
096F 2722 CLR R18
0970 E082 LDI R24,2
0971 9F84 MUL R24,R20
0972 2D00 MOV R16,R0
0973 DFA5 RCALL _display_hz
0974 9543 INC R20
0975 3048 CPI R20,0x8
0976 F388 BCS 0x0968
(0121) /****************************************/
(0122) for(loop=0;loop<8;loop++)
0977 2744 CLR R20
0978 C00F RJMP 0x0988
(0123) {display_hz(2*loop,2,loop+8,1,chinese);}
0979 E28C LDI R24,0x2C
097A E09C LDI R25,0xC
097B 839D STD Y+5,R25
097C 838C STD Y+4,R24
097D E081 LDI R24,1
097E 838A STD Y+2,R24
097F 2F84 MOV R24,R20
0980 5F88 SUBI R24,0xF8
0981 8388 STD Y+0,R24
0982 E022 LDI R18,2
0983 E082 LDI R24,2
0984 9F84 MUL R24,R20
0985 2D00 MOV R16,R0
0986 DF92 RCALL _display_hz
0987 9543 INC R20
0988 3048 CPI R20,0x8
0989 F378 BCS 0x0979
(0124)
(0125) /**************************************/
(0126) for(loop=0;loop<8;loop++)
098A 2744 CLR R20
098B C00F RJMP 0x099B
(0127) {display_hz(2*loop,4,loop+16,1,chinese);}
098C E28C LDI R24,0x2C
098D E09C LDI R25,0xC
098E 839D STD Y+5,R25
098F 838C STD Y+4,R24
0990 E081 LDI R24,1
0991 838A STD Y+2,R24
0992 2F84 MOV R24,R20
0993 5F80 SUBI R24,0xF0
0994 8388 STD Y+0,R24
0995 E024 LDI R18,4
0996 E082 LDI R24,2
0997 9F84 MUL R24,R20
0998 2D00 MOV R16,R0
0999 DF7F RCALL _display_hz
099A 9543 INC R20
099B 3048 CPI R20,0x8
099C F378 BCS 0x098C
(0128) /*******************************************/
(0129) for(loop=0;loop<8;loop++)
099D 2744 CLR R20
099E C00F RJMP 0x09AE
(0130) {display_hz(2*loop,6,loop+24,1,chinese);}
099F E28C LDI R24,0x2C
09A0 E09C LDI R25,0xC
09A1 839D STD Y+5,R25
09A2 838C STD Y+4,R24
09A3 E081 LDI R24,1
09A4 838A STD Y+2,R24
09A5 2F84 MOV R24,R20
09A6 5E88 SUBI R24,0xE8
09A7 8388 STD Y+0,R24
09A8 E026 LDI R18,6
09A9 E082 LDI R24,2
09AA 9F84 MUL R24,R20
09AB 2D00 MOV R16,R0
09AC DF6C RCALL _display_hz
09AD 9543 INC R20
09AE 3048 CPI R20,0x8
09AF F378 BCS 0x099F
09B0 9626 ADIW R28,6
09B1 940E12A0 CALL pop_gset1
09B3 9508 RET
_Putstr:
X --> R20
j --> R22
i --> R10
puts --> R12
09B4 940E1297 CALL push_gset4
09B6 2EA2 MOV R10,R18
09B7 0168 MOVW R12,R16
(0131) }
(0132)
(0133) /****************************************/
(0134) /* 一个字串的输出 */
(0135) /****************************************/
(0136) void Putstr(uchar const *puts,uchar i)
(0137) {
(0138) uchar j,X;
(0139) for (j=0;j<i;j++)
09B8 2766 CLR R22
09B9 C009 RJMP 0x09C3
(0140) {
(0141) X = puts[j];
09BA 2FE6 MOV R30,R22
09BB 27FF CLR R31
09BC 0DEC ADD R30,R12
09BD 1DFD ADC R31,R13
09BE 9144 LPM R20,0(Z)
(0142) Putedot(X-0x20); /*ascii码表从0x20开始*/
09BF 2F04 MOV R16,R20
09C0 5200 SUBI R16,0x20
09C1 D006 RCALL _Putedot
09C2 9563 INC R22
09C3 156A CP R22,R10
09C4 F3A8 BCS 0x09BA
09C5 940E128F CALL pop_gset4
09C7 9508 RET
_Putedot:
bakerx --> R20
bakery --> R22
x --> R10
i --> R12
Order --> R10
09C8 940E1297 CALL push_gset4
09CA 2EA0 MOV R10,R16
09CB 9721 SBIW R28,1
(0143) }
(0144) }
(0145) /****************************************/
(0146) /* 半角字符点阵码数据输出 */
(0147) /****************************************/
(0148) void Putedot(uchar Order)
(0149) {
(0150) uchar i,bakerx,bakery; /*共定义4个局部变量 */
(0151) int x; /*偏移量,字符量少的可以定义为UCHAR */
(0152) bakerx = col; /*暂存x,y坐标,已备下半个字符使用 */
09CC 9140008F LDS R20,col
(0153) bakery = row;
09CE 9160008E LDS R22,row
(0154) x=Order*16; /*半角字符,每个字符16字节 */
09D0 E180 LDI R24,0x10
09D1 9D8A MUL R24,R10
09D2 0150 MOVW R10,R0
(0155) /*上半个字符输出,8列 */
(0156) for(i=0;i<8;i++)
09D3 24CC CLR R12
09D4 C02D RJMP 0x0A02
(0157) {
(0158) cbyte = Ezk[x]; /*取点阵码,rom数组 */
09D5 EB8C LDI R24,0xBC
09D6 E090 LDI R25,0
09D7 01F5 MOVW R30,R10
09D8 0FE8 ADD R30,R24
09D9 1FF9 ADC R31,R25
09DA 91E4 LPM R30,0(Z)
09DB 93E0008D STS cbyte,R30
(0159) lw(col,row,cbyte); /*写输出一字节 */
09DD 2E2E MOV R2,R30
09DE 8228 STD Y+0,R2
09DF 9120008E LDS R18,row
09E1 9100008F LDS R16,col
09E3 DEBF RCALL _lw
(0160) x++;
09E4 01C5 MOVW R24,R10
09E5 9601 ADIW R24,1
09E6 015C MOVW R10,R24
(0161) col++;
09E7 9180008F LDS R24,col
09E9 5F8F SUBI R24,0xFF
09EA 9380008F STS col,R24
(0162) if (col==128){col=0;row++;row++;}; /*下一列,如果列越界换行*/
09EC 3880 CPI R24,0x80
09ED F459 BNE 0x09F9
09EE 2422 CLR R2
09EF 9220008F STS col,R2
09F1 9180008E LDS R24,row
09F3 5F8F SUBI R24,0xFF
09F4 9380008E STS row,R24
09F6 5F8F SUBI R24,0xFF
09F7 9380008E STS row,R24
(0163) if (row>7) row=0; /*如果行越界,返回首行 */
09F9 E087 LDI R24,7
09FA 9020008E LDS R2,row
09FC 1582 CP R24,R2
09FD F418 BCC 0x0A01
09FE 2422 CLR R2
09FF 9220008E STS row,R2
0A01 94C3 INC R12
0A02 2D8C MOV R24,R12
0A03 3088 CPI R24,0x8
0A04 F280 BCS 0x09D5
(0164) } /*上半个字符输出结束 */
(0165)
(0166) col = bakerx; /*列对齐 */
0A05 9340008F STS col,R20
(0167) row = bakery+1; /*指向下半个字符行 */
0A07 2F86 MOV R24,R22
0A08 5F8F SUBI R24,0xFF
0A09 9380008E STS row,R24
(0168) /*下半个字符输出,8列 */
(0169) for(i=0;i<8;i++)
0A0B 24CC CLR R12
0A0C C02A RJMP 0x0A37
(0170) {
(0171) cbyte = Ezk[x]; /*取点阵码 */
0A0D EB8C LDI R24,0xBC
0A0E E090 LDI R25,0
0A0F 01F5 MOVW R30,R10
0A10 0FE8 ADD R30,R24
0A11 1FF9 ADC R31,R25
0A12 91E4 LPM R30,0(Z)
0A13 93E0008D STS cbyte,R30
(0172) lw(col,row,cbyte); /*写输出一字节 */
0A15 2E2E MOV R2,R30
0A16 8228 STD Y+0,R2
0A17 9120008E LDS R18,row
0A19 9100008F LDS R16,col
0A1B DE87 RCALL _lw
(0173) x++;
0A1C 01C5 MOVW R24,R10
0A1D 9601 ADIW R24,1
0A1E 015C MOVW R10,R24
(0174) col++;
0A1F 9180008F LDS R24,col
0A21 5F8F SUBI R24,0xFF
0A22 9380008F STS col,R24
(0175) if (col==128){col=0;row=row+2;}; /*下一列,如果列越界换行*/
0A24 3880 CPI R24,0x80
0A25 F441 BNE 0x0A2E
0A26 2422 CLR R2
0A27 9220008F STS col,R2
0A29 9180008E LDS R24,row
0A2B 5F8E SUBI R24,0xFE
0A2C 9380008E STS row,R24
(0176) if (row>7) row=1; /*如果行越界,返回首行 */
0A2E E087 LDI R24,7
0A2F 9020008E LDS R2,row
0A31 1582 CP R24,R2
0A32 F418 BCC 0x0A36
0A33 E081 LDI R24,1
0A34 9380008E STS row,R24
0A36 94C3 INC R12
0A37 2D8C MOV R24,R12
0A38 3088 CPI R24,0x8
0A39 F298 BCS 0x0A0D
(0177) } /*下半个字符输出结束 */
(0178) row=bakery;
0A3A 9360008E STS row,R22
0A3C 9621 ADIW R28,1
0A3D 940E128F CALL pop_gset4
0A3F 9508 RET
_display_tu:
n --> R20
dx --> R12
i --> R10
fb --> R22
0A40 940E1297 CALL push_gset4
0A42 2F60 MOV R22,R16
0A43 9721 SBIW R28,1
(0179) } /*整个字符输出结束 */
(0180) /******************************************************/
(0181) /*---------------显示一幅图片的子函数--------------*/
(0182) /******************************************************/
(0183) void display_tu(uchar fb)
(0184) {
(0185) uchar i,dx,n;
(0186) for(n=0;n<8;n++)
0A44 2744 CLR R20
0A45 C01F RJMP 0x0A65
(0187) {
(0188) for(i=0;i<128;i++)
0A46 24AA CLR R10
0A47 C019 RJMP 0x0A61
(0189) {dx=tu[i+n*128];
0A48 E880 LDI R24,0x80
0A49 9F84 MUL R24,R20
0A4A 2DEA MOV R30,R10
0A4B 27FF CLR R31
0A4C 0DE0 ADD R30,R0
0A4D 1DF1 ADC R31,R1
0A4E E28C LDI R24,0x2C
0A4F E098 LDI R25,0x8
0A50 0FE8 ADD R30,R24
0A51 1FF9 ADC R31,R25
0A52 90C4 LPM R12,0(Z)
(0190) if(fb)dx=255-dx;
0A53 2366 TST R22
0A54 F039 BEQ 0x0A5C
0A55 2C2C MOV R2,R12
0A56 2433 CLR R3
0A57 EF8F LDI R24,0xFF
0A58 E090 LDI R25,0
0A59 2EC8 MOV R12,R24
0A5A 18C2 SUB R12,R2
0A5B 08D3 SBC R13,R3
(0191) lw(i,n,dx);
0A5C 82C8 STD Y+0,R12
0A5D 2F24 MOV R18,R20
0A5E 2D0A MOV R16,R10
0A5F DE43 RCALL _lw
0A60 94A3 INC R10
0A61 2D8A MOV R24,R10
0A62 3880 CPI R24,0x80
0A63 F320 BCS 0x0A48
0A64 9543 INC R20
0A65 3048 CPI R20,0x8
0A66 F2F8 BCS 0x0A46
0A67 9621 ADIW R28,1
0A68 940E128F CALL pop_gset4
0A6A 9508 RET
FILE: D:\文稿\手把手教你学AVR单片机C程序设计\第17章~1\第17章实验程序\icc17-1\display_time.c
(0001) void dis_time(void)
(0002) {
(0003) col=0;row=0;Putedot(year/1000+0x10);
_dis_time:
0A6B 2422 CLR R2
0A6C 9220008F STS col,R2
0A6E 9220008E STS row,R2
0A70 EE28 LDI R18,0xE8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -