⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ylf240128a-final.s

📁 自己编制的北京友力发公司的液晶显示模块驱动程序
💻 S
📖 第 1 页 / 共 4 页
字号:
	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 + -