📄 display_led.lst
字号:
__start:
__text_start:
0145 E5CF LDI R28,0x5F
0146 E0D2 LDI R29,2
0147 BFCD OUT 0x3D,R28
0148 BFDE OUT 0x3E,R29
0149 51C0 SUBI R28,0x10
014A 40D0 SBCI R29,0
014B EA0A LDI R16,0xAA
014C 8308 STD Y+0,R16
014D 2400 CLR R0
014E E6E0 LDI R30,0x60
014F E0F0 LDI R31,0
0150 E010 LDI R17,0
0151 36E0 CPI R30,0x60
0152 07F1 CPC R31,R17
0153 F011 BEQ 0x0156
0154 9201 ST R0,Z+
0155 CFFB RJMP 0x0151
0156 8300 STD Z+0,R16
0157 E8EA LDI R30,0x8A
0158 E0F2 LDI R31,2
0159 E6A0 LDI R26,0x60
015A E0B0 LDI R27,0
015B E012 LDI R17,2
015C 38EA CPI R30,0x8A
015D 07F1 CPC R31,R17
015E F021 BEQ 0x0163
015F 95C8 LPM
0160 9631 ADIW R30,1
0161 920D ST R0,X+
0162 CFF9 RJMP 0x015C
0163 D07A RCALL _main
_exit:
0164 CFFF RJMP _exit
_DelaymS:
j --> R20
i --> R16
0165 D0A0 RCALL push_gset1
FILE: E:\iccavr代码\实验18_扩展板点阵汉字LED显示\display_led.c
(0001) //******************************************************************************
(0002) // *
(0003) // FileName : 扩展板ledspi.c ICCAVR V6.31A编译 *
(0004) // Function : 高档LED显示屏,滚动显示一个数组 *
(0005) // Date : 2006-11-24 *
(0006) // Version : 1.0 *
(0007) // *
(0008) // Author : 开关电源 hongtusy@163.com *
(0009) // Company : 电子信息技术资源网 http://www.itsn.cn *
(0010) // *
(0011) /***************************描述与记事******************************************
(0012) 扩展实验板的AVR程序,使用595驱动点阵汉字LED的练习。
(0013) 记事:本程序旨在对汉字LED驱动的理解与演示,程序适合初学者使用。
(0014) 描述:74HC595是串行输入,并行输出带锁存器的有较大驱动能力的芯片。驱动电流可达70mA。内部有移位和输出两个寄存器。
(0015) 在SRCLK串行时钟上升沿,数据经SER移位进入,或经QH’输出。在RCLK上升沿,数据进入并行输出寄存器。
(0016) SRCLK’和OE’分别是复位和允许输出控制,分别接电源和地。
(0017) 除了系统复位SW3-8外其余平拨开关需要关闭
(0018) 接线定义:PD4=数据,PD5=RCLK并行输出时钟,PD6=SRCLK串行时钟,PD7=OE,PD0=A,PD1=B,PD2=C,PD3=D
(0019) //******************************************************************************/
(0020)
(0021) #include <iom8535v.h> //头文件,使用ATmega8535单片机
(0022) #include <macros.h> //包含一些常用的宏定义,如NOP(),SEI()等。
(0023)
(0024) typedef unsigned char uchar; //数据类型说明,无符号整型,两字节大小。
(0025) typedef unsigned int uint; //数据类型说明,无符号字符型,单字节大小。
(0026)
(0027) //使用片内1MHz晶体,可更换。
(0028)
(0029) #pragma data: code
(0030)
(0031) //欢迎 ,先上后下,先左后右取码,每字32个字节 ,此表格存储在程序存储器中
(0032) const uchar buf[608]={
(0033) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0034) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0035) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空
(0036) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0037) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0038) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空
(0039) 0x28,0x04,0x24,0x08,0x22,0x32,0x21,0xC2,0x26,0xC2,0x38,0x34,
(0040) 0x04,0x04,0x18,0x08,0xF0,0x30,0x17,0xC0,0x10,0x60,0x10,0x18,
(0041) 0x14,0x0C,0x18,0x06,0x10,0x04,0x00,0x00, //欢
(0042) 0x02,0x02,0x82,0x04,0x73,0xF8,0x20,0x04,0x00,0x02,0x3F,0xE2,
(0043) 0x20,0x42,0x40,0x82,0x40,0x02,0x3F,0xFA,0x20,0x02,0x20,0x42,
(0044) 0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00, //迎
(0045) 0x00,0x00,0x02,0x01,0x42,0x02,0x22,0x04,0x3A,0x18,0x13,0xE0,
(0046) 0x02,0x00,0xFE,0x00,0x02,0x00,0x03,0xFC,0x0A,0x02,0x72,0x02,
(0047) 0x22,0x02,0x06,0x02,0x02,0x1E,0x00,0x00, //光
(0048) 0x00,0x00,0x1F,0xF8,0x00,0x00,0x00,0x00,0x7F,0xFE,0x02,0x00,
(0049) 0x0C,0x00,0xF1,0xFE,0x50,0x84,0x10,0x84,0x18,0xFC,0x16,0x84,
(0050) 0x10,0x84,0x11,0xFE,0x10,0x80,0x00,0x00, //临
(0051) 0x00,0x00,0x00,0x00,0x3F,0xE0,0x10,0x40,0x10,0x40,0x10,0x40,
(0052) 0x10,0x40,0xFF,0xFF,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,
(0053) 0x3F,0xE0,0x10,0x00,0x00,0x00,0x00,0x00, //中
(0054) 0x00,0x00,0x7F,0xFF,0x40,0x02,0x50,0x12,0x51,0x12,0x51,0x12,
(0055) 0x51,0x12,0x5F,0xF2,0x51,0x12,0x51,0x92,0x51,0x72,0x50,0x12,
(0056) 0x40,0x02,0x7F,0xFF,0x00,0x00,0x00,0x00, //国
(0057) 0x00,0x00,0x00,0x00,0x1F,0xF0,0x12,0x20,0x12,0x20,0x12,0x20,
(0058) 0x12,0x20,0xFF,0xFC,0x12,0x22,0x12,0x22,0x12,0x22,0x12,0x22,
(0059) 0x1F,0xF2,0x00,0x02,0x00,0x0E,0x00,0x00, //电
(0060) 0x00,0x80,0x00,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x82,
(0061) 0x40,0x81,0x47,0xFE,0x48,0x80,0x50,0x80,0x60,0x80,0x40,0x80,
(0062) 0x00,0x80,0x01,0x80,0x00,0x80,0x00,0x00, //子
(0063) 0x01,0x00,0x02,0x00,0x0C,0x00,0x3F,0xFE,0xE0,0x00,0x50,0x00,
(0064) 0x15,0x7E,0x15,0x44,0x95,0x44,0x75,0x44,0x55,0x44,0x15,0x44,
(0065) 0x15,0x7E,0x10,0x00,0x10,0x00,0x00,0x00, //信
(0066) 0x00,0x00,0x00,0x04,0x00,0x1C,0x3F,0x80,0x2A,0xBC,0x2A,0x82,
(0067) 0x6A,0x82,0xAA,0xA2,0x2A,0x9A,0x2A,0x82,0x2A,0x82,0x3F,0x8E,
(0068) 0x00,0x00,0x00,0x10,0x00,0x0C,0x00,0x00, //息
(0069) 0x10,0x80,0x10,0x82,0x11,0x01,0xFF,0xFE,0x12,0x00,0x14,0x02,
(0070) 0x00,0x02,0x13,0x04,0x12,0xC8,0x12,0x30,0xFE,0x30,0x12,0x48,
(0071) 0x13,0x84,0x12,0x06,0x10,0x04,0x00,0x00, //技
(0072) 0x08,0x08,0x08,0x08,0x08,0x10,0x08,0x20,0x08,0x40,0x09,0x80,
(0073) 0x0A,0x00,0xFF,0xFE,0x0A,0x00,0x09,0x00,0x48,0x80,0x28,0x60,
(0074) 0x08,0x30,0x08,0x18,0x08,0x10,0x00,0x00, //术
(0075) 0x08,0x00,0x8F,0x01,0x68,0x01,0x11,0xFA,0x09,0x02,0x13,0x04,
(0076) 0x23,0x08,0xE5,0x70,0x25,0x08,0x39,0x08,0x25,0x04,0x33,0xF6,
(0077) 0x32,0x03,0x21,0x02,0x01,0x00,0x00,0x00, //资
(0078) 0x08,0x20,0x84,0x3F,0x60,0xC0,0x07,0x02,0x00,0x0C,0x7F,0xF0,
(0079) 0x40,0x04,0x4F,0x88,0x5A,0xB2,0x6A,0x81,0x4A,0xFE,0x4A,0x80,
(0080) 0x4A,0xA0,0x4F,0x90,0x40,0x0C,0x00,0x00, //源
(0081) 0x00,0x00,0x7F,0xFE,0x40,0x10,0x48,0x20,0x44,0xC0,0x43,0x00,
(0082) 0x44,0xC0,0x58,0x30,0x44,0x20,0x42,0x40,0x41,0x80,0x4E,0x64,
(0083) 0x44,0x06,0x7F,0xFC,0x00,0x00,0x00,0x00, //网
(0084) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0085) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0086) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空
(0087) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0088) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0089) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空
(0090) };
(0091) #pragma data: data
(0092) /************************************************
(0093) 函 数 名: DelaymS()
(0094) 功 能: 毫秒级延时函数
(0095) 输入参数: 延迟时间/系统晶体
(0096) 输出参数: 做相应的延迟处理
(0097) 描 述: /
(0098) ***********************************************/
(0099) void DelaymS (uint i) //延时函数,参数i为延时时间
(0100) {
(0101) uchar j; //双重延时
(0102) for (;i!=0;i--)
0166 C007 RJMP 0x016E
(0103) {
(0104) for (j=30;j!=0;j--);
0167 E14E LDI R20,0x1E
0168 C001 RJMP 0x016A
0169 954A DEC R20
016A 2344 TST R20
016B F7E9 BNE 0x0169
016C 5001 SUBI R16,1
016D 4010 SBCI R17,0
016E 3000 CPI R16,0
016F 0701 CPC R16,R17
0170 F7B1 BNE 0x0167
0171 D097 RCALL pop_gset1
0172 9508 RET
(0105) }
(0106) }
(0107) /************************************************
(0108) 函 数 名: Init_port()
(0109) 功 能: 单片机初始化函数
(0110) 输入参数: /
(0111) 输出参数: /
(0112) 描 述: 相关口方向的设置等
(0113) ***********************************************/
(0114) void Init_Port(void)
(0115) {
(0116) DDRD = 0xff; //PD口为推挽1输出
_Init_Port:
0173 EF8F LDI R24,0xFF
0174 BB81 OUT 0x11,R24
(0117) PORTD = 0x00; //PD口初始值为0
0175 2422 CLR R2
0176 BA22 OUT 0x12,R2
0177 9508 RET
_InputByte:
mid --> R20
i --> R22
hang_no --> R18
lie_qishi --> R16
0178 D08B RCALL push_gset2
(0118) }
(0119) /************************************************
(0120) 函 数 名: InputByte()
(0121) 功 能: 串行写入32bit数据(一行)的函数
(0122) 输入参数: lie_qishi(起始的列) ,hang_no(需要送第几行)
(0123) 输出参数: /
(0124) 描 述: DATA=PD4为数据端,SRCLK=PD6为时钟端,bit7在先,时钟上升沿写入。
(0125) ***********************************************/
(0126) void InputByte (uint lie_qishi,uchar hang_no)
(0127) {
(0128) uchar i,mid;
(0129) for(i=32;i>0;i--)
0179 E260 LDI R22,0x20
017A C015 RJMP 0x0190
(0130) {
(0131) mid = buf[lie_qishi +i+i] & hang_no; //操作的是hang_no位。
017B 2E26 MOV R2,R22
017C 2433 CLR R3
017D 01F8 MOVW R30,R16
017E 0DE2 ADD R30,R2
017F 1DF3 ADC R31,R3
0180 0DE2 ADD R30,R2
0181 1DF3 ADC R31,R3
0182 E28A LDI R24,0x2A
0183 E090 LDI R25,0
0184 0FE8 ADD R30,R24
0185 1FF9 ADC R31,R25
0186 9144 LPM R20,0(Z)
0187 2342 AND R20,R18
(0132) if(mid==0)
0188 F411 BNE 0x018B
(0133) PORTD |= (1<<PD4); //数据端输出0,共阳LED,所以取反码
0189 9A94 SBI 0x12,4
018A C001 RJMP 0x018C
(0134) else
(0135) PORTD &= ~(1<<PD4); //否则输出1
018B 9894 CBI 0x12,4
(0136) PORTD |= (1<<PD6); //时钟置高,产生下降沿。
018C 9A96 SBI 0x12,6
(0137) NOP();
018D 0000 NOP
(0138) PORTD &= ~(1<<PD6); //时钟置低
018E 9896 CBI 0x12,6
018F 956A DEC R22
0190 2422 CLR R2
0191 1626 CP R2,R22
0192 F340 BCS 0x017B
0193 D068 RCALL pop_gset2
0194 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -