📄 display_led.lis
字号:
022E 0000 .byte 0,0
0230 0000 .byte 0,0
0232 0000 .byte 0,0
0234 0000 .byte 0,0
0236 0000 .byte 0,0
0238 0000 .byte 0,0
023A 0000 .byte 0,0
023C 0000 .byte 0,0
023E 0000 .byte 0,0
0240 0000 .byte 0,0
0242 0000 .byte 0,0
0244 0000 .byte 0,0
0246 0000 .byte 0,0
0248 0000 .byte 0,0
024A 0000 .byte 0,0
024C 0000 .byte 0,0
024E 0000 .byte 0,0
0250 0000 .byte 0,0
0252 0000 .byte 0,0
0254 0000 .byte 0,0
0256 0000 .byte 0,0
0258 0000 .byte 0,0
025A 0000 .byte 0,0
025C 0000 .byte 0,0
025E 0000 .byte 0,0
0260 .dbfile E:\iccavr代码\实验18_扩展板点阵汉字LED显示\display_led.c
0260 .dbsym e buf _buf A[608:608]kc
.area data(ram, con, rel)
0000 .dbfile E:\iccavr代码\实验18_扩展板点阵汉字LED显示\display_led.c
.area text(rom, con, rel)
0000 .dbfile E:\iccavr代码\实验18_扩展板点阵汉字LED显示\display_led.c
0000 .dbfunc e DelaymS _DelaymS fV
0000 ; j -> R20
0000 ; i -> R16,R17
.even
0000 _DelaymS::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 100
0002 ; //******************************************************************************
0002 ; // *
0002 ; // FileName : 扩展板ledspi.c ICCAVR V6.31A编译 *
0002 ; // Function : 高档LED显示屏,滚动显示一个数组 *
0002 ; // Date : 2006-11-24 *
0002 ; // Version : 1.0 *
0002 ; // *
0002 ; // Author : 开关电源 hongtusy@163.com *
0002 ; // Company : 电子信息技术资源网 http://www.itsn.cn *
0002 ; // *
0002 ; /***************************描述与记事******************************************
0002 ; 扩展实验板的AVR程序,使用595驱动点阵汉字LED的练习。
0002 ; 记事:本程序旨在对汉字LED驱动的理解与演示,程序适合初学者使用。
0002 ; 描述:74HC595是串行输入,并行输出带锁存器的有较大驱动能力的芯片。驱动电流可达70mA。内部有移位和输出两个寄存器。
0002 ; 在SRCLK串行时钟上升沿,数据经SER移位进入,或经QH’输出。在RCLK上升沿,数据进入并行输出寄存器。
0002 ; SRCLK’和OE’分别是复位和允许输出控制,分别接电源和地。
0002 ; 除了系统复位SW3-8外其余平拨开关需要关闭
0002 ; 接线定义:PD4=数据,PD5=RCLK并行输出时钟,PD6=SRCLK串行时钟,PD7=OE,PD0=A,PD1=B,PD2=C,PD3=D
0002 ; //******************************************************************************/
0002 ;
0002 ; #include <iom8535v.h> //头文件,使用ATmega8535单片机
0002 ; #include <macros.h> //包含一些常用的宏定义,如NOP(),SEI()等。
0002 ;
0002 ; typedef unsigned char uchar; //数据类型说明,无符号整型,两字节大小。
0002 ; typedef unsigned int uint; //数据类型说明,无符号字符型,单字节大小。
0002 ;
0002 ; //使用片内1MHz晶体,可更换。
0002 ;
0002 ; #pragma data: code
0002 ;
0002 ; //欢迎 ,先上后下,先左后右取码,每字32个字节 ,此表格存储在程序存储器中
0002 ; const uchar buf[608]={
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空
0002 ; 0x28,0x04,0x24,0x08,0x22,0x32,0x21,0xC2,0x26,0xC2,0x38,0x34,
0002 ; 0x04,0x04,0x18,0x08,0xF0,0x30,0x17,0xC0,0x10,0x60,0x10,0x18,
0002 ; 0x14,0x0C,0x18,0x06,0x10,0x04,0x00,0x00, //欢
0002 ; 0x02,0x02,0x82,0x04,0x73,0xF8,0x20,0x04,0x00,0x02,0x3F,0xE2,
0002 ; 0x20,0x42,0x40,0x82,0x40,0x02,0x3F,0xFA,0x20,0x02,0x20,0x42,
0002 ; 0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00, //迎
0002 ; 0x00,0x00,0x02,0x01,0x42,0x02,0x22,0x04,0x3A,0x18,0x13,0xE0,
0002 ; 0x02,0x00,0xFE,0x00,0x02,0x00,0x03,0xFC,0x0A,0x02,0x72,0x02,
0002 ; 0x22,0x02,0x06,0x02,0x02,0x1E,0x00,0x00, //光
0002 ; 0x00,0x00,0x1F,0xF8,0x00,0x00,0x00,0x00,0x7F,0xFE,0x02,0x00,
0002 ; 0x0C,0x00,0xF1,0xFE,0x50,0x84,0x10,0x84,0x18,0xFC,0x16,0x84,
0002 ; 0x10,0x84,0x11,0xFE,0x10,0x80,0x00,0x00, //临
0002 ; 0x00,0x00,0x00,0x00,0x3F,0xE0,0x10,0x40,0x10,0x40,0x10,0x40,
0002 ; 0x10,0x40,0xFF,0xFF,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,
0002 ; 0x3F,0xE0,0x10,0x00,0x00,0x00,0x00,0x00, //中
0002 ; 0x00,0x00,0x7F,0xFF,0x40,0x02,0x50,0x12,0x51,0x12,0x51,0x12,
0002 ; 0x51,0x12,0x5F,0xF2,0x51,0x12,0x51,0x92,0x51,0x72,0x50,0x12,
0002 ; 0x40,0x02,0x7F,0xFF,0x00,0x00,0x00,0x00, //国
0002 ; 0x00,0x00,0x00,0x00,0x1F,0xF0,0x12,0x20,0x12,0x20,0x12,0x20,
0002 ; 0x12,0x20,0xFF,0xFC,0x12,0x22,0x12,0x22,0x12,0x22,0x12,0x22,
0002 ; 0x1F,0xF2,0x00,0x02,0x00,0x0E,0x00,0x00, //电
0002 ; 0x00,0x80,0x00,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x82,
0002 ; 0x40,0x81,0x47,0xFE,0x48,0x80,0x50,0x80,0x60,0x80,0x40,0x80,
0002 ; 0x00,0x80,0x01,0x80,0x00,0x80,0x00,0x00, //子
0002 ; 0x01,0x00,0x02,0x00,0x0C,0x00,0x3F,0xFE,0xE0,0x00,0x50,0x00,
0002 ; 0x15,0x7E,0x15,0x44,0x95,0x44,0x75,0x44,0x55,0x44,0x15,0x44,
0002 ; 0x15,0x7E,0x10,0x00,0x10,0x00,0x00,0x00, //信
0002 ; 0x00,0x00,0x00,0x04,0x00,0x1C,0x3F,0x80,0x2A,0xBC,0x2A,0x82,
0002 ; 0x6A,0x82,0xAA,0xA2,0x2A,0x9A,0x2A,0x82,0x2A,0x82,0x3F,0x8E,
0002 ; 0x00,0x00,0x00,0x10,0x00,0x0C,0x00,0x00, //息
0002 ; 0x10,0x80,0x10,0x82,0x11,0x01,0xFF,0xFE,0x12,0x00,0x14,0x02,
0002 ; 0x00,0x02,0x13,0x04,0x12,0xC8,0x12,0x30,0xFE,0x30,0x12,0x48,
0002 ; 0x13,0x84,0x12,0x06,0x10,0x04,0x00,0x00, //技
0002 ; 0x08,0x08,0x08,0x08,0x08,0x10,0x08,0x20,0x08,0x40,0x09,0x80,
0002 ; 0x0A,0x00,0xFF,0xFE,0x0A,0x00,0x09,0x00,0x48,0x80,0x28,0x60,
0002 ; 0x08,0x30,0x08,0x18,0x08,0x10,0x00,0x00, //术
0002 ; 0x08,0x00,0x8F,0x01,0x68,0x01,0x11,0xFA,0x09,0x02,0x13,0x04,
0002 ; 0x23,0x08,0xE5,0x70,0x25,0x08,0x39,0x08,0x25,0x04,0x33,0xF6,
0002 ; 0x32,0x03,0x21,0x02,0x01,0x00,0x00,0x00, //资
0002 ; 0x08,0x20,0x84,0x3F,0x60,0xC0,0x07,0x02,0x00,0x0C,0x7F,0xF0,
0002 ; 0x40,0x04,0x4F,0x88,0x5A,0xB2,0x6A,0x81,0x4A,0xFE,0x4A,0x80,
0002 ; 0x4A,0xA0,0x4F,0x90,0x40,0x0C,0x00,0x00, //源
0002 ; 0x00,0x00,0x7F,0xFE,0x40,0x10,0x48,0x20,0x44,0xC0,0x43,0x00,
0002 ; 0x44,0xC0,0x58,0x30,0x44,0x20,0x42,0x40,0x41,0x80,0x4E,0x64,
0002 ; 0x44,0x06,0x7F,0xFC,0x00,0x00,0x00,0x00, //网
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0002 ; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空
0002 ; };
0002 ; #pragma data: data
0002 ; /************************************************
0002 ; 函 数 名: DelaymS()
0002 ; 功 能: 毫秒级延时函数
0002 ; 输入参数: 延迟时间/系统晶体
0002 ; 输出参数: 做相应的延迟处理
0002 ; 描 述: /
0002 ; ***********************************************/
0002 ; void DelaymS (uint i) //延时函数,参数i为延时时间
0002 ; {
0002 .dbline 102
0002 ; uchar j; //双重延时
0002 ; for (;i!=0;i--)
0002 07C0 rjmp L5
0004 L2:
0004 .dbline 103
0004 ; {
0004 .dbline 104
0004 4EE1 ldi R20,30
0006 01C0 rjmp L9
0008 L6:
0008 .dbline 104
0008 L7:
0008 .dbline 104
0008 4A95 dec R20
000A L9:
000A .dbline 104
000A 4423 tst R20
000C E9F7 brne L6
000E .dbline 105
000E L3:
000E .dbline 102
000E 0150 subi R16,1
0010 1040 sbci R17,0
0012 L5:
0012 .dbline 102
0012 0030 cpi R16,0
0014 0107 cpc R16,R17
0016 B1F7 brne L2
0018 X0:
0018 .dbline -2
0018 L1:
0018 00D0 rcall pop_gset1
001A .dbline 0 ; func end
001A 0895 ret
001C .dbsym r j 20 c
001C .dbsym r i 16 i
001C .dbend
001C .dbfunc e Init_Port _Init_Port fV
.even
001C _Init_Port::
001C .dbline -1
001C .dbline 115
001C ; for (j=30;j!=0;j--);
001C ; }
001C ; }
001C ; /************************************************
001C ; 函 数 名: Init_port()
001C ; 功 能: 单片机初始化函数
001C ; 输入参数: /
001C ; 输出参数: /
001C ; 描 述: 相关口方向的设置等
001C ; ***********************************************/
001C ; void Init_Port(void)
001C ; {
001C .dbline 116
001C ; DDRD = 0xff; //PD口为推挽1输出
001C 8FEF ldi R24,255
001E 81BB out 0x11,R24
0020 .dbline 117
0020 ; PORTD = 0x00; //PD口初始值为0
0020 2224 clr R2
0022 22BA out 0x12,R2
0024 .dbline -2
0024 L10:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbend
0026 .dbfunc e InputByte _InputByte fV
0026 ; mid -> R20
0026 ; i -> R22
0026 ; hang_no -> R18
0026 ; lie_qishi -> R16,R17
.even
0026 _InputByte::
0026 00D0 rcall push_gset2
0028 .dbline -1
0028 .dbline 127
0028 ; }
0028 ; /************************************************
0028 ; 函 数 名: InputByte()
0028 ; 功 能: 串行写入32bit数据(一行)的函数
0028 ; 输入参数: lie_qishi(起始的列) ,hang_no(需要送第几行)
0028 ; 输出参数: /
0028 ; 描 述: DATA=PD4为数据端,SRCLK=PD6为时钟端,bit7在先,时钟上升沿写入。
0028 ; ***********************************************/
0028 ; void InputByte (uint lie_qishi,uchar hang_no)
0028 ; {
0028 .dbline 129
0028 ; uchar i,mid;
0028 ; for(i=32;i>0;i--)
0028 60E2 ldi R22,32
002A 15C0 rjmp L15
002C L12:
002C .dbline 130
002C ; {
002C .dbline 131
002C ; mid = buf[lie_qishi +i+i] & hang_no; //操作的是hang_no位。
002C 262E mov R2,R22
002E 3324 clr R3
0030 F801 movw R30,R16
0032 E20D add R30,R2
0034 F31D adc R31,R3
0036 E20D add R30,R2
0038 F31D adc R31,R3
003A 80E0 ldi R24,<_buf
003C 90E0 ldi R25,>_buf
003E E80F add R30,R24
0040 F91F adc R31,R25
0042 4491 lpm R20,Z
0044 4223 and R20,R18
0046 .dbline 132
0046 ; if(mid==0)
0046 11F4 brne L16
0048 .dbline 133
0048 ; PORTD |= (1<<PD4); //数据端输出0,共阳LED,所以取反码
0048 949A sbi 0x12,4
004A 01C0 rjmp L17
004C L16:
004C .dbline 135
004C ; else
004C ; PORTD &= ~(1<<PD4); //否则输出1
004C 9498 cbi 0x12,4
004E L17:
004E .dbline 136
004E 969A sbi 0x12,6
0050 .dbline 137
0050 0000 nop
0052 .dbline 138
0052 9698 cbi 0x12,6
0054 .dbline 139
0054 L13:
0054 .dbline 129
0054 6A95 dec R22
0056 L15:
0056 .dbline 129
0056 2224 clr R2
0058 2616 cp R2,R22
005A 40F3 brlo L12
005C .dbline -2
005C L11:
005C 00D0 rcall pop_gset2
005E .dbline 0 ; func end
005E 0895 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -