📄 ylf240128.s
字号:
ldi R24,65
std y+0,R24
clr R18
ldi R16,32
xcall _WriteTwoData
.dbline 1337
; WriteTwoData(0x00,0x08,0x42);//设置图形显示区域首地址
ldi R24,66
std y+0,R24
ldi R18,8
clr R16
xcall _WriteTwoData
.dbline 1338
; WriteTwoData(0x20,0x00,0x43);//设置文本显示区域宽度32
ldi R24,67
std y+0,R24
clr R18
ldi R16,32
xcall _WriteTwoData
.dbline 1340
;
; STA01();
xcall _STA01
.dbline 1341
; WriteCmd(0xA7);//光标形状设置
ldi R16,167
xcall _WriteCmd
.dbline 1342
; STA01();
xcall _STA01
.dbline 1343
; WriteCmd(0x80);//显示方式设置,逻辑"或"合成
ldi R16,128
xcall _WriteCmd
.dbline 1344
; STA01();
xcall _STA01
.dbline 1345
; WriteCmd(0x9C);//显示开关设置,文本、图形显示启用
ldi R16,156
xcall _WriteCmd
.dbline 1347
;
; WriteTwoData(0x03,0x00,0x22);//设置CGRAM OFFSET地址 0000 0011
ldi R24,34
std y+0,R24
clr R18
ldi R16,3
xcall _WriteTwoData
.dbline -2
L15:
adiw R28,1
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r delay 20 c
.dbend
.dbfunc e ClearLcd _ClearLcd fV
; count -> R20,R21
.even
_ClearLcd::
xcall push_gset1
sbiw R28,1
.dbline -1
.dbline 1351
; }
;
; void ClearLcd()
; {//用于清空显示器
.dbline 1352
; uint count=512;
ldi R20,512
ldi R21,2
.dbline 1353
; WriteTwoData(0x00,0x00,0x24);//设置显示RAM指针
ldi R24,36
std y+0,R24
clr R18
clr R16
xcall _WriteTwoData
.dbline 1354
; WriteCmd(0xB0);//自动写方式
ldi R16,176
xcall _WriteCmd
xjmp L21
L20:
.dbline 1356
.dbline 1357
xcall _STA3
.dbline 1358
clr R16
xcall _WriteData
.dbline 1359
L21:
.dbline 1355
; while(count--)
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L20
tst R3
brne L20
X0:
.dbline 1360
; {
; STA3();
; WriteData(0x00);
; }
; WriteCmd(0xB2);//结束自动写指令
ldi R16,178
xcall _WriteCmd
.dbline 1362
;
; count=4096;
ldi R20,4096
ldi R21,16
.dbline 1363
; WriteTwoData(0x00,0x08,0x24);//设置显示RAM首地址
ldi R24,36
std y+0,R24
ldi R18,8
clr R16
xcall _WriteTwoData
.dbline 1364
; WriteCmd(0xB0);//自动写方式
ldi R16,176
xcall _WriteCmd
xjmp L24
L23:
.dbline 1366
.dbline 1367
xcall _STA3
.dbline 1368
clr R16
xcall _WriteData
.dbline 1369
L24:
.dbline 1365
; while(count--)
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L23
tst R3
brne L23
X1:
.dbline 1370
; {
; 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 1381
; }
;
; //通过CGRAM写入用户个人的字符库
; //16*16显示
; //num表示写入库的字符的个数
; //写入的数据放在CGTAB[]数组里
; //CGTAB格式
; //左半部分--右半部分
; //其中code为从零开始的地址,text为字符数组
; void CGRamGen(const uchar text[])
; {//自动写入CGRAM,共128字符,num表示字符个数
.dbline 1382
; uint num=0;
clr R22
clr R23
.dbline 1384
; 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 1385
; WriteCmd(0xB0);//自动写方式
ldi R16,176
xcall _WriteCmd
.dbline 1386
; for(round=0;round<10;round++)
clr R20
clr R21
xjmp L30
L27:
.dbline 1387
; {
.dbline 1388
; num=16;
ldi R22,16
ldi R23,0
xjmp L32
L31:
.dbline 1390
.dbline 1391
xcall _STA3
.dbline 1392
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 1393
subi R22,1
sbci R23,0
.dbline 1394
L32:
.dbline 1389
; while(num)
cpi R22,0
cpc R22,R23
brne L31
X2:
.dbline 1395
; {
; STA3();
; WriteData(text[32-num*2+round*32]);
; num--;
; }
; num=16;
ldi R22,16
ldi R23,0
xjmp L35
L34:
.dbline 1397
.dbline 1398
xcall _STA3
.dbline 1399
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 1400
subi R22,1
sbci R23,0
.dbline 1401
L35:
.dbline 1396
cpi R22,0
cpc R22,R23
brne L34
X3:
.dbline 1402
L28:
.dbline 1386
subi R20,255 ; offset = 1
sbci R21,255
L30:
.dbline 1386
cpi R20,10
ldi R30,0
cpc R21,R30
brsh X4
xjmp L27
X4:
.dbline 1403
; 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 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 1424
; }
;
; /*void CGRamGenTry(const uchar text[])
; {//自动写入CGRAM,共128字符,num表示字符个数
; uint num=0;
; WriteTwoData(0x00,0x1c,0x24);//设置地址指针 (0001 1)(100 0000 0)000
; WriteCmd(0xB0);//自动写方式
; num=320;
; while(num)
; {
; STA3();
; WriteData(text[320-num]);
; num--;
; }
; WriteCmd(0xB2);//结束自动写
; }
; */
;
; //通过CGRAM写入字符图层,位置为8*8字符行和列
; void DispChinaCode(uchar o_x,uchar o_y,uchar code)
; {//设置在x,y位置显示code代码的字符
.dbline 1426
; uint temp;
; temp=32*o_y;
ldi R24,32
mul R24,R22
movw R22,R0
.dbline 1427
; temp=temp+o_x;//得到位置存储器
mov R2,R10
clr R3
add R22,R2
adc R23,R3
.dbline 1428
; temp=temp+0x00;//加上字符区启始位置
.dbline 1429
; 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 1430
; WriteOneData(code,0xc0);//数据写,地址加1
ldi R18,192
mov R16,R20
xcall _WriteOneData
.dbline 1431
; WriteOneData(code+2,0xc0);//数据写,地址加1
ldi R18,192
mov R16,R20
subi R16,254 ; addi 2
xcall _WriteOneData
.dbline 1432
; temp+=32;
subi R22,224 ; offset = 32
sbci R23,255
.dbline 1433
; 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 1434
; WriteOneData(code+1,0xc0);//数据写,地址加1
ldi R18,192
mov R16,R20
subi R16,255 ; addi 1
xcall _WriteOneData
.dbline 1435
; WriteOneData(code+3,0xc0);//数据写,地址加1
ldi R18,192
mov R16,R20
subi R16,253 ; addi 3
xcall _WriteOneData
.dbline -2
L37:
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 1442
; }
;
; //通过点阵图层写入字符,字符大小为32*32
; //写入速度较慢
; //位置为x*32,y*32,显示数据为disp[]
; void DispChinaPic16(uchar o_x,uchar o_y,const uchar disp[])
; {
.dbline 1445
; 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 1446
; temp=temp+o_x;
mov R2,R20
clr R3
add R22,R2
adc R23,R3
.dbline 1447
; temp=temp+0x800;//加上图形区启始位置
subi R22,0 ; offset = 2048
sbci R23,248
.dbline 1448
; num=16;
ldi R20,16
xjmp L40
L39:
.dbline 1450
.dbline 1451
ldi R24,36
std y+0,R24
movw R18,R22
mov R18,R19
clr R19
mov R16,R22
xcall _WriteTwoData
.dbline 1452
subi R22,224 ; offset = 32
sbci R23,255
.dbline 1453
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 1454
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 1455
dec R20
.dbline 1456
L40:
.dbline 1449
; while(num)
tst R20
brne L39
.dbline -2
L38:
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 main _main fV
.even
_main::
sbiw R28,2
.dbline -1
.dbline 1481
; {
; 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[])
; {
; uint temp;
; uchar num;
; temp=32*8*o_y;
; temp=temp+o_x;
; temp=temp+0x800;//加上图形区启始位置
; num=24;
; while(num)
; {
; 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 1482
; McuInit();
xcall _McuInit
.dbline 1483
; LcdInit();
xcall _LcdInit
.dbline 1484
; ClearLcd();
xcall _ClearLcd
.dbline 1497
; /* 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 1504
; // 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 1505
; DispChinaCode(26,0,0x84);
ldi R24,132
std y+0,R24
clr R18
ldi R16,26
xcall _DispChinaCode
.dbline 1506
; DispChinaCode(28,0,0x88);
ldi R24,136
std y+0,R24
clr R18
ldi R16,28
xcall _DispChinaCode
.dbline 1507
; DispChinaCode(24,2,0x8c);
ldi R24,140
std y+0,R24
ldi R18,2
ldi R16,24
xcall _DispChinaCode
.dbline 1508
; DispChinaCode(26,2,0x90);
ldi R24,144
std y+0,R24
ldi R18,2
ldi R16,26
xcall _DispChinaCode
.dbline 1509
; DispChinaCode(28,2,0x94);
ldi R24,148
std y+0,R24
ldi R18,2
ldi R16,28
xcall _DispChinaCode
.dbline 1510
; DispChinaCode(24,4,0x98);
ldi R24,152
std y+0,R24
ldi R18,4
ldi R16,24
xcall _DispChinaCode
.dbline 1526
;
; /* 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 1527
; 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 1528
; 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 1529
; 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 1530
; 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 1531
; 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 1532
; 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 1533
; 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 1534
; 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 1535
; 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 1536
; 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 1537
; 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 1538
; 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
L43:
.dbline 1560
L44:
.dbline 1560
xjmp L43
X5:
.dbline -2
L42:
adiw R28,2
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -