📄 display_led.lis
字号:
0060 .dbsym r mid 20 c
0060 .dbsym r i 22 c
0060 .dbsym r hang_no 18 c
0060 .dbsym r lie_qishi 16 i
0060 .dbend
0060 .dbfunc e switch_hang _switch_hang fV
0060 ; byTemp -> R20
0060 ; hang -> R16
.even
0060 _switch_hang::
0060 00D0 rcall push_gset1
0062 .dbline -1
0062 .dbline 149
0062 ; PORTD |= (1<<PD6); //时钟置高,产生下降沿。
0062 ; NOP();
0062 ; PORTD &= ~(1<<PD6); //时钟置低
0062 ; }
0062 ; }
0062 ; /************************************************
0062 ; 函 数 名: switch_hang ()
0062 ; 功 能: 选行操作,控制138的输入
0062 ; 输入参数: /
0062 ; 输出参数: /
0062 ; 描 述: /
0062 ; ***********************************************/
0062 ; void switch_hang (uchar hang) //选行操作
0062 ; {
0062 .dbline 151
0062 ; uchar byTemp;
0062 ; byTemp = PORTD & 0xF0;
0062 42B3 in R20,0x12
0064 407F andi R20,240
0066 .dbline 152
0066 ; if (hang < 8)
0066 0830 cpi R16,8
0068 28F4 brsh L19
006A .dbline 153
006A ; {
006A .dbline 154
006A ; PORTD = byTemp + 0x08 + hang; //D=1
006A 842F mov R24,R20
006C 885F subi R24,248 ; addi 8
006E 800F add R24,R16
0070 82BB out 0x12,R24
0072 .dbline 155
0072 ; }
0072 04C0 rjmp L20
0074 L19:
0074 .dbline 157
0074 .dbline 158
0074 842F mov R24,R20
0076 800F add R24,R16
0078 8850 subi R24,8
007A 82BB out 0x12,R24
007C .dbline 159
007C L20:
007C .dbline -2
007C L18:
007C 00D0 rcall pop_gset1
007E .dbline 0 ; func end
007E 0895 ret
0080 .dbsym r byTemp 20 c
0080 .dbsym r hang 16 c
0080 .dbend
0080 .dbfunc e Display _Display fV
0080 ; i -> R20
0080 ; mov_no -> R22,R23
.even
0080 _Display::
0080 00D0 rcall push_gset2
0082 B801 movw R22,R16
0084 .dbline -1
0084 .dbline 169
0084 ; else
0084 ; {
0084 ; PORTD = byTemp + hang - 0x08; //D=0
0084 ; }
0084 ; }
0084 ; /************************************************
0084 ; 函 数 名: Display()
0084 ; 功 能: 动态扫描LED显示函数
0084 ; 输入参数: /
0084 ; 输出参数: /
0084 ; 描 述: 共16行,每行连续送4个字节的数据,两个字节为第2个汉字,后两个为第1个汉字。
0084 ; ***********************************************/
0084 ; void Display (uint mov_no) //动态显示函数
0084 ; {
0084 .dbline 171
0084 ; uchar i;
0084 ; for(i=0;i<8;i++) //上面8行
0084 4427 clr R20
0086 15C0 rjmp L25
0088 L22:
0088 .dbline 172
0088 .dbline 173
0088 979A sbi 0x12,7
008A .dbline 174
008A 042F mov R16,R20
008C E9DF rcall _switch_hang
008E .dbline 176
008E 242F mov R18,R20
0090 3327 clr R19
0092 00E8 ldi R16,128
0094 10E0 ldi R17,0
0096 00D0 rcall asr16
0098 202F mov R18,R16
009A 8B01 movw R16,R22
009C 060F add R16,R22
009E 171F adc R17,R23
00A0 C2DF rcall _InputByte
00A2 .dbline 178
00A2 959A sbi 0x12,5
00A4 .dbline 179
00A4 0000 nop
00A6 .dbline 180
00A6 9598 cbi 0x12,5
00A8 .dbline 182
00A8 9798 cbi 0x12,7
00AA .dbline 183
00AA 02E0 ldi R16,2
00AC 10E0 ldi R17,0
00AE A8DF rcall _DelaymS
00B0 .dbline 184
00B0 L23:
00B0 .dbline 171
00B0 4395 inc R20
00B2 L25:
00B2 .dbline 171
00B2 4830 cpi R20,8
00B4 48F3 brlo L22
00B6 .dbline 185
00B6 ; {
00B6 ; PORTD |= (1<<PD7); //OE=1,关闭输出,消隐
00B6 ; switch_hang (i); //选行操作
00B6 ;
00B6 ; InputByte ((mov_no+mov_no),(0b10000000>>i)); //起始列和需要送显示的行
00B6 ;
00B6 ; PORTD |= (1<<PD5); //RCLK=1,并行输出锁存器
00B6 ; NOP();
00B6 ; PORTD &= ~(1<<PD5); //RCLK=0
00B6 ; //DelaymS(1); //消隐的时间,调节亮度用
00B6 ; PORTD &= ~(1<<PD7); //OE=0,数据输出
00B6 ; DelaymS(2); //行显示的时间
00B6 ; }
00B6 ; for(i=0;i<8;i++) //下面8行
00B6 4427 clr R20
00B8 18C0 rjmp L29
00BA L26:
00BA .dbline 186
00BA .dbline 187
00BA 979A sbi 0x12,7
00BC .dbline 188
00BC 042F mov R16,R20
00BE 095F subi R16,249 ; addi 7
00C0 CFDF rcall _switch_hang
00C2 .dbline 190
00C2 242F mov R18,R20
00C4 3327 clr R19
00C6 00E8 ldi R16,128
00C8 10E0 ldi R17,0
00CA 00D0 rcall asr16
00CC 202F mov R18,R16
00CE 8B01 movw R16,R22
00D0 060F add R16,R22
00D2 171F adc R17,R23
00D4 0F5F subi R16,255 ; offset = 1
00D6 1F4F sbci R17,255
00D8 A6DF rcall _InputByte
00DA .dbline 192
00DA 959A sbi 0x12,5
00DC .dbline 193
00DC 0000 nop
00DE .dbline 194
00DE 9598 cbi 0x12,5
00E0 .dbline 196
00E0 9798 cbi 0x12,7
00E2 .dbline 197
00E2 02E0 ldi R16,2
00E4 10E0 ldi R17,0
00E6 8CDF rcall _DelaymS
00E8 .dbline 198
00E8 L27:
00E8 .dbline 185
00E8 4395 inc R20
00EA L29:
00EA .dbline 185
00EA 4830 cpi R20,8
00EC 30F3 brlo L26
00EE .dbline -2
00EE L21:
00EE 00D0 rcall pop_gset2
00F0 .dbline 0 ; func end
00F0 0895 ret
00F2 .dbsym r i 20 c
00F2 .dbsym r mov_no 22 i
00F2 .dbend
00F2 .dbfunc e main _main fV
00F2 ; i -> R20,R21
00F2 ; j -> R22
.even
00F2 _main::
00F2 .dbline -1
00F2 .dbline 202
00F2 ; {
00F2 ; PORTD |= (1<<PD7); //OE=1,关闭输出,消隐
00F2 ; switch_hang (i+7); //选行操作
00F2 ;
00F2 ; InputByte ((mov_no+mov_no+1),(0b10000000>>i)); //起始列和需要送显示的行
00F2 ;
00F2 ; PORTD |= (1<<PD5); //RCLK=1,并行输出锁存器
00F2 ; NOP();
00F2 ; PORTD &= ~(1<<PD5); //RCLK=0
00F2 ; //DelaymS(1); //消隐的时间,调节亮度用
00F2 ; PORTD &= ~(1<<PD7); //OE=0,数据输出
00F2 ; DelaymS(2); //行显示的时间
00F2 ; }
00F2 ; }
00F2 ; //*****************主程序**********************************
00F2 ; void main (void)
00F2 ; {
00F2 .dbline 205
00F2 ; uint i;
00F2 ; uchar j;
00F2 ; DelaymS(100);
00F2 04E6 ldi R16,100
00F4 10E0 ldi R17,0
00F6 84DF rcall _DelaymS
00F8 .dbline 206
00F8 ; Init_Port(); //初始化
00F8 91DF rcall _Init_Port
00FA 10C0 rjmp L32
00FC L31:
00FC .dbline 210
00FC ;
00FC ; while (1)
00FC ;
00FC ; for (i=0;i<272;i++)
00FC 4427 clr R20
00FE 5527 clr R21
0100 09C0 rjmp L37
0102 L34:
0102 .dbline 211
0102 ; {
0102 .dbline 212
0102 ; for (j=0;j<7;j++) //移动的速度
0102 6627 clr R22
0104 03C0 rjmp L41
0106 L38:
0106 .dbline 213
0106 8A01 movw R16,R20
0108 BBDF rcall _Display
010A L39:
010A .dbline 212
010A 6395 inc R22
010C L41:
010C .dbline 212
010C 6730 cpi R22,7
010E D8F3 brlo L38
0110 .dbline 214
0110 L35:
0110 .dbline 210
0110 4F5F subi R20,255 ; offset = 1
0112 5F4F sbci R21,255
0114 L37:
0114 .dbline 210
0114 4031 cpi R20,16
0116 E1E0 ldi R30,1
0118 5E07 cpc R21,R30
011A 98F3 brlo L34
011C L32:
011C .dbline 208
011C EFCF rjmp L31
011E X1:
011E .dbline -2
011E L30:
011E .dbline 0 ; func end
011E 0895 ret
0120 .dbsym r i 20 i
0120 .dbsym r j 22 c
0120 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -