📄 32x16hanzi.lst
字号:
08B3 E090 LDI R25,0
08B4 0FE8 ADD R30,R24
08B5 1FF9 ADC R31,R25
08B6 90C4 LPM R12,0(Z)
(0123) move_to_buffer (d0,d1);
08B7 2D2C MOV R18,R12
08B8 2733 CLR R19
08B9 2D0E MOV R16,R14
08BA 2711 CLR R17
08BB D040 RCALL _move_to_buffer
(0124) delay(1);
08BC E001 LDI R16,1
08BD E010 LDI R17,0
08BE D0A1 RCALL _delay
08BF 5F4F SUBI R20,0xFF
08C0 4F5F SBCI R21,0xFF
08C1 3140 CPI R20,0x10
08C2 E0E0 LDI R30,0
08C3 075E CPC R21,R30
08C4 F2E4 BLT 0x08A1
08C5 C026 RJMP 0x08EC
(0125) }
(0126) else
(0127) for (k=15; k>=0; k--)
08C6 E04F LDI R20,0xF
08C7 E050 LDI R21,0
(0128) {
(0129) d1 = ASC_MSK[(j*16)+k];
08C8 E180 LDI R24,0x10
08C9 9D8A MUL R24,R10
08CA 01F0 MOVW R30,R0
08CB 0FE4 ADD R30,R20
08CC 1FF5 ADC R31,R21
08CD E584 LDI R24,0x54
08CE E090 LDI R25,0
08CF 0FE8 ADD R30,R24
08D0 1FF9 ADC R31,R25
08D1 90C4 LPM R12,0(Z)
(0130) k--;
08D2 5041 SUBI R20,1
08D3 4050 SBCI R21,0
(0131) d0 = ASC_MSK[(j*16)+k];
08D4 E180 LDI R24,0x10
08D5 9D8A MUL R24,R10
08D6 01F0 MOVW R30,R0
08D7 0FE4 ADD R30,R20
08D8 1FF5 ADC R31,R21
08D9 E584 LDI R24,0x54
08DA E090 LDI R25,0
08DB 0FE8 ADD R30,R24
08DC 1FF9 ADC R31,R25
08DD 90E4 LPM R14,0(Z)
(0132) move_to_buffer (d0,d1);
08DE 2D2C MOV R18,R12
08DF 2733 CLR R19
08E0 2D0E MOV R16,R14
08E1 2711 CLR R17
08E2 D019 RCALL _move_to_buffer
(0133) delay(1);
08E3 E001 LDI R16,1
08E4 E010 LDI R17,0
08E5 D07A RCALL _delay
08E6 5041 SUBI R20,1
08E7 4050 SBCI R21,0
08E8 3040 CPI R20,0
08E9 E0E0 LDI R30,0
08EA 075E CPC R21,R30
08EB F6E4 BGE 0x08C8
(0134) }
(0135) i++;
08EC 9563 INC R22
08ED 2FE6 MOV R30,R22
08EE 27FF CLR R31
08EF 840A LDD R0,Y+10
08F0 841B LDD R1,Y+11
08F1 0DE0 ADD R30,R0
08F2 1DF1 ADC R31,R1
08F3 8020 LDD R2,Z+0
08F4 2433 CLR R3
08F5 1432 CP R3,R2
08F6 F408 BCC 0x08F8
08F7 CEFD RJMP 0x07F5
(0136) }
(0137) }
(0138) }
08F8 940E098D CALL pop_gset5
08FA 9622 ADIW R28,2
08FB 9508 RET
_move_to_buffer:
i --> R20
d1 --> R18
d0 --> R16
08FC 940E0990 CALL push_gset1
(0139) /******************** 数据移入缓存*********************/
(0140) // d0 移入数据高八位
(0141) // d1 移入数据低八位
(0142) void move_to_buffer (uchar d0,uchar d1)
(0143) {
(0144) uchar i;
(0145) if ( dir_f == right)//判断移动方向
08FE 90200148 LDS R2,_dir_f
0900 2022 TST R2
0901 F4E9 BNE 0x091F
(0146) {
(0147) for (i=0; i<(buffer_long-2); i++)
0902 2744 CLR R20
0903 C014 RJMP 0x0918
(0148) {
(0149) display_buffer[buffer_long-1-i] = display_buffer[buffer_long-1-i-2];
0904 2E24 MOV R2,R20
0905 2433 CLR R3
0906 E38F LDI R24,0x3F
0907 E090 LDI R25,0
0908 1982 SUB R24,R2
0909 0993 SBC R25,R3
090A 011C MOVW R2,R24
090B E086 LDI R24,6
090C E091 LDI R25,1
090D 01F1 MOVW R30,R2
090E 0FE8 ADD R30,R24
090F 1FF9 ADC R31,R25
0910 8040 LDD R4,Z+0
0911 E088 LDI R24,0x8
0912 E091 LDI R25,1
0913 01F1 MOVW R30,R2
0914 0FE8 ADD R30,R24
0915 1FF9 ADC R31,R25
0916 8240 STD Z+0,R4
0917 9543 INC R20
0918 334E CPI R20,0x3E
0919 F350 BCS 0x0904
(0150) }
(0151) display_buffer[0] = d0;
091A 93000108 STS _display_buffer,R16
(0152) display_buffer[1] = d1;
091C 93200109 STS _display_buffer+1,R18
(0153) }
091E C017 RJMP 0x0936
(0154) else
(0155) {
(0156) for (i=0; i<(buffer_long-2); i++)
091F 2744 CLR R20
0920 C00F RJMP 0x0930
(0157) {
(0158) display_buffer[i] = display_buffer[i+2];
0921 E08A LDI R24,0xA
0922 E091 LDI R25,1
0923 2FE4 MOV R30,R20
0924 27FF CLR R31
0925 0FE8 ADD R30,R24
0926 1FF9 ADC R31,R25
0927 8020 LDD R2,Z+0
0928 E088 LDI R24,0x8
0929 E091 LDI R25,1
092A 2FE4 MOV R30,R20
092B 27FF CLR R31
092C 0FE8 ADD R30,R24
092D 1FF9 ADC R31,R25
092E 8220 STD Z+0,R2
092F 9543 INC R20
0930 334E CPI R20,0x3E
0931 F378 BCS 0x0921
(0159) }
(0160) display_buffer[buffer_long-2] = d0;
0932 93000146 STS 0x146,R16
(0161) display_buffer[buffer_long-1] = d1;
0934 93200147 STS 0x147,R18
(0162) }
(0163) }
0936 940E0993 CALL pop_gset1
0938 9508 RET
_scan_led:
scan_c --> R20
buf_c --> R22
0939 940E09B7 CALL push_lset
093B 940E09A7 CALL push_gset2
(0164) /*********************显示数据扫描********************/
(0165) #pragma interrupt_handler scan_led:9
(0166) void scan_led (void)
(0167) {
(0168) uchar buf_c,scan_c=0;
093D 2744 CLR R20
(0169) TCNT1H = T1_TIME_H; //reload counter high value
093E EE87 LDI R24,0xE7
093F BD8D OUT 0x2D,R24
(0170) TCNT1L = T1_TIME_L;; //reload counter low value
0940 E580 LDI R24,0x50
0941 BD8C OUT 0x2C,R24
(0171) for (buf_c=0; buf_c<buffer_long;)
0942 2766 CLR R22
0943 C015 RJMP 0x0959
(0172) {
(0173) //LED_DDR_LOW = 0xff;
(0174) //LED_DDR_HIGH = 0xff;
(0175) LED_DATA_HIGH = display_buffer[buf_c];
0944 E088 LDI R24,0x8
0945 E091 LDI R25,1
0946 2FE6 MOV R30,R22
0947 27FF CLR R31
0948 0FE8 ADD R30,R24
0949 1FF9 ADC R31,R25
094A 8020 LDD R2,Z+0
094B BA28 OUT 0x18,R2
(0176) buf_c++;
094C 9563 INC R22
(0177) LED_DATA_LOW = display_buffer[buf_c];
094D 2FE6 MOV R30,R22
094E 27FF CLR R31
094F 0FE8 ADD R30,R24
0950 1FF9 ADC R31,R25
0951 8020 LDD R2,Z+0
0952 BA2B OUT 0x1B,R2
(0178) buf_c++;
0953 9563 INC R22
(0179) LED_SCAN_DATA = scan_c;
0954 BB45 OUT 0x15,R20
(0180) delay(8);
0955 E008 LDI R16,0x8
0956 E010 LDI R17,0
0957 D008 RCALL _delay
(0181) //LED_DDR_LOW = 0x00;
(0182) //LED_DDR_HIGH = 0x00;
(0183) scan_c++;
0958 9543 INC R20
0959 3460 CPI R22,0x40
095A F348 BCS 0x0944
(0184) }
(0185) }
095B 940E098A CALL pop_gset2
095D 940E09CE CALL pop_lset
095F 9518 RETI
_delay:
i --> R20
j --> R22
d_time --> R16
0960 940E09A7 CALL push_gset2
(0186)
(0187) /**********************延时子程序*********************/
(0188) void delay (uchar d_time)
(0189) {
(0190) uchar i,j;
(0191) for (i=0; i<=d_time; i++)
0962 2744 CLR R20
0963 C007 RJMP 0x096B
(0192) {
(0193) j=25;
0964 E169 LDI R22,0x19
(0194) while(j--);
0965 2E26 MOV R2,R22
0966 2433 CLR R3
0967 5061 SUBI R22,1
0968 2022 TST R2
0969 F7D9 BNE 0x0965
096A 9543 INC R20
096B 1704 CP R16,R20
096C F7B8 BCC 0x0964
(0195) }
(0196) }
096D 940E098A CALL pop_gset2
096F 9508 RET
FILE: E:\32x16汉字\main.c
(0001) /**********************************************
(0002) 功能:32x16LED汉字字幕程序
(0003) 编译:ICC AVR
(0004) 作者:刘伟
(0005) **********************************************/
(0006) #include <32x16led.h>
(0007) void main (void)
(0008) {
_main:
0970 C017 RJMP 0x0988
(0009) while (1)
(0010) {
(0011) led_initial();
0971 DE4B RCALL _led_initial
(0012) print_char("TEST LED 0123456789 abc");
0972 EF00 LDI R16,0xF0
0973 E010 LDI R17,0
0974 DE7A RCALL _print_char
(0013) print_char("我爱金鱼");
0975 EE07 LDI R16,0xE7
0976 E010 LDI R17,0
0977 DE77 RCALL _print_char
(0014) delay(50);
0978 E302 LDI R16,0x32
0979 DFE6 RCALL _delay
(0015) // led_initial();
(0016) print_char("自己编的练习程序,");
097A ED05 LDI R16,0xD5
097B E010 LDI R17,0
097C DE72 RCALL _print_char
(0017) print_char("显示效果与延时参数和电脑速度有很大关系.");
097D EA0D LDI R16,0xAD
097E E010 LDI R17,0
097F DE6F RCALL _print_char
(0018) print_char("我的电脑太差运行起来老是一顿一顿的^_^");
0980 E807 LDI R16,0x87
0981 E010 LDI R17,0
0982 DE6C RCALL _print_char
(0019) print_char("相信换台好点的电脑会有更好的效果! 刘伟");
0983 E600 LDI R16,0x60
0984 E010 LDI R17,0
0985 DE69 RCALL _print_char
(0020) delay(50);
0986 E302 LDI R16,0x32
0987 DFD8 RCALL _delay
0988 CFE8 RJMP 0x0971
(0021)
(0022) }
(0023) }
FILE: <library>
0989 9508 RET
pop_gset2:
098A E0E2 LDI R30,2
098B 940C0994 JMP pop
pop_gset5:
098D 27EE CLR R30
098E 940C0994 JMP pop
push_gset1:
0990 935A ST R21,-Y
0991 934A ST R20,-Y
0992 9508 RET
pop_gset1:
0993 E0E1 LDI R30,1
pop:
0994 9149 LD R20,Y+
0995 9159 LD R21,Y+
0996 FDE0 SBRC R30,0
0997 9508 RET
0998 9169 LD R22,Y+
0999 9179 LD R23,Y+
099A FDE1 SBRC R30,1
099B 9508 RET
099C 90A9 LD R10,Y+
099D 90B9 LD R11,Y+
099E FDE2 SBRC R30,2
099F 9508 RET
09A0 90C9 LD R12,Y+
09A1 90D9 LD R13,Y+
09A2 FDE3 SBRC R30,3
09A3 9508 RET
09A4 90E9 LD R14,Y+
09A5 90F9 LD R15,Y+
09A6 9508 RET
push_gset2:
09A7 937A ST R23,-Y
09A8 936A ST R22,-Y
09A9 940C0990 JMP push_gset1
push_gset3:
09AB 92BA ST R11,-Y
09AC 92AA ST R10,-Y
09AD 940C09A7 JMP push_gset2
push_gset4:
09AF 92DA ST R13,-Y
09B0 92CA ST R12,-Y
09B1 940C09AB JMP push_gset3
push_gset5:
09B3 92FA ST R15,-Y
09B4 92EA ST R14,-Y
09B5 940C09AF JMP push_gset4
push_lset:
09B7 93FA ST R31,-Y
09B8 93EA ST R30,-Y
09B9 93BA ST R27,-Y
09BA 93AA ST R26,-Y
09BB 939A ST R25,-Y
09BC 938A ST R24,-Y
09BD 933A ST R19,-Y
09BE 932A ST R18,-Y
09BF 931A ST R17,-Y
09C0 930A ST R16,-Y
09C1 929A ST R9,-Y
09C2 928A ST R8,-Y
09C3 927A ST R7,-Y
09C4 926A ST R6,-Y
09C5 925A ST R5,-Y
09C6 924A ST R4,-Y
09C7 923A ST R3,-Y
09C8 922A ST R2,-Y
09C9 921A ST R1,-Y
09CA 920A ST R0,-Y
09CB B60F IN R0,0x3F
09CC 920A ST R0,-Y
09CD 9508 RET
pop_lset:
09CE 9009 LD R0,Y+
09CF BE0F OUT 0x3F,R0
09D0 9009 LD R0,Y+
09D1 9019 LD R1,Y+
09D2 9029 LD R2,Y+
09D3 9039 LD R3,Y+
09D4 9049 LD R4,Y+
09D5 9059 LD R5,Y+
09D6 9069 LD R6,Y+
09D7 9079 LD R7,Y+
09D8 9089 LD R8,Y+
09D9 9099 LD R9,Y+
09DA 9109 LD R16,Y+
09DB 9119 LD R17,Y+
09DC 9129 LD R18,Y+
09DD 9139 LD R19,Y+
09DE 9189 LD R24,Y+
09DF 9199 LD R25,Y+
09E0 91A9 LD R26,Y+
09E1 91B9 LD R27,Y+
09E2 91E9 LD R30,Y+
09E3 91F9 LD R31,Y+
09E4 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -