📄 12864r.lst
字号:
0107 2722 CLR R18
0108 2700 CLR R16
0109 D00F RCALL _W_1byte
(0093) Delay(2);
010A E002 LDI R16,2
010B E010 LDI R17,0
010C D071 RCALL _Delay
(0094) cmd=0x80; //设置DDRAM地址
010D E840 LDI R20,0x80
(0095) W_1byte(0,0,cmd); //写指令
010E 8348 STD Y+0,R20
010F 2722 CLR R18
0110 2700 CLR R16
0111 D007 RCALL _W_1byte
(0096) Delay(2); //延时
0112 E002 LDI R16,2
0113 E010 LDI R17,0
0114 D069 RCALL _Delay
0115 9621 ADIW R28,1
0116 940E01A2 CALL pop_gset1
0118 9508 RET
_W_1byte:
H_data --> R22
S_ID --> R10
L_data --> R20
W_data --> Y+6
RS --> R20
RW --> R22
0119 940E019B CALL push_gset3
011B 2F42 MOV R20,R18
011C 2F60 MOV R22,R16
(0097) }
(0098) /*******************************************************************
(0099) 函 数 名:W_1byte
(0100) 入口参数:RW、RS、W_data
(0101) 函数作用:写一个字节的数据到12864液晶,包括指令和数据
(0102) 说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
(0103) (一般RW都设为0,即只向液晶写数据,不读数据)
(0104) RS=1,写入的是数据;RS=0,写入的是指令;
(0105) 一般模式:RW=0,RS=1;写数据
(0106) RW=0,RS=0;写指令
(0107) ********************************************************************/
(0108) void W_1byte(uchar RW, uchar RS, uchar W_data)
(0109) {
(0110) uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
011D EF88 LDI R24,0xF8
011E E090 LDI R25,0
011F 015C MOVW R10,R24
(0111) if(RW == 0)
0120 2366 TST R22
0121 F419 BNE 0x0125
(0112) {
(0113) S_ID &=~ 0x04;
0122 7F8B ANDI R24,0xFB
0123 015C MOVW R10,R24
(0114) }
0124 C003 RJMP 0x0128
(0115) else //if(RW==1)
(0116) {
(0117) S_ID |= 0X04;
0125 01C5 MOVW R24,R10
0126 6084 ORI R24,4
0127 015C MOVW R10,R24
(0118) }
(0119) if(RS == 0)
0128 2344 TST R20
0129 F421 BNE 0x012E
(0120) {
(0121) S_ID &=~ 0x02;
012A 01C5 MOVW R24,R10
012B 7F8D ANDI R24,0xFD
012C 015C MOVW R10,R24
(0122) }
012D C003 RJMP 0x0131
(0123) else //if(RS==1)
(0124) {
(0125) S_ID |= 0X02;
012E 01C5 MOVW R24,R10
012F 6082 ORI R24,2
0130 015C MOVW R10,R24
(0126) }
(0127) H_data = W_data;
0131 816E LDD R22,Y+6
0132 2777 CLR R23
(0128) H_data &= 0xf0; //屏蔽低4位的数据
0133 7F60 ANDI R22,0xF0
0134 7070 ANDI R23,0
(0129) L_data = W_data; //xxxx0000格式
0135 814E LDD R20,Y+6
0136 2755 CLR R21
(0130) L_data &= 0x0f; //屏蔽高4位的数据
0137 704F ANDI R20,0xF
0138 7050 ANDI R21,0
(0131) L_data <<= 4; //xxxx0000格式
0139 0F44 LSL R20
013A 1F55 ROL R21
013B 0F44 LSL R20
013C 1F55 ROL R21
013D 0F44 LSL R20
013E 1F55 ROL R21
013F 0F44 LSL R20
0140 1F55 ROL R21
(0132) Set_CS();
0141 9AB8 SBI 0x17,0
0142 9AC0 SBI 0x18,0
(0133) Write_8bits(S_ID); //发送S_ID
0143 0185 MOVW R16,R10
0144 D009 RCALL _Write_8bits
(0134) Write_8bits(H_data); //发送H_data
0145 018B MOVW R16,R22
0146 D007 RCALL _Write_8bits
(0135) Write_8bits(L_data); //发送L_data
0147 018A MOVW R16,R20
0148 D005 RCALL _Write_8bits
(0136) Clr_CS();
0149 9AB8 SBI 0x17,0
014A 98C0 CBI 0x18,0
014B 940E0194 CALL pop_gset3
014D 9508 RET
_Write_8bits:
Temp_data --> R20
i --> R22
W_bits --> R10
014E 940E019B CALL push_gset3
0150 0158 MOVW R10,R16
(0137) }
(0138) /********************************************************************
(0139) 函 数 名:Write_8bits
(0140) 入口参数:W_bits
(0141) 函数作用:负责串行输出8个bit位
(0142) ********************************************************************/
(0143) void Write_8bits(uint W_bits)
(0144) {
(0145) uint i,Temp_data;
(0146) for(i=0; i<8; i++)
0151 2766 CLR R22
0152 2777 CLR R23
0153 C023 RJMP 0x0177
(0147) {
(0148) Temp_data = W_bits;
0154 01A5 MOVW R20,R10
(0149) Temp_data <<= i;
0155 019B MOVW R18,R22
0156 018A MOVW R16,R20
0157 940E01B6 CALL lsl16
0159 01A8 MOVW R20,R16
(0150) if((Temp_data&0x80)==0) //bit7 is zero
015A FD07 SBRC R16,7
015B C00D RJMP 0x0169
(0151) {
(0152) Clr_SID();
015C 9AB9 SBI 0x17,1
015D 98C1 CBI 0x18,1
(0153) nop();
015E 0000 NOP
(0154) Set_SCLK();
015F 9ABA SBI 0x17,2
0160 9AC2 SBI 0x18,2
(0155) nop();
0161 0000 NOP
(0156) nop();
0162 0000 NOP
(0157) Clr_SCLK();
0163 9ABA SBI 0x17,2
0164 98C2 CBI 0x18,2
(0158) nop();
0165 0000 NOP
(0159) Clr_SID();
0166 9AB9 SBI 0x17,1
0167 98C1 CBI 0x18,1
(0160) }
0168 C00C RJMP 0x0175
(0161) else //bit7 is one
(0162) {
(0163) Set_SID();
0169 9AB9 SBI 0x17,1
016A 9AC1 SBI 0x18,1
(0164) nop();
016B 0000 NOP
(0165) Set_SCLK();
016C 9ABA SBI 0x17,2
016D 9AC2 SBI 0x18,2
(0166) nop();
016E 0000 NOP
(0167) nop();
016F 0000 NOP
(0168) Clr_SCLK();
0170 9ABA SBI 0x17,2
0171 98C2 CBI 0x18,2
(0169) nop();
0172 0000 NOP
(0170) Clr_SID();
0173 9AB9 SBI 0x17,1
0174 98C1 CBI 0x18,1
0175 5F6F SUBI R22,0xFF
0176 4F7F SBCI R23,0xFF
0177 3068 CPI R22,0x8
0178 E0E0 LDI R30,0
0179 077E CPC R23,R30
017A F2C8 BCS 0x0154
017B 940E0194 CALL pop_gset3
017D 9508 RET
_Delay:
i --> R20
ms --> R16
017E 940E019F CALL push_gset1
(0171) }
(0172) }
(0173) }
(0174) /********************************************************************
(0175) 函 数 名:Delay
(0176) 入口参数:ms
(0177) 函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
(0178) ********************************************************************/
(0179) void Delay(uint ms)
(0180) {
0180 C009 RJMP 0x018A
(0181) uint i;
(0182) while(ms--)
(0183) {
(0184) for(i=1;i<(uint)(xtal*143-2);i++)
FILE: <library>
0181 E041 LDI R20,1
0182 E050 LDI R21,0
0183 C002 RJMP 0x0186
0184 5F4F SUBI R20,0xFF
0185 4F5F SBCI R21,0xFF
0186 3746 CPI R20,0x76
0187 E0E4 LDI R30,4
0188 075E CPC R21,R30
0189 F3D0 BCS 0x0184
018A 0118 MOVW R2,R16
018B 5001 SUBI R16,1
018C 4010 SBCI R17,0
018D 2022 TST R2
018E F791 BNE 0x0181
018F 2033 TST R3
0190 F781 BNE 0x0181
0191 940E01A2 CALL pop_gset1
0193 9508 RET
pop_gset3:
0194 E0E4 LDI R30,4
0195 940C01A3 JMP pop
push_gset5:
0197 92FA ST R15,-Y
0198 92EA ST R14,-Y
push_gset4:
0199 92DA ST R13,-Y
019A 92CA ST R12,-Y
push_gset3:
019B 92BA ST R11,-Y
019C 92AA ST R10,-Y
push_gset2:
019D 937A ST R23,-Y
019E 936A ST R22,-Y
push_gset1:
019F 935A ST R21,-Y
01A0 934A ST R20,-Y
01A1 9508 RET
pop_gset1:
01A2 E0E1 LDI R30,1
pop:
01A3 9149 LD R20,Y+
01A4 9159 LD R21,Y+
01A5 FDE0 SBRC R30,0
01A6 9508 RET
01A7 9169 LD R22,Y+
01A8 9179 LD R23,Y+
01A9 FDE1 SBRC R30,1
01AA 9508 RET
01AB 90A9 LD R10,Y+
01AC 90B9 LD R11,Y+
01AD FDE2 SBRC R30,2
01AE 9508 RET
01AF 90C9 LD R12,Y+
01B0 90D9 LD R13,Y+
01B1 FDE3 SBRC R30,3
01B2 9508 RET
01B3 90E9 LD R14,Y+
01B4 90F9 LD R15,Y+
01B5 9508 RET
lsl16:
01B6 2322 TST R18
01B7 F021 BEQ 0x01BC
01B8 0F00 LSL R16
01B9 1F11 ROL R17
01BA 952A DEC R18
01BB CFFA RJMP lsl16
01BC 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -