📄 led128x64.lst
字号:
__start:
__text_start:
6B3 E5CF LDI R28,0x5F
6B4 E0D4 LDI R29,4
6B5 BFCD OUT 0x3D,R28
6B6 BFDE OUT 0x3E,R29
6B7 51C0 SUBI R28,0x10
6B8 40D0 SBCI R29,0
6B9 EA0A LDI R16,0xAA
6BA 8308 STD Y+0,R16
6BB 2400 CLR R0
6BC E6E2 LDI R30,0x62
6BD E0F0 LDI R31,0
6BE E010 LDI R17,0
6BF 38E9 CPI R30,0x89
6C0 07F1 CPC R31,R17
6C1 F011 BEQ 0x06C4
6C2 9201 ST R0,Z+
6C3 CFFB RJMP 0x06BF
6C4 8300 STD Z+0,R16
6C5 E6E4 LDI R30,0x64
6C6 E0FD LDI R31,0xD
6C7 E6A0 LDI R26,0x60
6C8 E0B0 LDI R27,0
6C9 E01D LDI R17,0xD
6CA E000 LDI R16,0
6CB BF0B OUT 0x3B,R16
6CC 36E6 CPI R30,0x66
6CD 07F1 CPC R31,R17
6CE F021 BEQ 0x06D3
6CF 95C8 LPM
6D0 9631 ADIW R30,1
6D1 920D ST R0,X+
6D2 CFF9 RJMP 0x06CC
6D3 940E 07DE CALL _main
_exit:
6D5 CFFF RJMP _exit
FILE: E:\wuyong\ICC_study\icc713A\include\delay.h
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) // CPU 8M
(0006)
(0007) void delay_1us(void); //1us延时函数
(0008) void delay_nus(unsigned int n); //N us延时函数
(0009) void delay_1ms(void); //1ms延时函数
(0010) void delay_nms(unsigned int n); //N ms延时函数
(0011)
(0012)
(0013) void delay_1us(void) //1us延时函数
(0014) {
(0015) asm("nop");
_delay_1us:
6D6 0000 NOP
6D7 9508 RET
_delay_nus:
i --> R20
n --> R10
6D8 940E 0874 CALL push_xgset300C
6DA 0158 MOVW R10,R16
(0016) }
(0017)
(0018) void delay_nus(unsigned int n) //N us延时函数
(0019) {
(0020) unsigned int i=0;
6DB 2744 CLR R20
6DC 2755 CLR R21
(0021) for (i=0;i<n;i++)
6DD C003 RJMP 0x06E1
(0022) delay_1us();
6DE DFF7 RCALL _delay_1us
6DF 5F4F SUBI R20,0xFF
6E0 4F5F SBCI R21,0xFF
6E1 154A CP R20,R10
6E2 055B CPC R21,R11
6E3 F3D0 BCS 0x06DE
6E4 940C 0879 JMP pop_xgset300C
(0023) }
(0024)
(0025) void delay_1ms(void) //1ms延时函数
(0026) {
(0027) unsigned int i;
(0028) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
6E6 2700 CLR R16
6E7 2711 CLR R17
6E8 C002 RJMP 0x06EB
6E9 5F0F SUBI R16,0xFF
6EA 4F1F SBCI R17,0xFF
6EB 3704 CPI R16,0x74
6EC E0E4 LDI R30,4
6ED 071E CPC R17,R30
6EE F3D0 BCS 0x06E9
6EF 9508 RET
_delay_nms:
i --> R20
n --> R10
6F0 940E 0874 CALL push_xgset300C
6F2 0158 MOVW R10,R16
(0029) }
(0030)
(0031) void delay_nms(unsigned int n) //N ms延时函数
(0032) {
(0033) unsigned int i=0;
6F3 2744 CLR R20
6F4 2755 CLR R21
(0034) for (i=0;i<n;i++)
6F5 C003 RJMP 0x06F9
(0035) delay_1ms();
6F6 DFEF RCALL _delay_1ms
6F7 5F4F SUBI R20,0xFF
6F8 4F5F SBCI R21,0xFF
6F9 154A CP R20,R10
6FA 055B CPC R21,R11
6FB F3D0 BCS 0x06F6
6FC 940C 0879 JMP pop_xgset300C
_HC595_send_2byte:
i --> R20
byte2 --> R18
byte1 --> R16
6FE 934A ST R20,-Y
FILE: E:\wuyong\ICC_study\latest_program\LED128x64\LED128x64\main.c
(0001) // ICC-AVR application builder : 2008-03-28
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) // 编写:wuyong Email:wuyong_ah@163.com
(0005)
(0006) // 自做LED点阵屏专用驱动板与LED 点阵屏接口定义
(0007) // A ---> PA0 B ---> PA1
(0008) // C ---> PA2 D! ---> PA3
(0009) // D ---> PA4 SC ---> PC7(595_clk)
(0010) // RC ---> PC6(595_lock) DATA1---> PD7(595_data)
(0011) // DATA2---> PD6(595_data)
(0012) // 上屏数据输出 ---> 下屏数据输入
(0013)
(0014) #include <iom16v.h>
(0015) #include <macros.h>
(0016) #include <delay.h>
(0017) #include "hanzi.h"
(0018)
(0019) #define uchar unsigned char
(0020) #define uint unsigned int
(0021)
(0022) extern const uchar QQ[]; //QQ图片
(0023) extern const uchar OURAVR[]; //OURAVR
(0024) extern const uchar hello[]; //hello
(0025)
(0026) const uchar sw[16]={0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,
(0027) 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x08,}; //156的驱动代码,根据138的真值表计算而来。
(0028)
(0029) #pragma data: data
(0030)
(0031) #define screen_size 8 //半屏显示汉字个数:8 32*128
(0032) uchar hanzi_size_S = 79; //上屏移动显示汉字总个数
(0033)
(0034) uchar BUFF[screen_size*2]; //缓存
(0035) uchar BUFF_1[screen_size*2]; //缓存
(0036) uchar disrow; //disrow 为16行变量
(0037) uchar Move;
(0038) uchar speed;
(0039) uchar flash_cnt;
(0040) uchar flash_flag;
(0041) uint zimo;
(0042) uchar display_flag=0;
(0043)
(0044) void Move_L(const uchar *p,uint f); //左调整数据
(0045) void display_chinese(const uchar *p,uchar num);//静态显示
(0046) void display (void); //显示数据刷新
(0047)
(0048) #define HC595_data1_H() PORTD |= BIT(PD7)
(0049) #define HC595_data1_L() PORTD &=~BIT(PD7)
(0050) #define HC595_data2_H() PORTD |= BIT(PD6)
(0051) #define HC595_data2_L() PORTD &=~BIT(PD6)
(0052)
(0053) #define HC595_clk_H PORTC |= BIT(PC7)
(0054) #define HC595_clk_L PORTC &=~BIT(PC7)
(0055)
(0056) #define HC595_lock_H PORTC |= BIT(PC6)
(0057) #define HC595_lock_L PORTC &=~BIT(PC6)
(0058)
(0059) /********************************************************
(0060) * 函数说明:595发送一个字节数据 *
(0061) ********************************************************/
(0062) void HC595_send_2byte(uchar byte1,uchar byte2)
(0063) {
(0064) uchar i;
(0065)
(0066) HC595_lock_L;
6FF 98AE CBI 0x15,6
(0067) for (i=0x01;i!=0;i=i<<1)
700 E041 LDI R20,1
701 C00F RJMP 0x0711
(0068) {
(0069) if(byte1&i)
702 2E20 MOV R2,R16
703 2224 AND R2,R20
704 F011 BEQ 0x0707
(0070) HC595_data1_H();
705 9A97 SBI 0x12,7
706 C001 RJMP 0x0708
(0071) else
(0072) HC595_data1_L();
707 9897 CBI 0x12,7
(0073) if(byte2&i)
708 2E22 MOV R2,R18
709 2224 AND R2,R20
70A F011 BEQ 0x070D
(0074) HC595_data2_H();
70B 9A96 SBI 0x12,6
70C C001 RJMP 0x070E
(0075) else
(0076) HC595_data2_L();
70D 9896 CBI 0x12,6
(0077)
(0078) HC595_clk_L;
70E 98AF CBI 0x15,7
(0079) HC595_clk_H;
70F 9AAF SBI 0x15,7
710 0F44 LSL R20
711 2344 TST R20
712 F779 BNE 0x0702
713 9149 LD R20,Y+
714 9508 RET
_Move_L:
s --> R20
f --> R18
p --> R10
715 940E 0874 CALL push_xgset300C
717 0158 MOVW R10,R16
(0080) }
(0081) }
(0082)
(0083) /*********************************************************
(0084) 函数名:void Move_L(const uchar *p,uint f)
(0085) 功能:缓存数据 左移
(0086) 输入:
(0087) 输出:
(0088) /*********************************************************/
(0089) void Move_L(const uchar *p,uint f)
(0090) {
(0091) signed char s;
(0092) for(s=screen_size;s>=0;s--) //
718 E048 LDI R20,0x8
719 C036 RJMP 0x0750
(0093) {
(0094) BUFF[2*s+1]=p[f+32*s+2*disrow];
71A E200 LDI R16,0x20
71B 2F14 MOV R17,R20
71C 0201 MULS R16,R17
71D 01F9 MOVW R30,R18
71E 0DE0 ADD R30,R0
71F 1DF1 ADC R31,R1
720 9020 0068 LDS R2,disrow
722 2433 CLR R3
723 0C22 LSL R2
724 1C33 ROL R3
725 0DE2 ADD R30,R2
726 1DF3 ADC R31,R3
727 0DEA ADD R30,R10
728 1DFB ADC R31,R11
729 9024 LPM R2,104(Z)
72A E78A LDI R24,0x7A
72B E090 LDI R25,0
72C 2FE4 MOV R30,R20
72D 27FF CLR R31
72E FDE7 SBRC R30,7
72F 95F0 COM R31
730 0FEE LSL R30
731 1FFF ROL R31
732 0FE8 ADD R30,R24
733 1FF9 ADC R31,R25
734 8220 STD Z+0,R2
(0095) BUFF[2*s]=p[f+1+32*s+2*disrow];
735 0201 MULS R16,R17
736 01F9 MOVW R30,R18
737 9631 ADIW R30,1
738 0DE0 ADD R30,R0
739 1DF1 ADC R31,R1
73A 9020 0068 LDS R2,disrow
73C 2433 CLR R3
73D 0C22 LSL R2
73E 1C33 ROL R3
73F 0DE2 ADD R30,R2
740 1DF3 ADC R31,R3
741 0DEA ADD R30,R10
742 1DFB ADC R31,R11
743 9024 LPM R2,104(Z)
744 E789 LDI R24,0x79
745 E090 LDI R25,0
746 2FE4 MOV R30,R20
747 27FF CLR R31
748 FDE7 SBRC R30,7
749 95F0 COM R31
74A 0FEE LSL R30
74B 1FFF ROL R31
74C 0FE8 ADD R30,R24
74D 1FF9 ADC R31,R25
74E 8220 STD Z+0,R2
74F 954A DEC R20
750 3040 CPI R20,0
751 F00C BLT 0x0753
752 CFC7 RJMP 0x071A
753 940C 0879 JMP pop_xgset300C
_display_chinese:
s --> R20
num --> R18
p --> R16
755 934A ST R20,-Y
(0096) }
(0097) }
(0098)
(0099) /*********************************************************
(0100) 函数名:void display_chinese(const uchar *p,uchar num)
(0101) 功能:显示汉字
(0102) 输入:
(0103) 输出:
(0104) /*********************************************************/
(0105) void display_chinese(const uchar *p,uchar num)
(0106) {
(0107) uchar s;
(0108) for(s=0;s<screen_size;s++)
756 2744 CLR R20
757 C032 RJMP 0x078A
(0109) {
(0110) BUFF_1[2*s]=p[1+32*(s+num)+2*disrow];
758 2E24 MOV R2,R20
759 0E22 ADD R2,R18
75A E280 LDI R24,0x20
75B 9D82 MUL R24,R2
75C 01F0 MOVW R30,R0
75D 9631 ADIW R30,1
75E 9020 0068 LDS R2,disrow
760 2433 CLR R3
761 0C22 LSL R2
762 1C33 ROL R3
763 0DE2 ADD R30,R2
764 1DF3 ADC R31,R3
765 0FE0 ADD R30,R16
766 1FF1 ADC R31,R17
767 9024 LPM R2,104(Z)
768 E689 LDI R24,0x69
769 E090 LDI R25,0
76A 2FE4 MOV R30,R20
76B 27FF CLR R31
76C 0FEE LSL R30
76D 1FFF ROL R31
76E 0FE8 ADD R30,R24
76F 1FF9 ADC R31,R25
770 8220 STD Z+0,R2
(0111) BUFF_1[2*s+1]=p[32*(s+num)+2*disrow];
771 2E24 MOV R2,R20
772 0E22 ADD R2,R18
773 E280 LDI R24,0x20
774 9D82 MUL R24,R2
775 01F0 MOVW R30,R0
776 9020 0068 LDS R2,disrow
778 2433 CLR R3
779 0C22 LSL R2
77A 1C33 ROL R3
77B 0DE2 ADD R30,R2
77C 1DF3 ADC R31,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -