📄 1.s
字号:
.dbline 348
sbi 0x12,0
.dbline 349
ldi R16,2
ldi R17,0
xcall _delay_nus
.dbline 350
sbi 0x18,4
.dbline 351
ldi R24,<_ROW
ldi R25,>_ROW
mov R30,R22
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
out 0x18,R30
.dbline 352
cbi 0x12,0
.dbline 353
ldi R16,200
ldi R17,0
xcall _delay_nus
.dbline 354
L64:
.dbline 332
inc R22
L66:
.dbline 332
cpi R22,16
brsh X4
xjmp L63
X4:
.dbline 355
; }
; }
; set_G();
; delay_nus(2);
; set_STB();//锁存
; PORTB=ROW[i];//i行控制位 共阴的二极管允许了接地
; clr_G();//行控制有效
; delay_nus(displayTime);
; }
; delay_nus(200);
ldi R16,200
ldi R17,0
xcall _delay_nus
.dbline 356
; set_G();
sbi 0x12,0
.dbline -2
L62:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r i 22 c
.dbsym r j 10 c
.dbsym r colour 20 c
.dbend
.dbfunc e left_move _left_move fV
; data1 -> R22
; data0 -> R20
; i -> R16
; j -> R18
.even
_left_move::
xcall push_gset2
.dbline -1
.dbline 360
; }
; //下面函数功能为把信号(汉字)前移
; void left_move(void)
; {
.dbline 362
; uchar data0,data1,i,j;
; for(i=0;i<16;i++)
clr R16
xjmp L81
L78:
.dbline 363
; {
.dbline 364
; for(j=0;j<(howmany0+hanzishu)*2;j++)//如41=(howmany0+hanzishu)*2+1
clr R18
xjmp L85
L82:
.dbline 365
.dbline 366
ldi R24,58
mul R24,R16
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
mov R30,R18
clr R31
add R30,R2
adc R31,R3
ldd R20,z+0
.dbline 367
ldi R24,58
mul R24,R16
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
mov R30,R18
clr R31
adiw R30,1
add R30,R2
adc R31,R3
ldd R22,z+0
.dbline 368
ldi R24,58
mul R24,R16
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
mov R30,R18
clr R31
add R30,R2
adc R31,R3
mov R2,R22
lsr R2
lsr R2
lsr R2
lsr R2
lsr R2
lsr R2
lsr R2
mov R3,R20
lsl R3
or R3,R2
std z+0,R3
.dbline 369
L83:
.dbline 364
inc R18
L85:
.dbline 364
cpi R18,56
brsh X5
xjmp L82
X5:
.dbline 370
L79:
.dbline 362
inc R16
L81:
.dbline 362
cpi R16,16
brsh X6
xjmp L78
X6:
.dbline -2
L77:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r data1 22 c
.dbsym r data0 20 c
.dbsym r i 16 c
.dbsym r j 18 c
.dbend
.area data(ram, con, rel)
.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
L87:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
.area text(rom, con, rel)
.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
.dbfunc e left_MOVE_display _left_MOVE_display fV
.dbsym s king L87 i
; k -> R20,R21
; i -> R22,R23
; colour -> R10
.even
_left_MOVE_display::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 377
; {
; data0=Ledplay[i][j];
; data1=Ledplay[i][j+1];
; Ledplay[i][j]=(data0<<1)|(data1>>7);//从第二个字符起它的信号始终没有掉失,
; } //只不过是把第一列的信号给了上一16*16的第16列‘
; } //第一个字符(字体失去的那个字,所以第一是变动的。那个字体开始掉失那个字就为第一)始终从第一列
; } //信号开始失掉
; //两个for中的参数: 16是规格格式,41是扫描41列(0->40),显示10空字10汉字则要40列
; //多出的一列是为了用其最高位来补Ledplay[i][39](最后一列)的最低位(最后一列<<1有了最低们这个空位)
; //则要用多出的一列(0x00)的最最位来补(这列也可以以程序默认来补,即可删这行)。
; //若程序每次把汉字移动两列则要用二列来补。
; void left_MOVE_display(unsigned char colour)
; {
.dbline 379
; static uint king=0;
; uint i=0,k;
clr R22
clr R23
.dbline 380
; king=0;
clr R2
clr R3
sts L87+1,R3
sts L87,R2
.dbline 381
; bn=0;// 全局 列变量
sts _bn,R2
.dbline 382
; clearRAM();//使 Ledplay[i][j]所指空间清0
xcall _clearRAM
.dbline 383
clr R20
clr R21
xjmp L91
L88:
.dbline 383
.dbline 383
ldi R16,6
xcall _putin
.dbline 383
L89:
.dbline 383
subi R20,255 ; offset = 1
sbci R21,255
L91:
.dbline 383
; for(k=0;k<howmany0;k++){putin(position);} //实质上是使 Ledplay[i][j]填入空字 *****************************
cpi R20,10
ldi R30,0
cpc R21,R30
brlo L88
.dbline 384
clr R20
clr R21
xjmp L95
L92:
.dbline 384
.dbline 384
mov R16,R20
xcall _putin
.dbline 384
L93:
.dbline 384
subi R20,255 ; offset = 1
sbci R21,255
L95:
.dbline 384
; for(k=0;k<hanzishu;k++){putin(k);}//在这函数中通过clearRAM()0后"重新"载入字符
cpi R20,18
ldi R30,0
cpc R21,R30
brlo L92
xjmp L97
L96:
.dbline 386
; while(1)
; {//开始移动
.dbline 387
; for(i=0;i<shopshow;i++)//动态显示一段时间
clr R22
clr R23
xjmp L102
L99:
.dbline 388
.dbline 389
mov R16,R10
xcall _DisPlay_onetime
.dbline 390
L100:
.dbline 387
subi R22,255 ; offset = 1
sbci R23,255
L102:
.dbline 387
cpi R22,9
ldi R30,0
cpc R23,R30
brlo L99
.dbline 391
; {
; DisPlay_onetime(colour);//*************************************************************
; }
; left_move();
xcall _left_move
.dbline 392
; king++;
lds R24,L87
lds R25,L87+1
adiw R24,1
sts L87+1,R25
sts L87,R24
.dbline 393
; if(king>159+16*18)
ldi R24,447
ldi R25,1
lds R2,L87
lds R3,L87+1
cp R24,R2
cpc R25,R3
brsh L103
.dbline 394
; break;
xjmp L98
L103:
.dbline 395
L97:
.dbline 385
xjmp L96
L98:
.dbline -2
L86:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r k 20 i
.dbsym r i 22 i
.dbsym r colour 10 c
.dbend
.dbfunc e UP_move _UP_move fV
; j -> R16
; i -> R18
.even
_UP_move::
.dbline -1
.dbline 442
; }//停止移动
; /*for(i=0;i<600;i++)//静止显示一段时间***************************
; {
; DisPlay_onetime(colour);
; }*/
; }
; //不理想
; /*void right_move(void)
; {
; uchar data0,data1,i,j;
; for(i=0;i<16;i++)
; {
; for(j=0;j<(howmany0+hanzishu)*2+1;j++)//如41=(howmany0+hanzishu)*2+1
; {
; data0=Ledplay[i][j];
; data1=Ledplay[i][j+1];
; Ledplay[i][j+1]=(data0<<7)|(data1>>1);//从第二个字符起它的信号始终没有掉失,
; } //只不过是把第一列的信号给了上一16*16的第16列‘
; } //第一个字符(字体失去的那个字,所以第一是变动的。那个字体开始掉失那个字就为第一)始终从第一列
; }
; void right_MOVE_display(unsigned char colour)
; {
; static uint king=0;
; uint i=0,k;
; king=0;
; bn=0;// 全局 列变量
; clearRAM();//使 Ledplay[i][j]所指空间清0
; for(k=0;k<howmany0;k++){putin(position);} //实质上是使 Ledplay[i][j]填入空字 *****************************
; for(k=0;k<hanzishu;k++){putin(k);}//在这函数中通过clearRAM()0后"重新"载入字符
; while(1)
; {//开始移动
; for(i=0;i<shopshow;i++)//动态显示一段时间
; {
; DisPlay_onetime(colour);//*************************************************************
; }
; right_move();
; king++;
; if(king>143)
; break;
; }//停止移动
; //for(i=0;i<600;i++)//静止显示一段时间***************************
; //{
; // DisPlay_onetime(colour);
; //}//
; } */
; //下面数功能为把信号移
; void UP_move(void)
; {
.dbline 444
; uchar i,j;
; for(j=0;j<(howmany0+hanzishu)*2;j++)
clr R16
xjmp L109
L106:
.dbline 445
; {
.dbline 446
; for(i=0;i<16;i++)
clr R18
xjmp L113
L110:
.dbline 447
.dbline 448
ldi R24,58
mul R24,R18
ldi R24,<_Ledplay+58
ldi R25,>_Ledplay+58
movw R2,R0
add R2,R24
adc R3,R25
mov R30,R16
clr R31
add R30,R2
adc R31,R3
ldd R2,z+0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
movw R4,R0
add R4,R24
adc R5,R25
mov R30,R16
clr R31
add R30,R4
adc R31,R5
std z+0,R2
.dbline 449
L111:
.dbline 446
inc R18
L113:
.dbline 446
cpi R18,16
brlo L110
.dbline 450
; {
; Ledplay[i][j]=Ledplay[i+1][j];//让本列的下一行的来取代自已的位置,来实现下一行信号下移的功能,第16行下移后的空位由多出的一行(0x00)
; } //来补,这是Ledplay有17行的所以了。
; if(j<(howmany0+hanzishu)*2-10)
cpi R16,46
brsh L115
.dbline 451
; Ledplay[15][j]=Ledplay[0][j+10];//本程序开始时以10个空字占満版面,j=0时,把第6个字的信号给第一个字位最低行,j=1时把第7个字信号给第2个字
ldi R24,<_Ledplay+10
ldi R25,>_Ledplay+10
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_Ledplay+870
ldi R25,>_Ledplay+870
mov R30,R16
clr R31
add R30,R24
adc R31,R25
std z+0,R2
L115:
.dbline 452
L107:
.dbline 444
inc R16
L109:
.dbline 444
cpi R16,56
brsh X7
xjmp L106
X7:
.dbline -2
L105:
.dbline 0 ; func end
ret
.dbsym r j 16 c
.dbsym r i 18 c
.dbend
.area data(ram, con, rel)
.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
L120:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
.area text(rom, con, rel)
.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
.dbfunc e UP_MOVE_display _UP_MOVE_display fV
.dbsym s up L120 i
; k -> R20,R21
; i -> R22,R23
; colour -> R10
.even
_UP_MOVE_display::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 455
; } //第10列即第6个字
; }
; void UP_MOVE_display(unsigned char colour)
; {
.dbline 457
; static uint up=0;
; uint i=0,k=0;
clr R22
clr R23
.dbline 457
clr R20
clr R21
.dbline 458
; up=0;
clr R2
clr R3
sts L120+1,R3
sts L120,R2
.dbline 459
; bn=0;
sts _bn,R2
.dbline 460
; clearRAM();
xcall _clearRAM
.dbline 461
xjmp L124
L121:
.dbline 461
.dbline 461
ldi R16,6
xcall _putin
.dbline 461
L122:
.dbline 461
subi R20,255 ; offset = 1
sbci R21,255
L124:
.dbline 461
; for(k=0;k<howmany0;k++){putin(position);}//实质上是使 Ledplay[i][j]所指空间清0
cpi R20,10
ldi R30,0
cpc R21,R30
brlo L121
.dbline 462
clr R20
clr R21
xjmp L128
L125:
.dbline 462
.dbline 462
mov R16,R20
xcall _putin
.dbline 462
L126:
.dbline 462
subi R20,255 ; offset = 1
sbci R21,255
L128:
.dbline 462
; for(k=0;k<hanzishu;k++){putin(k);}//在这函数中通过clearRAM()0后"重新"载入字符
cpi R20,18
ldi R30,0
cpc R21,R30
brlo L125
xjmp L130
L129:
.dbline 464
; while(1)
; {
.dbline 465
; for(i=0;i<shopshow+6;i++)
clr R22
clr R23
xjmp L135
L132:
.dbline 466
mov R16,R10
xcall _DisPlay_onetime
L133:
.dbline 465
subi R22,255 ; offset = 1
sbci R23,255
L135:
.dbline 465
cpi R22,15
ldi R30,0
cpc R23,R30
brlo L132
.dbline 467
; DisPlay_onetime(colour);
; UP_move();
xcall _UP_move
.dbline 468
; up++;
lds R24,L120
lds R25,L120+1
adiw R24,1
sts L120+1,R25
sts L120,R24
.dbline 469
; if(up==32*3)
cpi R24,96
ldi R30,0
cpc R25,R30
brne L136
.dbline 470
; break;
xjmp L131
L136:
.dbline 471
L130:
.dbline 463
xjmp L129
L131:
.dbline -2
L119:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r k 20 i
.dbsym r i 22 i
.dbsym r colour 10 c
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 483
; }
; /*for(i=0;i<300;i++)
; {
; DisPlay_onetime(colour);
; }*/
; }
; /***************************************************************************************************
; 上面32*80大点阵驱动程序
; ****************************************************************************************************/
;
; //端口初始化
; void port_init(void)
; {
.dbline 484
; PORTB = 0x00;
clr R2
out 0x18,R2
.dbline 485
; DDRB = 0xff;
ldi R24,255
out 0x17,R24
.dbline 486
; PORTD = 0x01;
ldi R24,1
out 0x12,R24
.dbline 487
; DDRD = 0x01;
out 0x11,R24
.dbline -2
L138:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 491
; }
;
; void init_devices(void)
; {
.dbline 492
; CLI(); //禁止所有中断
cli
.dbline 493
; port_init();
xcall _port_init
.dbline 494
; SEI();//开全局中断
sei
.dbline -2
L139:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; j -> <dead>
; i -> <dead>
.even
_main::
.dbline -1
.dbline 498
; }
; //主函数
; void main(void)
; {
.dbline 500
; char i,j;
; init_devices();
xcall _init_devices
.dbline 501
; clearping();
xcall _clearping
xjmp L142
L141:
.dbline 503
.dbline 506
ldi R16,1
xcall _left_MOVE_display
.dbline 507
ldi R16,2
xcall _UP_MOVE_display
.dbline 508
L142:
.dbline 502
xjmp L141
X8:
.dbline -2
L140:
.dbline 0 ; func end
ret
.dbsym l j 1 c
.dbsym l i 1 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
_Ledplay::
.blkb 986
.dbsym e Ledplay _Ledplay A[986:17:58]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -