📄 1.lst
字号:
(0274) }
0281 C002 RJMP 0x0284
(0275) else//列控制 该位所在列的二极管得正电位 在允许接地的情况下发光!!!
(0276) {
(0277) set_DR();
0282 9AC7 SBI 0x18,7
(0278) set_DG();
0283 9AC6 SBI 0x18,6
(0279) }
(0280) set_CLK();
0284 9AC5 SBI 0x18,5
(0281) data<<=1;
0285 0F00 LSL R16
0286 9543 INC R20
0287 3048 CPI R20,0x8
0288 F398 BCS 0x027C
(0282) }
(0283) clr_DR();
0289 98C7 CBI 0x18,7
(0284) clr_DG();
028A 98C6 CBI 0x18,6
028B 940E04AE CALL pop_gset1
028D 9508 RET
_putin:
i --> R20
point --> R16
028E 940E04AB CALL push_gset1
(0285) }
(0286) //将汉字符装入显示寄存器
(0287) void putin (uchar point)//字符载入函数
(0288) {
(0289) uchar i;//定义变量用于数据提取指针
(0290) for(i=0;i<16;i++)
0290 2744 CLR R20
0291 C037 RJMP 0x02C9
(0291) {
(0292) Ledplay[i][bn]=data[point][2*i]; //行储存转化为列储存
0292 E280 LDI R24,0x20
0293 9F80 MUL R24,R16
0294 0110 MOVW R2,R0
0295 E584 LDI R24,0x54
0296 E090 LDI R25,0
0297 0E28 ADD R2,R24
0298 1E39 ADC R3,R25
0299 E082 LDI R24,2
029A 9F84 MUL R24,R20
029B 01F0 MOVW R30,R0
029C 0DE2 ADD R30,R2
029D 1DF3 ADC R31,R3
029E 91E4 LPM R30,0(Z)
029F E38A LDI R24,0x3A
02A0 9F84 MUL R24,R20
02A1 0110 MOVW R2,R0
02A2 E685 LDI R24,0x65
02A3 E090 LDI R25,0
02A4 0E28 ADD R2,R24
02A5 1E39 ADC R3,R25
02A6 91A00060 LDS R26,bn
02A8 27BB CLR R27
02A9 0DA2 ADD R26,R2
02AA 1DB3 ADC R27,R3
02AB 93EC ST R30,0(X)
(0293) Ledplay[i][bn+1]=data[point][(2*i)+1]; //行储存转化为列储存
02AC E280 LDI R24,0x20
02AD 9F80 MUL R24,R16
02AE 0110 MOVW R2,R0
02AF E584 LDI R24,0x54
02B0 E090 LDI R25,0
02B1 0E28 ADD R2,R24
02B2 1E39 ADC R3,R25
02B3 E082 LDI R24,2
02B4 9F84 MUL R24,R20
02B5 01F0 MOVW R30,R0
02B6 9631 ADIW R30,1
02B7 0DE2 ADD R30,R2
02B8 1DF3 ADC R31,R3
02B9 91E4 LPM R30,0(Z)
02BA E38A LDI R24,0x3A
02BB 9F84 MUL R24,R20
02BC 0110 MOVW R2,R0
02BD E685 LDI R24,0x65
02BE E090 LDI R25,0
02BF 0E28 ADD R2,R24
02C0 1E39 ADC R3,R25
02C1 91A00060 LDS R26,bn
02C3 27BB CLR R27
02C4 9611 ADIW R26,1
02C5 0DA2 ADD R26,R2
02C6 1DB3 ADC R27,R3
02C7 93EC ST R30,0(X)
02C8 9543 INC R20
02C9 3140 CPI R20,0x10
02CA F408 BCC 0x02CC
02CB CFC6 RJMP 0x0292
(0294) }
(0295) bn+=2;
02CC 91800060 LDS R24,bn
02CE 5F8E SUBI R24,0xFE
02CF 93800060 STS bn,R24
02D1 940E04AE CALL pop_gset1
02D3 9508 RET
_putin1:
i --> R20
point --> R16
02D4 940E04AB CALL push_gset1
(0296) }
(0297)
(0298) //将数字符装入显示寄存器
(0299) void putin1 (uchar point)//字符载入函数 载入第point个汉字
(0300) {
(0301) uchar i;//定义变量用于数据提取指针
(0302) for(i=0;i<16;i++)
02D6 2744 CLR R20
02D7 C01D RJMP 0x02F5
(0303) {
(0304) Ledplay[i][bn]=data1[point][i];
02D8 E280 LDI R24,0x20
02D9 9F80 MUL R24,R16
02DA 0110 MOVW R2,R0
02DB EB84 LDI R24,0xB4
02DC E092 LDI R25,2
02DD 0E28 ADD R2,R24
02DE 1E39 ADC R3,R25
02DF E082 LDI R24,2
02E0 9F84 MUL R24,R20
02E1 01F0 MOVW R30,R0
02E2 0DE2 ADD R30,R2
02E3 1DF3 ADC R31,R3
02E4 9005 LPM R0,Z+
02E5 9014 LPM R1,0(Z)
02E6 01F0 MOVW R30,R0
02E7 E38A LDI R24,0x3A
02E8 9F84 MUL R24,R20
02E9 0110 MOVW R2,R0
02EA E685 LDI R24,0x65
02EB E090 LDI R25,0
02EC 0E28 ADD R2,R24
02ED 1E39 ADC R3,R25
02EE 91A00060 LDS R26,bn
02F0 27BB CLR R27
02F1 0DA2 ADD R26,R2
02F2 1DB3 ADC R27,R3
02F3 93EC ST R30,0(X)
02F4 9543 INC R20
02F5 3140 CPI R20,0x10
02F6 F308 BCS 0x02D8
(0305) }
(0306) bn++;
02F7 91800060 LDS R24,bn
02F9 5F8F SUBI R24,0xFF
02FA 93800060 STS bn,R24
02FC 940E04AE CALL pop_gset1
02FE 9508 RET
(0307) }
(0308) //显示存器清空(0x00)
(0309) void clearRAM (void)
(0310) {//寄存器清空函数
(0311) uchar a,b;//定义变量用于清空数据指针fyhh
(0312) for(b=0;b<17;b++)
_clearRAM:
b --> R16
a --> R18
02FF 2700 CLR R16
0300 C013 RJMP 0x0314
(0313) {
(0314) for(a=0;a<42;a++){//指向40个寄存器
0301 2722 CLR R18
0302 C00E RJMP 0x0311
(0315) Ledplay[b][a]=0;//将指向的寄存器清空
0303 E38A LDI R24,0x3A
0304 9F80 MUL R24,R16
0305 0110 MOVW R2,R0
0306 E685 LDI R24,0x65
0307 E090 LDI R25,0
0308 0E28 ADD R2,R24
0309 1E39 ADC R3,R25
030A 2FE2 MOV R30,R18
030B 27FF CLR R31
030C 0DE2 ADD R30,R2
030D 1DF3 ADC R31,R3
030E 2422 CLR R2
030F 8220 STD Z+0,R2
0310 9523 INC R18
0311 322A CPI R18,0x2A
0312 F380 BCS 0x0303
0313 9503 INC R16
0314 3101 CPI R16,0x11
0315 F358 BCS 0x0301
0316 9508 RET
_clearping:
j --> R20
0317 940E04AB CALL push_gset1
(0316) }
(0317) }
(0318) }
(0319) //清屏
(0320) void clearping(void)
(0321) {unsigned char j;
(0322) clr_STB();
0319 98C4 CBI 0x18,4
(0323) for(j=0;j<20;j++)//20*8列都不显示红‘绿色
031A 2744 CLR R20
031B C003 RJMP 0x031F
(0324) Send_Byte_DR_DG(0x00);//8位的各个所在列都不显示红‘绿色
031C 2700 CLR R16
031D DF5A RCALL _Send_Byte_DR_DG
031E 9543 INC R20
031F 3144 CPI R20,0x14
0320 F3D8 BCS 0x031C
(0325) set_STB();//锁存
0321 9AC4 SBI 0x18,4
0322 940E04AE CALL pop_gset1
0324 9508 RET
_DisPlay_onetime:
i --> R22
j --> R10
colour --> R20
0325 940E04A5 CALL push_gset4
0327 2F40 MOV R20,R16
(0326) }
(0327) //显示一次板面汉字
(0328) void DisPlay_onetime(unsigned char colour)
(0329) //colour=0\1\2分别为红\绿\橙色显示
(0330) {
(0331) uchar i,j;
(0332) for(i=0;i<16;i++)//扫描16行
0328 2766 CLR R22
0329 C053 RJMP 0x037D
(0333) {
(0334) clr_STB();
032A 98C4 CBI 0x18,4
(0335) for(j=0;j<20;j++)//每一片点阵出现的第一个汉字从第|Jmax-20|列(从输入端开始数)开始入x=20时每一片点阵出现的第一个汉字从第0个字位开始入
032B 24AA CLR R10
032C C03A RJMP 0x0367
(0336) { //*本版面最多能显示10个字,即20列(Ledplay的前20 列)其他汉字通过移动(把20列以后的字信号移到前20列范围内,即版内)
(0337) switch(colour)
032D 2EC4 MOV R12,R20
032E 24DD CLR R13
032F 20CC TST R12
0330 F411 BNE 0x0333
0331 20DD TST R13
0332 F051 BEQ 0x033D
0333 01C6 MOVW R24,R12
0334 3081 CPI R24,1
0335 E0E0 LDI R30,0
0336 079E CPC R25,R30
0337 F099 BEQ 0x034B
0338 3082 CPI R24,2
0339 E0E0 LDI R30,0
033A 079E CPC R25,R30
033B F0E9 BEQ 0x0359
033C C029 RJMP 0x0366
(0338) {
(0339) case 0: Send_Byte_DR(Ledplay[i][j]);
033D E38A LDI R24,0x3A
033E 9F86 MUL R24,R22
033F 0110 MOVW R2,R0
0340 E685 LDI R24,0x65
0341 E090 LDI R25,0
0342 0E28 ADD R2,R24
0343 1E39 ADC R3,R25
0344 2DEA MOV R30,R10
0345 27FF CLR R31
0346 0DE2 ADD R30,R2
0347 1DF3 ADC R31,R3
0348 8100 LDD R16,Z+0
0349 DF1A RCALL _Send_Byte_DR
(0340) break;
034A C01B RJMP 0x0366
(0341) case 1: Send_Byte_DG(Ledplay[i][j]);
034B E38A LDI R24,0x3A
034C 9F86 MUL R24,R22
034D 0110 MOVW R2,R0
034E E685 LDI R24,0x65
034F E090 LDI R25,0
0350 0E28 ADD R2,R24
0351 1E39 ADC R3,R25
0352 2DEA MOV R30,R10
0353 27FF CLR R31
0354 0DE2 ADD R30,R2
0355 1DF3 ADC R31,R3
0356 8100 LDD R16,Z+0
0357 DEF8 RCALL _Send_Byte_DG
(0342) break;
0358 C00D RJMP 0x0366
(0343) case 2: Send_Byte_DR_DG(Ledplay[i][j]);
0359 E38A LDI R24,0x3A
035A 9F86 MUL R24,R22
035B 0110 MOVW R2,R0
035C E685 LDI R24,0x65
035D E090 LDI R25,0
035E 0E28 ADD R2,R24
035F 1E39 ADC R3,R25
0360 2DEA MOV R30,R10
0361 27FF CLR R31
0362 0DE2 ADD R30,R2
0363 1DF3 ADC R31,R3
0364 8100 LDD R16,Z+0
0365 DF12 RCALL _Send_Byte_DR_DG
0366 94A3 INC R10
0367 2D8A MOV R24,R10
0368 3184 CPI R24,0x14
0369 F408 BCC 0x036B
036A CFC2 RJMP 0x032D
(0344) break;
(0345) default:break;
(0346) }
(0347) }
(0348) set_G();
036B 9A90 SBI 0x12,0
(0349) delay_nus(2);
036C E002 LDI R16,2
036D E010 LDI R17,0
036E DEB9 RCALL _delay_nus
(0350) set_STB();//锁存
036F 9AC4 SBI 0x18,4
(0351) PORTB=ROW[i];//i行控制位 共阴的二极管允许了接地
0370 EF84 LDI R24,0xF4
0371 E093 LDI R25,3
0372 2FE6 MOV R30,R22
0373 27FF CLR R31
0374 0FE8 ADD R30,R24
0375 1FF9 ADC R31,R25
0376 91E4 LPM R30,0(Z)
0377 BBE8 OUT 0x18,R30
(0352) clr_G();//行控制有效
0378 9890 CBI 0x12,0
(0353) delay_nus(displayTime);
0379 EC08 LDI R16,0xC8
037A E010 LDI R17,0
037B DEAC RCALL _delay_nus
037C 9563 INC R22
037D 3160 CPI R22,0x10
037E F408 BCC 0x0380
037F CFAA RJMP 0x032A
(0354) }
(0355) delay_nus(200);
0380 EC08 LDI R16,0xC8
0381 E010 LDI R17,0
0382 DEA5 RCALL _delay_nus
(0356) set_G();
0383 9A90 SBI 0x12,0
0384 940E04A0 CALL pop_gset4
0386 9508 RET
_left_move:
data1 --> R22
data0 --> R20
i --> R16
j --> R18
0387 940E04A9 CALL push_gset2
(0357) }
(0358) //下面函数功能为把信号(汉字)前移
(0359) void left_move(void)
(0360) {
(0361) uchar data0,data1,i,j;
(0362) for(i=0;i<16;i++)
0389 2700 CLR R16
038A C037 RJMP 0x03C2
(0363) {
(0364) for(j=0;j<(howmany0+hanzishu)*2;j++)//如41=(howmany0+hanzishu)*2+1
038B 2722 CLR R18
038C C031 RJMP 0x03BE
(0365) {
(0366) data0=Ledplay[i][j];
038D E38A LDI R24,0x3A
038E 9F80 MUL R24,R16
038F 0110 MOVW R2,R0
0390 E685 LDI R24,0x65
0391 E090 LDI R25,0
0392 0E28 ADD R2,R24
0393 1E39 ADC R3,R25
0394 2FE2 MOV R30,R18
0395 27FF CLR R31
0396 0DE2 ADD R30,R2
0397 1DF3 ADC R31,R3
0398 8140 LDD R20,Z+0
(0367) data1=Ledplay[i][j+1];
0399 E38A LDI R24,0x3A
039A 9F80 MUL R24,R16
039B 0110 MOVW R2,R0
039C E685 LDI R24,0x65
039D E090 LDI R25,0
039E 0E28 ADD R2,R24
039F 1E39 ADC R3,R25
03A0 2FE2 MOV R30,R18
03A1 27FF CLR R31
03A2 9631 ADIW R30,1
03A3 0DE2 ADD R30,R2
03A4 1DF3 ADC R31,R3
03A5 8160 LDD R22,Z+0
(0368) Ledplay[i][j]=(data0<<1)|(data1>>7);//从第二个字符起它的信号始终没有掉失,
03A6 E38A LDI R24,0x3A
03A7 9F80 MUL R24,R16
03A8 0110 MOVW R2,R0
03A9 E685 LDI R24,0x65
03AA E090 LDI R25,0
03AB 0E28 ADD R2,R24
03AC 1E39 ADC R3,R25
03AD 2FE2 MOV R30,R18
03AE 27FF CLR R31
03AF 0DE2 ADD R30,R2
03B0 1DF3 ADC R31,R3
03B1 2E26 MOV R2,R22
03B2 9426 LSR R2
03B3 9426 LSR R2
03B4 9426 LSR R2
03B5 9426 LSR R2
03B6 9426 LSR R2
03B7 9426 LSR R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -