📄 lcd12864_3wires.lst
字号:
04D4 E004 LDI R16,4
04D5 D1EC RCALL _Set_White
(0220) Delay(2000);
04D6 ED00 LDI R16,0xD0
04D7 E017 LDI R17,7
04D8 D13A RCALL _Delay
(0221) Delay(2000);
04D9 ED00 LDI R16,0xD0
04DA E017 LDI R17,7
04DB D137 RCALL _Delay
(0222) Set_White(4,1,4,1); //
04DC E081 LDI R24,1
04DD 838A STD Y+2,R24
04DE E084 LDI R24,4
04DF 8388 STD Y+0,R24
04E0 E021 LDI R18,1
04E1 E004 LDI R16,4
04E2 D1DF RCALL _Set_White
(0223) Set_White(5,2,5,1); //
04E3 E081 LDI R24,1
04E4 838A STD Y+2,R24
04E5 E085 LDI R24,5
04E6 8388 STD Y+0,R24
04E7 E022 LDI R18,2
04E8 E005 LDI R16,5
04E9 D1D8 RCALL _Set_White
(0224) Set_White(6,3,6,1); //
04EA E081 LDI R24,1
04EB 838A STD Y+2,R24
04EC E086 LDI R24,6
04ED 8388 STD Y+0,R24
04EE E023 LDI R18,3
04EF E006 LDI R16,6
04F0 D1D1 RCALL _Set_White
(0225) Set_White(4,4,4,1); //
04F1 E081 LDI R24,1
04F2 838A STD Y+2,R24
04F3 E084 LDI R24,4
04F4 8388 STD Y+0,R24
04F5 E024 LDI R18,4
04F6 E004 LDI R16,4
04F7 D1CA RCALL _Set_White
(0226) Delay(2000);
04F8 ED00 LDI R16,0xD0
04F9 E017 LDI R17,7
04FA D118 RCALL _Delay
(0227) Delay(2000);
04FB ED00 LDI R16,0xD0
04FC E017 LDI R17,7
04FD D115 RCALL _Delay
(0228) Set_White(1,1,1,1); //
04FE E081 LDI R24,1
04FF 838A STD Y+2,R24
0500 8388 STD Y+0,R24
0501 E021 LDI R18,1
0502 E001 LDI R16,1
0503 D1BE RCALL _Set_White
(0229) Set_White(3,2,3,1); //
0504 E081 LDI R24,1
0505 838A STD Y+2,R24
0506 E083 LDI R24,3
0507 8388 STD Y+0,R24
0508 E022 LDI R18,2
0509 E003 LDI R16,3
050A D1B7 RCALL _Set_White
(0230) Set_White(2,3,2,1); //
050B E081 LDI R24,1
050C 838A STD Y+2,R24
050D E082 LDI R24,2
050E 8388 STD Y+0,R24
050F E023 LDI R18,3
0510 E002 LDI R16,2
0511 D1B0 RCALL _Set_White
(0231) Set_White(5,4,5,1); //
0512 E081 LDI R24,1
0513 838A STD Y+2,R24
0514 E085 LDI R24,5
0515 8388 STD Y+0,R24
0516 E024 LDI R18,4
0517 E005 LDI R16,5
0518 D1A9 RCALL _Set_White
(0232) Delay(2000);
0519 ED00 LDI R16,0xD0
051A E017 LDI R17,7
051B D0F7 RCALL _Delay
(0233) Delay(2000);
051C ED00 LDI R16,0xD0
051D E017 LDI R17,7
051E D0F4 RCALL _Delay
(0234) Set_White(1,1,8,1); //第1行,第1个汉字位置到第8汉字位置取消反白
051F E081 LDI R24,1
0520 838A STD Y+2,R24
0521 E088 LDI R24,0x8
0522 8388 STD Y+0,R24
0523 E021 LDI R18,1
0524 E001 LDI R16,1
0525 D19C RCALL _Set_White
(0235) Set_White(1,2,8,1); //第2行,第1个汉字位置到第8汉字位置取消反白
0526 E081 LDI R24,1
0527 838A STD Y+2,R24
0528 E088 LDI R24,0x8
0529 8388 STD Y+0,R24
052A E022 LDI R18,2
052B E001 LDI R16,1
052C D195 RCALL _Set_White
(0236) Set_White(1,3,8,1); //第3行,第1个汉字位置到第8汉字位置取消反白
052D E081 LDI R24,1
052E 838A STD Y+2,R24
052F E088 LDI R24,0x8
0530 8388 STD Y+0,R24
0531 E023 LDI R18,3
0532 E001 LDI R16,1
0533 D18E RCALL _Set_White
(0237) Set_White(1,4,8,1); //第4行,第1个汉字位置到第8汉字位置取消反白
0534 E081 LDI R24,1
0535 838A STD Y+2,R24
0536 E088 LDI R24,0x8
0537 8388 STD Y+0,R24
0538 E024 LDI R18,4
0539 E001 LDI R16,1
053A D187 RCALL _Set_White
(0238)
(0239) Delay(2000);
053B ED00 LDI R16,0xD0
053C E017 LDI R17,7
053D D0D5 RCALL _Delay
(0240) Delay(2000);
053E ED00 LDI R16,0xD0
053F E017 LDI R17,7
0540 D0D2 RCALL _Delay
(0241) W_1byte(0,0,0x30); //基本指令集,,绘图显示OFF
0541 E380 LDI R24,0x30
0542 8388 STD Y+0,R24
0543 2722 CLR R18
0544 2700 CLR R16
0545 D072 RCALL _W_1byte
(0242) W_1byte(0,0,0x01); //清除显示
0546 E081 LDI R24,1
0547 8388 STD Y+0,R24
0548 2722 CLR R18
0549 2700 CLR R16
054A D06D RCALL _W_1byte
(0243) W_1byte(0,0,0x01); //清除显示
054B E081 LDI R24,1
054C 8388 STD Y+0,R24
054D 2722 CLR R18
054E 2700 CLR R16
054F D068 RCALL _W_1byte
(0244) W_1byte(0,0,0x01); //清除显示
0550 E081 LDI R24,1
0551 8388 STD Y+0,R24
0552 2722 CLR R18
0553 2700 CLR R16
0554 D063 RCALL _W_1byte
(0245) Set_Draw();
0555 D10D RCALL _Set_Draw
(0246) Delay(100);
0556 E604 LDI R16,0x64
0557 E010 LDI R17,0
0558 D0BA RCALL _Delay
(0247) Draw_Pic(0,0,*PIC1); //先替换液晶内部RAM中的数据,再开显示
0559 E88C LDI R24,0x8C
055A E090 LDI R25,0
055B 8399 STD Y+1,R25
055C 8388 STD Y+0,R24
055D 2722 CLR R18
055E 2700 CLR R16
055F D111 RCALL _Draw_Pic
(0248) W_1byte(0,0,0x36); //8BIT控制界面,扩充指令集,,绘图显示ON
0560 E386 LDI R24,0x36
0561 8388 STD Y+0,R24
0562 2722 CLR R18
0563 2700 CLR R16
0564 D053 RCALL _W_1byte
(0249) Delay(5000);
0565 E808 LDI R16,0x88
0566 E113 LDI R17,0x13
0567 D0AB RCALL _Delay
(0250) W_1byte(0,0,0x34); //绘图显示OFF,主要解决画图时拖尾的现象,即先
0568 E384 LDI R24,0x34
0569 8388 STD Y+0,R24
056A 2722 CLR R18
056B 2700 CLR R16
056C D04B RCALL _W_1byte
(0251) //替换好液晶内部RAM中的数据在开显示。
(0252) Draw_Pic(0,0,*PIC2);
056D E88C LDI R24,0x8C
056E E094 LDI R25,4
056F 8399 STD Y+1,R25
0570 8388 STD Y+0,R24
0571 2722 CLR R18
0572 2700 CLR R16
0573 D0FD RCALL _Draw_Pic
(0253) W_1byte(0,0,0x36); //8BIT控制界面,扩充指令集,绘图显示ON
0574 E386 LDI R24,0x36
0575 8388 STD Y+0,R24
0576 2722 CLR R18
0577 2700 CLR R16
0578 D03F RCALL _W_1byte
(0254) Delay(5000);
0579 E808 LDI R16,0x88
057A E113 LDI R17,0x13
057B D097 RCALL _Delay
(0255) //画完图后要显示文字要重新设置成普通模式
(0256) W_1byte(0,0,0x30); //基本指令集,,绘图显示OFF
057C E380 LDI R24,0x30
057D 8388 STD Y+0,R24
057E 2722 CLR R18
057F 2700 CLR R16
0580 D037 RCALL _W_1byte
(0257) W_1byte(0,0,0x01); //清除显示
0581 E081 LDI R24,1
0582 8388 STD Y+0,R24
0583 2722 CLR R18
0584 2700 CLR R16
0585 D032 RCALL _W_1byte
0586 CF08 RJMP 0x048F
0587 9623 ADIW R28,3
0588 9508 RET
_LCD_Init:
cmd --> R20
0589 940E0758 CALL push_gset1
058B 9721 SBIW R28,1
(0258)
(0259) //for(;;);
(0260) }
(0261) }
(0262) /******************************************************************/
(0263) void LCD_Init(void)
(0264) {
(0265) uchar cmd;
(0266) cmd=0x30; //功能设置 8位数据,基本指令
058C E340 LDI R20,0x30
(0267) W_1byte(0,0,cmd);
058D 8348 STD Y+0,R20
058E 2722 CLR R18
058F 2700 CLR R16
0590 D027 RCALL _W_1byte
(0268) Delay(2);
0591 E002 LDI R16,2
0592 E010 LDI R17,0
0593 D07F RCALL _Delay
(0269) cmd=0x0C; //显示状态 ON,游标OFF,反白OFF
0594 E04C LDI R20,0xC
(0270) W_1byte(0,0,cmd); //写指令
0595 8348 STD Y+0,R20
0596 2722 CLR R18
0597 2700 CLR R16
0598 D01F RCALL _W_1byte
(0271) Delay(2);
0599 E002 LDI R16,2
059A E010 LDI R17,0
059B D077 RCALL _Delay
(0272) cmd=0x01; //清除显示
059C E041 LDI R20,1
(0273) W_1byte(0,0,cmd); //写指令
059D 8348 STD Y+0,R20
059E 2722 CLR R18
059F 2700 CLR R16
05A0 D017 RCALL _W_1byte
(0274) Delay(2);
05A1 E002 LDI R16,2
05A2 E010 LDI R17,0
05A3 D06F RCALL _Delay
(0275) cmd=0x02; //地址归位
05A4 E042 LDI R20,2
(0276) W_1byte(0,0,cmd); //写指令
05A5 8348 STD Y+0,R20
05A6 2722 CLR R18
05A7 2700 CLR R16
05A8 D00F RCALL _W_1byte
(0277) Delay(2);
05A9 E002 LDI R16,2
05AA E010 LDI R17,0
05AB D067 RCALL _Delay
(0278) cmd=0x80; //设置DDRAM地址
05AC E840 LDI R20,0x80
(0279) W_1byte(0,0,cmd); //写指令
05AD 8348 STD Y+0,R20
05AE 2722 CLR R18
05AF 2700 CLR R16
05B0 D007 RCALL _W_1byte
(0280) Delay(2); //延时
05B1 E002 LDI R16,2
05B2 E010 LDI R17,0
05B3 D05F RCALL _Delay
05B4 9621 ADIW R28,1
05B5 940E075B CALL pop_gset1
05B7 9508 RET
_W_1byte:
H_data --> R22
S_ID --> R10
L_data --> R20
W_data --> Y+6
RS --> R20
RW --> R22
05B8 940E0754 CALL push_gset3
05BA 2F42 MOV R20,R18
05BB 2F60 MOV R22,R16
(0281) }
(0282) /*******************************************************************
(0283) 函 数 名:W_1byte
(0284) 入口参数:RW、RS、W_data
(0285) 出口参数:无
(0286) 建立日期:2007年3月3日
(0287) 修改日期:
(0288) 函数作用:写一个字节的数据到12864液晶,包括指令和数据
(0289) 说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
(0290) (一般RW都设为0,即只向液晶写数据,不读数据)
(0291) RS=1,写入的是数据;RS=0,写入的是指令;
(0292) 一般模式:RW=0,RS=1;写数据
(0293) RW=0,RS=0;写指令
(0294) ********************************************************************/
(0295) void W_1byte(uchar RW, uchar RS, uchar W_data)
(0296) {
(0297) uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
05BC EF88 LDI R24,0xF8
05BD E090 LDI R25,0
05BE 015C MOVW R10,R24
(0298) if(RW == 0)
05BF 2366 TST R22
05C0 F419 BNE 0x05C4
(0299) {
(0300) S_ID &=~ 0x04;
05C1 7F8B ANDI R24,0xFB
05C2 015C MOVW R10,R24
(0301) }
05C3 C003 RJMP 0x05C7
(0302) else //if(RW==1)
(0303) {
(0304) S_ID |= 0X04;
05C4 01C5 MOVW R24,R10
05C5 6084 ORI R24,4
05C6 015C MOVW R10,R24
(0305) }
(0306) if(RS == 0)
05C7 2344 TST R20
05C8 F421 BNE 0x05CD
(0307) {
(0308) S_ID &=~ 0x02;
05C9 01C5 MOVW R24,R10
05CA 7F8D ANDI R24,0xFD
05CB 015C MOVW R10,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -