📄 lcd12864_3wires.lst
字号:
(0309) }
05CC C003 RJMP 0x05D0
(0310) else //if(RS==1)
(0311) {
(0312) S_ID |= 0X02;
05CD 01C5 MOVW R24,R10
05CE 6082 ORI R24,2
05CF 015C MOVW R10,R24
(0313) }
(0314) H_data = W_data;
05D0 816E LDD R22,Y+6
05D1 2777 CLR R23
(0315) H_data &= 0xf0; //屏蔽低4位的数据
05D2 7F60 ANDI R22,0xF0
05D3 7070 ANDI R23,0
(0316) L_data = W_data; //xxxx0000格式
05D4 814E LDD R20,Y+6
05D5 2755 CLR R21
(0317) L_data &= 0x0f; //屏蔽高4位的数据
05D6 704F ANDI R20,0xF
05D7 7050 ANDI R21,0
(0318) L_data <<= 4; //xxxx0000格式
05D8 0F44 LSL R20
05D9 1F55 ROL R21
05DA 0F44 LSL R20
05DB 1F55 ROL R21
05DC 0F44 LSL R20
05DD 1F55 ROL R21
05DE 0F44 LSL R20
05DF 1F55 ROL R21
(0319) Set_CS();
05E0 9ABD SBI 0x17,5
05E1 9AC5 SBI 0x18,5
(0320) Write_8bits(S_ID); //发送S_ID
05E2 0185 MOVW R16,R10
05E3 D009 RCALL _Write_8bits
(0321) Write_8bits(H_data); //发送H_data
05E4 018B MOVW R16,R22
05E5 D007 RCALL _Write_8bits
(0322) Write_8bits(L_data); //发送L_data
05E6 018A MOVW R16,R20
05E7 D005 RCALL _Write_8bits
(0323) Clr_CS();
05E8 9ABD SBI 0x17,5
05E9 98C5 CBI 0x18,5
05EA 940E074A CALL pop_gset3
05EC 9508 RET
_Write_8bits:
Temp_data --> R20
i --> R22
W_bits --> R10
05ED 940E0754 CALL push_gset3
05EF 0158 MOVW R10,R16
(0324) }
(0325) /********************************************************************
(0326) 函 数 名:Write_8bits
(0327) 入口参数:W_bits
(0328) 出口参数:无
(0329) 建立日期:2007年3月3日
(0330) 修改日期:
(0331) 函数作用:负责串行输出8个bit位
(0332) 说 明:
(0333) ********************************************************************/
(0334) void Write_8bits(uint W_bits)
(0335) {
(0336) uint i,Temp_data;
(0337) for(i=0; i<8; i++)
05F0 2766 CLR R22
05F1 2777 CLR R23
05F2 C019 RJMP 0x060C
(0338) {
(0339) Temp_data = W_bits;
05F3 01A5 MOVW R20,R10
(0340) Temp_data <<= i;
05F4 019B MOVW R18,R22
05F5 018A MOVW R16,R20
05F6 940E076F CALL lsl16
05F8 01A8 MOVW R20,R16
(0341) if((Temp_data&0x80)==0)
05F9 FD07 SBRC R16,7
05FA C003 RJMP 0x05FE
(0342) {
(0343) Clr_SID();
05FB 9ABE SBI 0x17,6
05FC 98C6 CBI 0x18,6
(0344) }
05FD C002 RJMP 0x0600
(0345) else
(0346) {
(0347) Set_SID();
05FE 9ABE SBI 0x17,6
05FF 9AC6 SBI 0x18,6
(0348) }
(0349) nop();
0600 0000 NOP
(0350) Set_SCLK();
0601 9ABF SBI 0x17,7
0602 9AC7 SBI 0x18,7
(0351) nop();
0603 0000 NOP
(0352) nop();
0604 0000 NOP
(0353) Clr_SCLK();
0605 9ABF SBI 0x17,7
0606 98C7 CBI 0x18,7
(0354) nop();
0607 0000 NOP
(0355) Clr_SID();
0608 9ABE SBI 0x17,6
0609 98C6 CBI 0x18,6
060A 5F6F SUBI R22,0xFF
060B 4F7F SBCI R23,0xFF
060C 3068 CPI R22,0x8
060D E0E0 LDI R30,0
060E 077E CPC R23,R30
060F F318 BCS 0x05F3
0610 940E074A CALL pop_gset3
0612 9508 RET
_Delay:
i --> R20
ms --> R16
0613 940E0758 CALL push_gset1
(0356) }
(0357) }
(0358) /********************************************************************
(0359) 函 数 名:Delay
(0360) 入口参数:ms
(0361) 出口参数:无
(0362) 建立日期:2007年3月3日
(0363) 修改日期:
(0364) 函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
(0365) 说 明:
(0366) ********************************************************************/
(0367) void Delay(uint ms)
(0368) {
0615 C009 RJMP 0x061F
(0369) uint i;
(0370) while(ms--)
(0371) {
(0372) for(i=1;i<(uint)(xtal*143-2);i++)
0616 E041 LDI R20,1
0617 E050 LDI R21,0
0618 C002 RJMP 0x061B
0619 5F4F SUBI R20,0xFF
061A 4F5F SBCI R21,0xFF
061B 3746 CPI R20,0x76
061C E0E4 LDI R30,4
061D 075E CPC R21,R30
061E F3D0 BCS 0x0619
061F 0118 MOVW R2,R16
0620 5001 SUBI R16,1
0621 4010 SBCI R17,0
0622 2022 TST R2
0623 F791 BNE 0x0616
0624 2033 TST R3
0625 F781 BNE 0x0616
0626 940E075B CALL pop_gset1
0628 9508 RET
_Char_Set_XY:
p --> R20
y --> R10
x --> R22
0629 940E0754 CALL push_gset3
062B 2EA2 MOV R10,R18
062C 2F60 MOV R22,R16
062D 9721 SBIW R28,1
062E 814F LDD R20,Y+7
062F 8558 LDD R21,Y+8
(0373) ;
(0374) }
(0375) }
(0376) //===================================================================*/
(0377) /********************************************************************
(0378) 函 数 名:Char_Set_XY
(0379) 入口参数:x,y,*p
(0380) 出口参数:无
(0381) 建立日期:2007年8月26日
(0382) 修改日期:
(0383) 函数作用:
(0384) 说 明:
(0385) ********************************************************************/
(0386) void Char_Set_XY(uchar x, uchar y, uchar *p)
(0387) {
(0388) if(y == 0)
0630 20AA TST R10
0631 F431 BNE 0x0638
(0389) {
(0390) W_1byte(0,0,(0x80+x));
0632 2F86 MOV R24,R22
0633 5880 SUBI R24,0x80
0634 8388 STD Y+0,R24
0635 2722 CLR R18
0636 2700 CLR R16
0637 DF80 RCALL _W_1byte
(0391) }
(0392) if(y == 1)
0638 2D8A MOV R24,R10
0639 3081 CPI R24,1
063A F431 BNE 0x0641
(0393) {
(0394) W_1byte(0,0,(0x90+x));
063B 2F86 MOV R24,R22
063C 5780 SUBI R24,0x70
063D 8388 STD Y+0,R24
063E 2722 CLR R18
063F 2700 CLR R16
0640 DF77 RCALL _W_1byte
(0395) }
(0396) if(y == 2)
0641 2D8A MOV R24,R10
0642 3082 CPI R24,2
0643 F431 BNE 0x064A
(0397) {
(0398) W_1byte(0,0,(0x88+x));
0644 2F86 MOV R24,R22
0645 5788 SUBI R24,0x78
0646 8388 STD Y+0,R24
0647 2722 CLR R18
0648 2700 CLR R16
0649 DF6E RCALL _W_1byte
(0399) }
(0400) if(y == 3)
064A 2D8A MOV R24,R10
064B 3083 CPI R24,3
064C F471 BNE 0x065B
(0401) {
(0402) W_1byte(0,0,(0x98+x));
064D 2F86 MOV R24,R22
064E 5688 SUBI R24,0x68
064F 8388 STD Y+0,R24
0650 2722 CLR R18
0651 2700 CLR R16
0652 DF65 RCALL _W_1byte
(0403) }
0653 C007 RJMP 0x065B
(0404) while(*p != 0)
(0405) {
(0406) W_1byte(0,1,*p++);
0654 01FA MOVW R30,R20
0655 9021 LD R2,Z+
0656 01AF MOVW R20,R30
0657 8228 STD Y+0,R2
0658 E021 LDI R18,1
0659 2700 CLR R16
065A DF5D RCALL _W_1byte
065B 01FA MOVW R30,R20
065C 8020 LDD R2,Z+0
065D 2022 TST R2
065E F7A9 BNE 0x0654
065F 9621 ADIW R28,1
0660 940E074A CALL pop_gset3
0662 9508 RET
_Set_Draw:
0663 9721 SBIW R28,1
(0407) }
(0408) }
(0409) //===================================================================*/
(0410)
(0411) /********************************************************************
(0412) 函 数 名:Set_Draw(
(0413) 入口参数:无
(0414) 出口参数:无
(0415) 建立日期:2007年8月26日
(0416) 修改日期:
(0417) 函数作用:
(0418) 说 明:
(0419) ********************************************************************/
(0420) void Set_Draw(void)
(0421) {
(0422) //W_1byte(0,0,0x01); //清屏
(0423) Delay(20); //延时
0664 E104 LDI R16,0x14
0665 E010 LDI R17,0
0666 DFAC RCALL _Delay
(0424) //W_1byte(0,0,0x34); //8BIT控制界面,扩充指令集,,绘图显示OFF
(0425) W_1byte(0,0,0x36);
0667 E386 LDI R24,0x36
0668 8388 STD Y+0,R24
0669 2722 CLR R18
066A 2700 CLR R16
066B DF4C RCALL _W_1byte
(0426) Delay(20); //延时
066C E104 LDI R16,0x14
066D E010 LDI R17,0
066E DFA4 RCALL _Delay
066F 9621 ADIW R28,1
0670 9508 RET
_Draw_Pic:
temp_y --> R20
temp_x --> R22
i --> R10
j --> R12
Draw --> R14
y --> R10
x --> R20
0671 940E0750 CALL push_gset5
0673 2EA2 MOV R10,R18
0674 2F40 MOV R20,R16
0675 9721 SBIW R28,1
0676 84EB LDD R14,Y+11
0677 84FC LDD R15,Y+12
(0427) }
(0428) //===================================================================*/
(0429) /********************************************************************
(0430) 函 数 名:Draw_Pic 128*64
(0431) 入口参数:x,y,*Draw
(0432) 出口参数:无
(0433) 建立日期:2007年8月26日
(0434) 修改日期:
(0435) 函数作用:
(0436) 说 明:
(0437) ********************************************************************/
(0438) /*************************************************/
(0439)
(0440) void Draw_Pic(uchar x, uchar y, const uchar *Draw)
(0441) {
(0442) uchar i, j, temp_x, temp_y; //
(0443) temp_x = x; //
0678 2F64 MOV R22,R20
(0444) temp_y = y; //
0679 2D4A MOV R20,R10
(0445) temp_x |= 0x80; //
067A 6860 ORI R22,0x80
(0446) temp_y |= 0x80; //
067B 6840 ORI R20,0x80
(0447) for(i=0;i<32;i++ ) //上半屏32行
067C 24AA CLR R10
067D C01B RJMP 0x0699
(0448) {
(0449) W_1byte(0,0,temp_y++); //设置绘图区的Y地址坐标0
067E 2E24 MOV R2,R20
067F 5F4F SUBI R20,0xFF
0680 8228 STD Y+0,R2
0681 2722 CLR R18
0682 2700 CLR R16
0683 DF34 RCALL _W_1byte
(0450) W_1byte(0,0,temp_x); //设置绘图区的X地址坐标0
0684 8368 STD Y+0,R22
0685 2722 CLR R18
0686 2700 CLR R16
0687 DF30 RCALL _W_1byte
(0451) for(j=0;j<16;j++) //
0688 24CC CLR R12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -