📄 jifeng_jieshou.s
字号:
.dbline 374
cbi 0x15,4
.dbline 374
.dbline 375
L52:
.dbline 359
subi R20,255 ; offset = 1
sbci R21,255
.dbline 359
cpi R20,8
ldi R30,0
cpc R21,R30
brlt L51
.dbline 376
; LCD_Delay(1);
; temp=temp<<1;
; Hign_LCD_SCL;
; LCD_Delay(1);
; Low_LCD_SCL;
; }
; Low_LCD_RS;
cbi 0x15,5
.dbline 376
.dbline 377
; Hign_LCD_CS; //先cs置0,然后把数据都送到口上准备好(产生上升沿),最后才置片选cs为1
sbi 0x15,7
.dbline 377
.dbline -2
L50:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r temp 22 I
.dbsym r DATA 20 c
.dbend
.dbfunc e Lcd_Write_command _Lcd_Write_command fV
; i -> R20
; temp -> R22
; COMMAND -> R20
.even
_Lcd_Write_command::
rcall push_gset2
mov R20,R16
.dbline -1
.dbline 381
; }
; //---------------------------------LCD写命令函数--------------------------------
; void Lcd_Write_command(uchar COMMAND)
; {
.dbline 383
; uchar i,temp;
; temp = COMMAND;
mov R22,R20
.dbline 384
; Hign_LCD_RS;
sbi 0x15,5
.dbline 384
.dbline 385
; Hign_LCD_CS;
sbi 0x15,7
.dbline 385
.dbline 386
; Hign_LCD_SCL;
sbi 0x15,4
.dbline 386
.dbline 387
; LCD_Delay(1);
ldi R16,1
ldi R17,0
rcall _LCD_Delay
.dbline 388
; Low_LCD_RS; //RS=0 为写命令
cbi 0x15,5
.dbline 388
.dbline 389
; Low_LCD_CS;
cbi 0x15,7
.dbline 389
.dbline 390
; Low_LCD_SCL;
cbi 0x15,4
.dbline 390
.dbline 391
; LCD_Delay(1);
ldi R16,1
ldi R17,0
rcall _LCD_Delay
.dbline 392
; for(i=0;i<8;i++)
clr R20
rjmp L61
L58:
.dbline 393
; {
.dbline 394
; Low_LCD_SCL;
cbi 0x15,4
.dbline 394
.dbline 395
; if(temp&0x80)
sbrs R22,7
rjmp L62
.dbline 396
; {
.dbline 397
; Hign_LCD_SI;
sbi 0x15,3
.dbline 397
.dbline 398
; }
rjmp L63
L62:
.dbline 400
; else
; {
.dbline 401
; Low_LCD_SI;
cbi 0x15,3
.dbline 401
.dbline 402
; }
L63:
.dbline 403
lsl R22
.dbline 404
ldi R16,1
ldi R17,0
rcall _LCD_Delay
.dbline 405
sbi 0x15,4
.dbline 405
.dbline 406
ldi R16,1
ldi R17,0
rcall _LCD_Delay
.dbline 407
cbi 0x15,4
.dbline 407
.dbline 408
L59:
.dbline 392
inc R20
L61:
.dbline 392
cpi R20,8
brlo L58
.dbline 409
; temp=temp<<1;
; LCD_Delay(1);
; Hign_LCD_SCL;
; LCD_Delay(1);
; Low_LCD_SCL;
; }
; Hign_LCD_RS;
sbi 0x15,5
.dbline 409
.dbline 410
; Hign_LCD_CS; //用了temp后,原来的command的就不会变了
sbi 0x15,7
.dbline 410
.dbline -2
L57:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r temp 22 c
.dbsym r COMMAND 20 c
.dbend
.dbfunc e Lcd_CURSOR _Lcd_CURSOR fV
; add_col -> R20
; add_page -> R22
.even
_Lcd_CURSOR::
rcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 414
; }
; //-------------------------------LCD光标函数------------------------------------
; void Lcd_CURSOR(uchar add_page,uchar add_col) //光标定位 //8页(<0fh), 且128列(>0fh)
; { //每页8行
.dbline 415
; Lcd_Write_command(0xB0+(add_page&0x0f)); //+号为合成为一个字节(其实就是或)B0+0x
mov R16,R22
andi R16,15
subi R16,80 ; addi 176
rcall _Lcd_Write_command
.dbline 416
; Lcd_Write_command(0x10|(add_col>>4)); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
mov R16,R20
swap R16
andi R16,#0x0F
ori R16,16
rcall _Lcd_Write_command
.dbline 417
; Lcd_Write_command(add_col&0x0f); //Set column address LSB(00+xx)即Y3 Y2 Y1 Y0
mov R16,R20
andi R16,15
rcall _Lcd_Write_command
.dbline -2
L64:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r add_col 20 c
.dbsym r add_page 22 c
.dbend
.dbfunc e Lcd_Clear _Lcd_Clear fV
; i -> R20
; j -> R22
.even
_Lcd_Clear::
rcall push_gset2
.dbline -1
.dbline 421
; }
; //-------------------------------LCD清屏函数------------------------------------
; void Lcd_Clear(void) //128x64字节,实际中一般要多
; {
.dbline 423
; uchar i,j;
; for(i=0;i<9;i++) //>8页
clr R20
rjmp L69
L66:
.dbline 424
; {
.dbline 425
; Lcd_CURSOR(i,0);
clr R18
mov R16,R20
rcall _Lcd_CURSOR
.dbline 426
; for(j=0;j<132;j++) //>128列
clr R22
rjmp L73
L70:
.dbline 427
.dbline 428
mov R18,R22
mov R16,R20
rcall _Lcd_CURSOR
.dbline 429
clr R16
rcall _Lcd_Write_Data
.dbline 430
L71:
.dbline 426
inc R22
L73:
.dbline 426
cpi R22,132
brlo L70
.dbline 431
L67:
.dbline 423
inc R20
L69:
.dbline 423
cpi R20,9
brlo L66
.dbline -2
L65:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbend
.dbfunc e Test_LCD _Test_LCD fV
; i -> R20
; j -> R22
.even
_Test_LCD::
rcall push_gset2
.dbline -1
.dbline 435
; {
; Lcd_CURSOR(i,j); //列在变,光标也在不停的换列
; Lcd_Write_Data(0); //定好一页后,再一列一列的写00h,列在变
; }
; }
; }
; //--------------------------------LCD测试---------------------------------------
; void Test_LCD(void)
; {
.dbline 437
; uchar i,j;
; for(i=0xB0;i<0xB8;i++) //B0-B8共8页
ldi R20,176
rjmp L78
L75:
.dbline 438
; {
.dbline 439
; Lcd_Write_command(i); //+号为合成为一个字节(其实就是或)B0+0x
mov R16,R20
rcall _Lcd_Write_command
.dbline 440
; Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
ldi R16,16
rcall _Lcd_Write_command
.dbline 441
; Lcd_Write_command(0x01);
ldi R16,1
rcall _Lcd_Write_command
.dbline 442
; Lcd_CURSOR(i,0);
clr R18
mov R16,R20
rcall _Lcd_CURSOR
.dbline 443
; for(j=0;j<132;j++)
clr R22
rjmp L82
L79:
.dbline 444
.dbline 445
mov R18,R22
mov R16,R20
rcall _Lcd_CURSOR
.dbline 446
ldi R16,1
rcall _Lcd_Write_Data
.dbline 447
L80:
.dbline 443
inc R22
L82:
.dbline 443
cpi R22,132
brlo L79
.dbline 449
L76:
.dbline 437
inc R20
L78:
.dbline 437
cpi R20,184
brlo L75
.dbline -2
L74:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbend
.dbfunc e dis_1616hz _dis_1616hz fV
; i -> R20
; j -> R14
; hz -> R22,R23
; row -> R10
; x2 -> R12
; x1 -> R14
.even
_dis_1616hz::
rcall push_gset5
mov R12,R18
mov R14,R16
ldd R10,y+10
ldd R22,y+12
ldd R23,y+13
.dbline -1
.dbline 493
; { //每读写一次,列会自动加1
; Lcd_CURSOR(i,j); //列在变,光标也在不停的换列,重新进行定位
; Lcd_Write_Data(0x01); //检测写进f0h???4点亮4点暗
; }
;
; }
; }
; /*
; //------------------------------------------------------------------------------
; void dis_biankuang() //边框设计
; {
; uchar i,j,k;
; for(i=0xB0;i<0xB8;i++) //2页16行
; {
; Lcd_Write_command(i); //+号为合成为一个字节(其实就是或)B0+0x
; Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
; Lcd_Write_command(0x01);
; Lcd_CURSOR(i,0);
; for(j=0;j<132;j++)
; { //每读写一次,列会自动加1
; Lcd_CURSOR(i,j); //改变列位置,列在变,光标也在不停的换列,重新进行定位
; Lcd_Write_Data(0x03); //检测写进f0h???4点亮4点暗
; }
; for(k=0xB0;k<0xB7;k++)
; {
; for(j=2;j<6;j++)
; {
; Lcd_CURSOR(k,j); //改变列位置,列在变,光标也在不停的换列,重新进行定位
; Lcd_Write_Data(0xff);
; }
; for(j=130;j<132;j++)
; {
; Lcd_CURSOR(k,j); //改变列位置,列在变,光标也在不停的换列,重新进行定位
; Lcd_Write_Data(0xff);
; }
; }
; i=i+7;
; for(j=0;j<132;j++)
; { //每读写一次,列会自动加1
; Lcd_CURSOR(i,j); //列在变,光标也在不停的换列,重新进行定位
; Lcd_Write_Data(0x03); //检测写进f0h???4点亮4点暗
; }
;
;
; }
; }
; */
; //------------------------------16*16汉字显示-----------------------------------
; void dis_1616hz(uchar x1,uchar x2,uchar row,const uchar hz[]) //16*16
; {
.dbline 495
; uchar i,j;
; for(i=x1;i<x2;i++) //2页16行
mov R20,R14
rjmp L87
L84:
.dbline 496
; {
.dbline 497
; Lcd_Write_command(i); //+号为合成为一个字节(其实就是或)B0+0x
mov R16,R20
rcall _Lcd_Write_command
.dbline 498
; Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
ldi R16,16
rcall _Lcd_Write_command
.dbline 499
; Lcd_Write_command(0x01);
ldi R16,1
rcall _Lcd_Write_command
.dbline 500
; Lcd_CURSOR(i,0);
clr R18
mov R16,R20
rcall _Lcd_CURSOR
.dbline 501
; for(j=0;j<16;j++)
clr R14
rjmp L91
L88:
.dbline 502
.dbline 503
mov R18,R14
add R18,R10
mov R16,R20
rcall _Lcd_CURSOR
.dbline 504
mov R2,R14
clr R3
add R2,R22
adc R3,R23
mov R30,R2
mov R31,R3
lpm
mov R16,R0
rcall _Lcd_Write_Data
.dbline 505
L89:
.dbline 501
inc R14
L91:
.dbline 501
mov R24,R14
cpi R24,16
brlo L88
.dbline 506
; { //每读写一次,列会自动加1
; Lcd_CURSOR(i,j+row); //改变列位置,列在变,光标也在不停的换列,重新进行定位
; Lcd_Write_Data(hz[j]); //检测写进f0h???4点亮4点暗
; }
; i++;
inc R20
.dbline 507
; for(j=0;j<16;j++)
clr R14
rjmp L95
L92:
.dbline 508
.dbline 509
mov R18,R14
add R18,R10
mov R16,R20
rcall _Lcd_CURSOR
.dbline 510
mov R24,R14
clr R25
add R24,R22
adc R25,R23
adiw R24,16
mov R30,R24
mov R31,R25
lpm
mov R16,R0
rcall _Lcd_Write_Data
.dbline 511
L93:
.dbline 507
inc R14
L95:
.dbline 507
mov R24,R14
cpi R24,16
brlo L92
.dbline 512
L85:
.dbline 495
inc R20
L87:
.dbline 495
cp R20,R12
brsh X2
rjmp L84
X2:
.dbline -2
L83:
rcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 14 c
.dbsym r hz 22 pkc
.dbsym r row 10 c
.dbsym r x2 12 c
.dbsym r x1 14 c
.dbend
.dbfunc e dis_168hz _dis_168hz fV
; b -> R20
; a -> R22
; j -> R10
; hz -> R12,R13
; row -> R14
; x1 -> R20
.even
_dis_168hz::
rcall push_gset5
mov R14,R18
mov R20,R16
ldd R12,y+10
ldd R13,y+11
.dbline -1
.dbline 546
; { //每读写一次,列会自动加1
; Lcd_CURSOR(i,j+row); //列在变,光标也在不停的换列,重新进行定位
; Lcd_Write_Data(hz[j+16]); //检测写进f0h???4点亮4点暗
; }
; }
; }
; /*------------------------------------------------------------------------------
; void Dis16x16(uchar add_page, uchar add_col,const uchar *pHZ,uchar state)
; {
; uchar i;
; Lcd_CURSOR(add_page, add_col);
; for(i=0;i<16;i++)
; { //一个汉字2行,16列,32个字节
; if(state) //state(选亮,黑)
; {
; Lcd_Write_Data(pHZ[i]); //光标定位后沿着行开始写16列的字模数据??????
; }
; // else
; // {
; Lcd_Write_Data(~pHZ[i]); //如果列变,光标也会不停的换列,这里光标只换页不换列
; // } //那还是一列一列的写吗????(写一次会自动加1列)
; // } //而清时在不停的换列
; Lcd_CURSOR(add_page-1, add_col); //加或减都行,只是取模方向不同
; for(;i<32;i++)
; {
; if(state)
; {
; Lcd_Write_Data(pHZ[i]);
; }
; // else
; // {
; // Lcd_Write_Data(~pHZ[i]);
; }
; }
; }
; */
; //-----------------------------16*8点阵显示-------------------------------------
; void dis_168hz(uchar x1,uchar row,const uchar hz[]) //16*16
; {
.dbline 548
; uchar a,b,j;
; a=x1;
mov R22,R20
.dbline 549
; b=x1+1;
subi R20,255 ; addi 1
.dbline 550
; Lcd_Write_command(a); //+号为合成为一个字节(其实就是或)B0+0x
mov R16,R22
rcall _Lcd_Write_command
.dbline 551
; Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
ldi R16,16
rcall _Lcd_Write_command
.dbline 552
; Lcd_Write_command(0x01);
ldi R16,1
rcall _Lcd_Write_command
.dbline 553
; Lcd_CURSOR(a,0);
clr R18
mov R16,R22
rcall _Lcd_CURSOR
.dbline 554
; for(j=0;j<8;j++)
clr R10
rjmp L100
L97:
.dbline 555
.dbline 556
mov R18,R10
add R18,R14
mov R16,R22
rcall _Lcd_CURSOR
.dbline 557
mov R2,R10
clr R3
add R2,R12
adc R3,R13
mov R30,R2
mov R31,R3
lpm
mov R16,R0
rcall _Lcd_Write_Data
.dbline 558
L98:
.dbline 554
inc R10
L100:
.dbline 554
mov R24,R10
cpi R24,8
brlo L97
.dbline 559
; { //每读写一次,列会自动加1
; Lcd_CURSOR(a,j+row); //改变列位置,列在变,光标也在不停的换列,重新进行定位
; Lcd_Write_Data(hz[j]); //检测写进f0h???4点亮4点暗
; }
; Lcd_Write_command(b); //+号为合成为一个字节(其实就是或)B0+0x
mov R16,R20
rcall _Lcd_Write_command
.dbline 560
; Lcd_Write_command(0x10); //Set column address MSB(10+xx)即Y7 Y6 Y5 Y4
ldi R16,16
rcall _Lcd_Write_command
.dbline 561
; Lcd_Write_command(0x01);
ldi R16,1
rcall _Lcd_Write_command
.dbline 562
; Lcd_CURSOR(b,0);
clr R18
mov R16,R20
rcall _Lcd_CURSOR
.dbline 563
; for(j=0;j<8;j++)
clr R10
rjmp L104
L101:
.dbline 564
.dbline 565
mov R18,R10
add R18,R14
mov R16,R20
rcall _Lcd_CURSOR
.dbline 566
mov R24,R10
clr R25
add R24,R12
adc R25,R13
adiw R24,8
mov R30,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -