📄 ylf240128a-final.s
字号:
ldi R18,8
clr R16
xcall _WriteTwoData
.dbline 1349
; WriteCmd(0xB0);//自动写方式
ldi R16,176
xcall _WriteCmd
xjmp L24
L23:
.dbline 1351
.dbline 1352
xcall _STA3
.dbline 1353
clr R16
xcall _WriteData
.dbline 1354
L24:
.dbline 1350
; while(count--)
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L23
tst R3
brne L23
X1:
.dbline 1355
; {
; STA3();
; WriteData(0x00);
; }
; WriteCmd(0xB2);//结束自动写指令
ldi R16,178
xcall _WriteCmd
.dbline -2
L19:
adiw R28,1
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r count 20 i
.dbend
.dbfunc e CGRamGen _CGRamGen fV
; round -> R20,R21
; num -> R22,R23
; text -> R10,R11
.even
_CGRamGen::
xcall push_gset3
movw R10,R16
sbiw R28,1
.dbline -1
.dbline 1366
; }
;
; //通过CGRAM写入用户个人的字符库
; //16*16显示
; //num表示写入库的字符的个数
; //写入的数据放在CGTAB[]数组里
; //CGTAB格式
; //左半部分--右半部分
; //其中code为从零开始的地址,text为字符数组
; void CGRamGen(const uchar text[])
; {//自动写入CGRAM,共128字符,num表示字符个数
.dbline 1367
; uint num=0;
clr R22
clr R23
.dbline 1369
; uint round;
; WriteTwoData(0x00,0x1c,0x24);//设置地址指针 (0001 1)(100 0000 0)000
ldi R24,36
std y+0,R24
ldi R18,28
clr R16
xcall _WriteTwoData
.dbline 1370
; WriteCmd(0xB0);//自动写方式
ldi R16,176
xcall _WriteCmd
.dbline 1371
; for(round=0;round<10;round++)
clr R20
clr R21
xjmp L30
L27:
.dbline 1372
; {
.dbline 1373
; num=16;
ldi R22,16
ldi R23,0
xjmp L32
L31:
.dbline 1375
.dbline 1376
xcall _STA3
.dbline 1377
ldi R16,2
ldi R17,0
movw R18,R22
xcall empy16s
ldi R30,32
ldi R31,0
sub R30,R16
sbc R31,R17
ldi R16,32
ldi R17,0
movw R18,R20
xcall empy16s
add R30,R16
adc R31,R17
add R30,R10
adc R31,R11
lpm R16,Z
xcall _WriteData
.dbline 1378
subi R22,1
sbci R23,0
.dbline 1379
L32:
.dbline 1374
; while(num)
cpi R22,0
cpc R22,R23
brne L31
X2:
.dbline 1380
; {
; STA3();
; WriteData(text[32-num*2+round*32]);
; num--;
; }
; num=16;
ldi R22,16
ldi R23,0
xjmp L35
L34:
.dbline 1382
.dbline 1383
xcall _STA3
.dbline 1384
ldi R16,2
ldi R17,0
movw R18,R22
xcall empy16s
ldi R30,33
ldi R31,0
sub R30,R16
sbc R31,R17
ldi R16,32
ldi R17,0
movw R18,R20
xcall empy16s
add R30,R16
adc R31,R17
add R30,R10
adc R31,R11
lpm R16,Z
xcall _WriteData
.dbline 1385
subi R22,1
sbci R23,0
.dbline 1386
L35:
.dbline 1381
cpi R22,0
cpc R22,R23
brne L34
X3:
.dbline 1387
L28:
.dbline 1371
subi R20,255 ; offset = 1
sbci R21,255
L30:
.dbline 1371
cpi R20,10
ldi R30,0
cpc R21,R30
brsh X4
xjmp L27
X4:
.dbline 1388
; while(num)
; {
; STA3();
; WriteData(text[33-num*2+round*32]);
; num--;
; }
; }
; WriteCmd(0xB2);//结束自动写
ldi R16,178
xcall _WriteCmd
.dbline -2
L26:
adiw R28,1
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r round 20 i
.dbsym r num 22 i
.dbsym r text 10 pkc
.dbend
.dbfunc e CGRamGenTry _CGRamGenTry fV
; num -> R20,R21
; text -> R22,R23
.even
_CGRamGenTry::
xcall push_gset2
movw R22,R16
sbiw R28,1
.dbline -1
.dbline 1392
; }
;
; void CGRamGenTry(const uchar text[])
; {//自动写入CGRAM,共128字符,num表示字符个数
.dbline 1393
; uint num=0;
clr R20
clr R21
.dbline 1394
; WriteTwoData(0x00,0x1c,0x24);//设置地址指针 (0001 1)(100 0000 0)000
ldi R24,36
std y+0,R24
ldi R18,28
clr R16
xcall _WriteTwoData
.dbline 1395
; WriteCmd(0xB0);//自动写方式
ldi R16,176
xcall _WriteCmd
.dbline 1396
; num=320;
ldi R20,320
ldi R21,1
xjmp L39
L38:
.dbline 1398
.dbline 1399
xcall _STA3
.dbline 1400
ldi R30,320
ldi R31,1
sub R30,R20
sbc R31,R21
add R30,R22
adc R31,R23
lpm R16,Z
xcall _WriteData
.dbline 1401
subi R20,1
sbci R21,0
.dbline 1402
L39:
.dbline 1397
; while(num)
cpi R20,0
cpc R20,R21
brne L38
X5:
.dbline 1403
; {
; STA3();
; WriteData(text[320-num]);
; num--;
; }
; WriteCmd(0xB2);//结束自动写
ldi R16,178
xcall _WriteCmd
.dbline -2
L37:
adiw R28,1
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r num 20 i
.dbsym r text 22 pkc
.dbend
.dbfunc e DispChinaCode _DispChinaCode fV
; temp -> R22,R23
; code -> R20
; o_y -> R22
; o_x -> R10
.even
_DispChinaCode::
xcall push_gset3
mov R22,R18
mov R10,R16
sbiw R28,1
ldd R20,y+7
.dbline -1
.dbline 1408
; }
;
; //通过CGRAM写入字符图层,位置为8*8字符行和列
; void DispChinaCode(uchar o_x,uchar o_y,uchar code)
; {//设置在x,y位置显示code代码的字符
.dbline 1410
; uint temp;
; temp=32*o_y;
ldi R24,32
mul R24,R22
movw R22,R0
.dbline 1411
; temp=temp+o_x;//得到位置存储器
mov R2,R10
clr R3
add R22,R2
adc R23,R3
.dbline 1412
; temp=temp+0x00;//加上字符区启始位置
.dbline 1413
; WriteTwoData((uchar)temp,(uchar)(temp>>8),0x24);//设置地址指针
ldi R24,36
std y+0,R24
movw R18,R22
mov R18,R19
clr R19
mov R16,R22
xcall _WriteTwoData
.dbline 1414
; WriteOneData(code,0xc0);//数据写,地址加1
ldi R18,192
mov R16,R20
xcall _WriteOneData
.dbline 1415
; WriteOneData(code+2,0xc0);//数据写,地址加1
ldi R18,192
mov R16,R20
subi R16,254 ; addi 2
xcall _WriteOneData
.dbline 1416
; temp+=32;
subi R22,224 ; offset = 32
sbci R23,255
.dbline 1417
; WriteTwoData((uchar)temp,(uchar)(temp>>8),0x24);//设置地址指针
ldi R24,36
std y+0,R24
movw R18,R22
mov R18,R19
clr R19
mov R16,R22
xcall _WriteTwoData
.dbline 1418
; WriteOneData(code+1,0xc0);//数据写,地址加1
ldi R18,192
mov R16,R20
subi R16,255 ; addi 1
xcall _WriteOneData
.dbline 1419
; WriteOneData(code+3,0xc0);//数据写,地址加1
ldi R18,192
mov R16,R20
subi R16,253 ; addi 3
xcall _WriteOneData
.dbline -2
L41:
adiw R28,1
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp 22 i
.dbsym r code 20 c
.dbsym r o_y 22 c
.dbsym r o_x 10 c
.dbend
.dbfunc e DispChinaPic16 _DispChinaPic16 fV
; num -> R20
; temp -> R22,R23
; disp -> R10,R11
; o_y -> R22
; o_x -> R20
.even
_DispChinaPic16::
xcall push_gset3
mov R22,R18
mov R20,R16
sbiw R28,1
ldd R10,y+7
ldd R11,y+8
.dbline -1
.dbline 1426
; }
;
; //通过点阵图层写入字符,字符大小为32*32
; //写入速度较慢
; //位置为x*32,y*32,显示数据为disp[]
; void DispChinaPic16(uchar o_x,uchar o_y,const uchar disp[])
; {
.dbline 1429
; uint temp;
; uchar num;
; temp=32*8*o_y;
mov R18,R22
clr R19
ldi R16,256
ldi R17,1
xcall empy16s
movw R22,R16
.dbline 1430
; temp=temp+o_x;
mov R2,R20
clr R3
add R22,R2
adc R23,R3
.dbline 1431
; temp=temp+0x800;//加上图形区启始位置
subi R22,0 ; offset = 2048
sbci R23,248
.dbline 1432
; num=16;
ldi R20,16
xjmp L44
L43:
.dbline 1434
.dbline 1435
ldi R24,36
std y+0,R24
movw R18,R22
mov R18,R19
clr R19
mov R16,R22
xcall _WriteTwoData
.dbline 1436
subi R22,224 ; offset = 32
sbci R23,255
.dbline 1437
ldi R18,192
ldi R24,2
mul R24,R20
ldi R30,32
ldi R31,0
sub R30,R0
sbc R31,R1
add R30,R10
adc R31,R11
lpm R16,Z
xcall _WriteOneData
.dbline 1438
ldi R18,192
ldi R24,2
mul R24,R20
ldi R30,33
ldi R31,0
sub R30,R0
sbc R31,R1
add R30,R10
adc R31,R11
lpm R16,Z
xcall _WriteOneData
.dbline 1439
dec R20
.dbline 1440
L44:
.dbline 1433
; while(num)
tst R20
brne L43
.dbline -2
L42:
adiw R28,1
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r num 20 c
.dbsym r temp 22 i
.dbsym r disp 10 pkc
.dbsym r o_y 22 c
.dbsym r o_x 20 c
.dbend
.dbfunc e DispChinaPic24 _DispChinaPic24 fV
; temp -> R20,R21
; num -> R22
; disp -> R10,R11
; o_y -> R20
; o_x -> R22
.even
_DispChinaPic24::
xcall push_gset3
mov R20,R18
mov R22,R16
sbiw R28,1
ldd R10,y+7
ldd R11,y+8
.dbline -1
.dbline 1445
; {
; WriteTwoData((uchar)temp,(uchar)(temp>>8),0x24);//设置地址指针
; temp=temp+32;// 换行
; WriteOneData(disp[32-num*2],0xc0);//数据写,地址加1
; WriteOneData(disp[33-num*2],0xc0);//数据写,地址加1
; num--;
; }
; }
;
;
; void DispChinaPic24(uchar o_x,uchar o_y,const uchar disp[])
; {
.dbline 1448
; uint temp;
; uchar num;
; temp=32*8*o_y;
mov R18,R20
clr R19
ldi R16,256
ldi R17,1
xcall empy16s
movw R20,R16
.dbline 1449
; temp=temp+o_x;
mov R2,R22
clr R3
add R20,R2
adc R21,R3
.dbline 1450
; temp=temp+0x800;//加上图形区启始位置
subi R20,0 ; offset = 2048
sbci R21,248
.dbline 1451
; num=24;
ldi R22,24
xjmp L48
L47:
.dbline 1453
.dbline 1454
ldi R24,36
std y+0,R24
movw R18,R20
mov R18,R19
clr R19
mov R16,R20
xcall _WriteTwoData
.dbline 1455
subi R20,224 ; offset = 32
sbci R21,255
.dbline 1456
ldi R18,192
ldi R24,3
mul R24,R22
ldi R30,72
ldi R31,0
sub R30,R0
sbc R31,R1
add R30,R10
adc R31,R11
lpm R16,Z
xcall _WriteOneData
.dbline 1457
ldi R18,192
ldi R24,3
mul R24,R22
ldi R30,73
ldi R31,0
sub R30,R0
sbc R31,R1
add R30,R10
adc R31,R11
lpm R16,Z
xcall _WriteOneData
.dbline 1458
ldi R18,192
ldi R24,3
mul R24,R22
ldi R30,74
ldi R31,0
sub R30,R0
sbc R31,R1
add R30,R10
adc R31,R11
lpm R16,Z
xcall _WriteOneData
.dbline 1459
dec R22
.dbline 1460
L48:
.dbline 1452
; while(num)
tst R22
brne L47
.dbline -2
L46:
adiw R28,1
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp 20 i
.dbsym r num 22 c
.dbsym r disp 10 pkc
.dbsym r o_y 20 c
.dbsym r o_x 22 c
.dbend
.dbfunc e main _main fV
.even
_main::
sbiw R28,2
.dbline -1
.dbline 1464
; {
; WriteTwoData((uchar)temp,(uchar)(temp>>8),0x24);//设置地址指针
; temp=temp+32;// 换行
; WriteOneData(disp[72-num*3],0xc0);//数据写,地址加1
; WriteOneData(disp[73-num*3],0xc0);//数据写,地址加1
; WriteOneData(disp[74-num*3],0xc0);//数据写,地址加1
; num--;
; }
; }
;
; void main()
; {
.dbline 1465
; McuInit();
xcall _McuInit
.dbline 1466
; LcdInit();
xcall _LcdInit
.dbline 1467
; ClearLcd();
xcall _ClearLcd
.dbline 1480
; /* CGRamGen(0,CGTAB);
; CGRamGen(0x80,yi16_1);
; CGRamGen(0x84,er16_2);
; CGRamGen(0x88,san16_3);
; CGRamGen(0x8c,si16_4);
; CGRamGen(0x90,wu16_5);
; CGRamGen(0x94,liu16_6);
; CGRamGen(0x98,qi16_7);
; CGRamGen(0x9c,ba16_8);
; CGRamGen(0xa0,jiu16_9);
; CGRamGen(0xa4,ling16_0);*/
;
; CGRamGen(number);
ldi R16,<_number
ldi R17,>_number
xcall _CGRamGen
.dbline 1487
; // CGRamGenTry(numbertry);
;
;
; // CGRamGen(0x80,ling16_0);
;
;
; DispChinaCode(24,0,0x80);
ldi R24,128
std y+0,R24
clr R18
ldi R16,24
xcall _DispChinaCode
.dbline 1488
; DispChinaCode(26,0,0x84);
ldi R24,132
std y+0,R24
clr R18
ldi R16,26
xcall _DispChinaCode
.dbline 1489
; DispChinaCode(28,0,0x88);
ldi R24,136
std y+0,R24
clr R18
ldi R16,28
xcall _DispChinaCode
.dbline 1490
; DispChinaCode(24,2,0x8c);
ldi R24,140
std y+0,R24
ldi R18,2
ldi R16,24
xcall _DispChinaCode
.dbline 1491
; DispChinaCode(26,2,0x90);
ldi R24,144
std y+0,R24
ldi R18,2
ldi R16,26
xcall _DispChinaCode
.dbline 1492
; DispChinaCode(28,2,0x94);
ldi R24,148
std y+0,R24
ldi R18,2
ldi R16,28
xcall _DispChinaCode
.dbline 1493
; DispChinaCode(24,4,0x98);
ldi R24,152
std y+0,R24
ldi R18,4
ldi R16,24
xcall _DispChinaCode
.dbline 1509
;
; /* DispChinaPic24(0,0,yang24);
; DispChinaPic24(3,0,jian24);
; DispChinaPic24(6,0,hao24);
; DispChinaPic24(0,3,ci24);//次
; DispChinaPic24(3,3,shu24);//数
; DispChinaPic24(0,6,su24);//速
; DispChinaPic24(3,6,du24);//度
; DispChinaPic24(0,9,xing24);//行
; DispChinaPic24(3,9,cheng24);//程
; DispChinaPic24(0,12,ding24);//定
; DispChinaPic24(3,12,dian24);//点
; DispChinaPic24(6,12,pen24);//喷
; DispChinaPic24(9,12,sshe24);//射
; */
; DispChinaPic16(0,0,yang16);//样
ldi R24,<_yang16
ldi R25,>_yang16
std y+1,R25
std y+0,R24
clr R18
clr R16
xcall _DispChinaPic16
.dbline 1510
; DispChinaPic16(2,0,jian16);//件
ldi R24,<_jian16
ldi R25,>_jian16
std y+1,R25
std y+0,R24
clr R18
ldi R16,2
xcall _DispChinaPic16
.dbline 1511
; DispChinaPic16(4,0,hao16);//号
ldi R24,<_hao16
ldi R25,>_hao16
std y+1,R25
std y+0,R24
clr R18
ldi R16,4
xcall _DispChinaPic16
.dbline 1512
; DispChinaPic16(0,3,ci16);//次
ldi R24,<_ci16
ldi R25,>_ci16
std y+1,R25
std y+0,R24
ldi R18,3
clr R16
xcall _DispChinaPic16
.dbline 1513
; DispChinaPic16(2,3,shu16);//数
ldi R24,<_shu16
ldi R25,>_shu16
std y+1,R25
std y+0,R24
ldi R18,3
ldi R16,2
xcall _DispChinaPic16
.dbline 1514
; DispChinaPic16(0,6,su16);//速
ldi R24,<_su16
ldi R25,>_su16
std y+1,R25
std y+0,R24
ldi R18,6
clr R16
xcall _DispChinaPic16
.dbline 1515
; DispChinaPic16(2,6,du16);//度
ldi R24,<_du16
ldi R25,>_du16
std y+1,R25
std y+0,R24
ldi R18,6
ldi R16,2
xcall _DispChinaPic16
.dbline 1516
; DispChinaPic16(0,9,xing16);//行
ldi R24,<_xing16
ldi R25,>_xing16
std y+1,R25
std y+0,R24
ldi R18,9
clr R16
xcall _DispChinaPic16
.dbline 1517
; DispChinaPic16(2,9,cheng16);//程
ldi R24,<_cheng16
ldi R25,>_cheng16
std y+1,R25
std y+0,R24
ldi R18,9
ldi R16,2
xcall _DispChinaPic16
.dbline 1518
; DispChinaPic16(0,12,ding16);//定
ldi R24,<_ding16
ldi R25,>_ding16
std y+1,R25
std y+0,R24
ldi R18,12
clr R16
xcall _DispChinaPic16
.dbline 1519
; DispChinaPic16(2,12,dian16);//点
ldi R24,<_dian16
ldi R25,>_dian16
std y+1,R25
std y+0,R24
ldi R18,12
ldi R16,2
xcall _DispChinaPic16
.dbline 1520
; DispChinaPic16(4,12,pen16);//喷
ldi R24,<_pen16
ldi R25,>_pen16
std y+1,R25
std y+0,R24
ldi R18,12
ldi R16,4
xcall _DispChinaPic16
.dbline 1521
; DispChinaPic16(6,12,sshe16);//射
ldi R24,<_sshe16
ldi R25,>_sshe16
std y+1,R25
std y+0,R24
ldi R18,12
ldi R16,6
xcall _DispChinaPic16
L51:
.dbline 1543
L52:
.dbline 1543
xjmp L51
X6:
.dbline -2
L50:
adiw R28,2
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -