📄 led128x64.lst
字号:
77D 0FE0 ADD R30,R16
77E 1FF1 ADC R31,R17
77F 9024 LPM R2,104(Z)
780 E68A LDI R24,0x6A
781 E090 LDI R25,0
782 2FE4 MOV R30,R20
783 27FF CLR R31
784 0FEE LSL R30
785 1FFF ROL R31
786 0FE8 ADD R30,R24
787 1FF9 ADC R31,R25
788 8220 STD Z+0,R2
789 9543 INC R20
78A 3048 CPI R20,0x8
78B F408 BCC 0x078D
78C CFCB RJMP 0x0758
78D 9149 LD R20,Y+
78E 9508 RET
_display:
inc --> R22
temp --> R14
temp1 --> R12
i --> R20
tempyid --> R14
s --> R10
78F 940E 0869 CALL push_xgsetF0FC
(0112) }
(0113) }
(0114)
(0115) /*********************************************************
(0116) 函数名:void display(void)
(0117) 功能:显示刷新
(0118) 输入:
(0119) 输出:
(0120) /*********************************************************/
(0121) void display(void)
(0122) {
(0123) uchar i = Move;
791 9140 0067 LDS R20,Move
(0124) uchar s;
(0125) uchar inc,tempyid,temp,temp1=0;
793 24CC CLR R12
(0126)
(0127) if(i<8)
794 3048 CPI R20,0x8
795 F410 BCC 0x0798
(0128) inc=0;
796 2766 CLR R22
797 C001 RJMP 0x0799
(0129) else
(0130) inc=1;
798 E061 LDI R22,1
(0131) for(s=0+inc;s<screen_size*2+inc;s++) //发送16字节数据
799 2EA6 MOV R10,R22
79A C02A RJMP 0x07C5
(0132) {
(0133) if(i<8)
79B 3048 CPI R20,0x8
79C F410 BCC 0x079F
(0134) tempyid=i;
79D 2EE4 MOV R14,R20
79E C003 RJMP 0x07A2
(0135) else
(0136) tempyid=i-8;
79F 2F84 MOV R24,R20
7A0 5088 SUBI R24,0x8
7A1 2EE8 MOV R14,R24
(0137) temp=((BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid)));
7A2 E018 LDI R17,0x8
7A3 191E SUB R17,R14
7A4 E78A LDI R24,0x7A
7A5 E090 LDI R25,0
7A6 2DEA MOV R30,R10
7A7 27FF CLR R31
7A8 0FE8 ADD R30,R24
7A9 1FF9 ADC R31,R25
7AA 8100 LDD R16,Z+0
7AB 940E 087E CALL lsl8
7AD 2E20 MOV R2,R16
7AE E789 LDI R24,0x79
7AF E090 LDI R25,0
7B0 2DEA MOV R30,R10
7B1 27FF CLR R31
7B2 0FE8 ADD R30,R24
7B3 1FF9 ADC R31,R25
7B4 8100 LDD R16,Z+0
7B5 2D1E MOV R17,R14
7B6 940E 0884 CALL lsr8
7B8 2EE0 MOV R14,R16
7B9 28E2 OR R14,R2
(0138) HC595_send_2byte(temp,BUFF_1[temp1]); //发送数据
7BA E689 LDI R24,0x69
7BB E090 LDI R25,0
7BC 2DEC MOV R30,R12
7BD 27FF CLR R31
7BE 0FE8 ADD R30,R24
7BF 1FF9 ADC R31,R25
7C0 8120 LDD R18,Z+0
7C1 2D0E MOV R16,R14
7C2 DF3B RCALL _HC595_send_2byte
(0139) temp1++;
7C3 94C3 INC R12
7C4 94A3 INC R10
7C5 2F86 MOV R24,R22
7C6 5F80 SUBI R24,0xF0
7C7 16A8 CP R10,R24
7C8 F290 BCS 0x079B
7C9 940C 085E JMP pop_xgsetF0FC
(0140) }
(0141) }
(0142)
(0143)
(0144) void port_init(void)
(0145) {
(0146) PORTA = 0x00;
_port_init:
7CB 2422 CLR R2
7CC BA2B OUT 0x1B,R2
(0147) DDRA = 0xFF;
7CD EF8F LDI R24,0xFF
7CE BB8A OUT 0x1A,R24
(0148)
(0149) PORTB = 0x00;
7CF BA28 OUT 0x18,R2
(0150) DDRB = 0xFF;
7D0 BB87 OUT 0x17,R24
(0151)
(0152) PORTC = 0x00; //m103 output only
7D1 BA25 OUT 0x15,R2
(0153) DDRC = 0xFF;
7D2 BB84 OUT 0x14,R24
(0154)
(0155) PORTD = 0x00;
7D3 BA22 OUT 0x12,R2
(0156) DDRD = 0xFF;
7D4 BB81 OUT 0x11,R24
7D5 9508 RET
(0157) }
(0158)
(0159) //call this routine to initialize all peripherals
(0160) void init_devices(void)
(0161) {
(0162) //stop errant interrupts until set up
(0163) CLI(); //disable all interrupts
_init_devices:
7D6 94F8 BCLR 7
(0164) port_init();
7D7 DFF3 RCALL _port_init
(0165)
(0166) MCUCR = 0x00;
7D8 2422 CLR R2
7D9 BE25 OUT 0x35,R2
(0167) GICR = 0x00;
7DA BE2B OUT 0x3B,R2
(0168) TIMSK = 0x00; //timer interrupt sources
7DB BE29 OUT 0x39,R2
(0169) SEI(); //re-enable interrupts
7DC 9478 BSET 7
7DD 9508 RET
(0170) //all peripherals are now initialized
(0171) }
(0172)
(0173)
(0174) void main(void)
(0175) {
(0176) init_devices();
_main:
7DE DFF7 RCALL _init_devices
7DF C07C RJMP 0x085C
(0177) //insert your functional code here...
(0178)
(0179) while(1) //重复循环显示
(0180) {
(0181) for(disrow=0;disrow<16;disrow++)
7E0 2422 CLR R2
7E1 9220 0068 STS disrow,R2
7E3 C029 RJMP 0x080D
(0182) {
(0183) PORTA=0x18; //关闭显示,消影
7E4 E188 LDI R24,0x18
7E5 BB8B OUT 0x1B,R24
(0184)
(0185) Move_L(OURAVR,zimo); //上屏移动显示OURAVR
7E6 9120 0062 LDS R18,zimo
7E8 9130 0063 LDS R19,zimo+1
7EA E504 LDI R16,0x54
7EB E011 LDI R17,1
7EC DF28 RCALL _Move_L
(0186)
(0187) if(flash_flag==0)
7ED 9020 0064 LDS R2,flash_flag
7EF 2022 TST R2
7F0 F429 BNE 0x07F6
(0188) display_chinese(hello,0);//下屏显示hello
7F1 2722 CLR R18
7F2 E504 LDI R16,0x54
7F3 E01C LDI R17,0xC
7F4 DF60 RCALL _display_chinese
7F5 C004 RJMP 0x07FA
(0189) else
(0190) display_chinese(QQ,0); //下屏picture
7F6 2722 CLR R18
7F7 E504 LDI R16,0x54
7F8 E010 LDI R17,0
7F9 DF5B RCALL _display_chinese
(0191)
(0192) display(); //刷新显示数据
7FA DF94 RCALL _display
(0193)
(0194) HC595_lock_H; //锁存为高,595锁存信号
7FB 9AAE SBI 0x15,6
(0195) PORTA=sw[disrow]; //输出行信号
7FC E584 LDI R24,0x54
7FD E09D LDI R25,0xD
7FE 91E0 0068 LDS R30,disrow
800 27FF CLR R31
801 0FE8 ADD R30,R24
802 1FF9 ADC R31,R25
803 9024 LPM R2,104(Z)
804 BA2B OUT 0x1B,R2
(0196)
(0197) delay_nus(200);
805 EC08 LDI R16,0xC8
806 E010 LDI R17,0
807 DED0 RCALL _delay_nus
808 9180 0068 LDS R24,disrow
80A 5F8F SUBI R24,0xFF
80B 9380 0068 STS disrow,R24
80D 9180 0068 LDS R24,disrow
80F 3180 CPI R24,0x10
810 F298 BCS 0x07E4
(0198) }
(0199)
(0200) if(speed++>=0) //控制上屏移动显示速度
811 9020 0066 LDS R2,speed
813 2433 CLR R3
814 2D82 MOV R24,R2
815 5F8F SUBI R24,0xFF
816 9380 0066 STS speed,R24
818 2D82 MOV R24,R2
819 3080 CPI R24,0
81A F150 BCS 0x0845
(0201) {
(0202) speed=0 ;
81B 2422 CLR R2
81C 9220 0066 STS speed,R2
(0203) if(Move++>=15)
81E 9020 0067 LDS R2,Move
820 2433 CLR R3
821 2D82 MOV R24,R2
822 5F8F SUBI R24,0xFF
823 9380 0067 STS Move,R24
825 2D82 MOV R24,R2
826 308F CPI R24,0xF
827 F0E8 BCS 0x0845
(0204) {
(0205) Move=0; //16列移位计数器清零
828 2422 CLR R2
829 9220 0067 STS Move,R2
(0206) zimo=zimo+32; //取字模计数器加32,准备下一个字
82B 9180 0062 LDS R24,zimo
82D 9190 0063 LDS R25,zimo+1
82F 9680 ADIW R24,0x20
830 9390 0063 STS zimo+1,R25
832 9380 0062 STS zimo,R24
(0207) if(zimo>=(hanzi_size_S*32)) //字模是否到最后来。
834 9020 0060 LDS R2,hanzi_size_S
836 E280 LDI R24,0x20
837 9D82 MUL R24,R2
838 9020 0062 LDS R2,zimo
83A 9030 0063 LDS R3,zimo+1
83C 1420 CP R2,R0
83D 0431 CPC R3,R1
83E F030 BCS 0x0845
(0208) zimo=0; //从头在来。
83F 2422 CLR R2
840 2433 CLR R3
841 9230 0063 STS zimo+1,R3
843 9220 0062 STS zimo,R2
(0209) }
(0210) }
(0211)
(0212) if(flash_cnt++>=100)//下屏显示切换时间
845 9140 0065 LDS R20,flash_cnt
847 2755 CLR R21
848 2F84 MOV R24,R20
849 5F8F SUBI R24,0xFF
84A 9380 0065 STS flash_cnt,R24
84C 3644 CPI R20,0x64
84D F070 BCS 0x085C
(0213) {
(0214) flash_cnt=0;
84E 2422 CLR R2
84F 9220 0065 STS flash_cnt,R2
(0215) if(flash_flag==0)
851 9020 0064 LDS R2,flash_flag
853 2022 TST R2
854 F421 BNE 0x0859
(0216) flash_flag=1;
855 E081 LDI R24,1
856 9380 0064 STS flash_flag,R24
858 C003 RJMP 0x085C
(0217) else
(0218) flash_flag=0;
FILE: <library>
859 2422 CLR R2
85A 9220 0064 STS flash_flag,R2
85C CF83 RJMP 0x07E0
85D 9508 RET
pop_xgsetF0FC:
85E 90A9 LD R10,Y+
85F 90B9 LD R11,Y+
860 90C9 LD R12,Y+
861 90D9 LD R13,Y+
862 90E9 LD R14,Y+
863 90F9 LD R15,Y+
864 9149 LD R20,Y+
865 9159 LD R21,Y+
866 9169 LD R22,Y+
867 9179 LD R23,Y+
868 9508 RET
push_xgsetF0FC:
869 937A ST R23,-Y
86A 936A ST R22,-Y
push_xgset30FC:
86B 935A ST R21,-Y
86C 934A ST R20,-Y
push_xgset00FC:
86D 92FA ST R15,-Y
86E 92EA ST R14,-Y
push_xgset003C:
86F 92DA ST R13,-Y
870 92CA ST R12,-Y
871 92BA ST R11,-Y
872 92AA ST R10,-Y
873 9508 RET
push_xgset300C:
874 935A ST R21,-Y
875 934A ST R20,-Y
876 92BA ST R11,-Y
877 92AA ST R10,-Y
878 9508 RET
pop_xgset300C:
879 90A9 LD R10,Y+
87A 90B9 LD R11,Y+
87B 9149 LD R20,Y+
87C 9159 LD R21,Y+
87D 9508 RET
lsl8:
87E 2311 TST R17
87F F019 BEQ 0x0883
880 0F00 LSL R16
881 951A DEC R17
882 CFFB RJMP lsl8
883 9508 RET
lsr8:
884 2311 TST R17
885 F019 BEQ 0x0889
886 9506 LSR R16
887 951A DEC R17
888 CFFB RJMP lsr8
889 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -