📄 lcd12864.lst
字号:
0E13 2F60 MOV R22,R16
0E14 5C60 SUBI R22,0xC0
0E15 4F7F SBCI R23,0xFF
(0205) if(y_add<4)
0E16 3044 CPI R20,4
0E17 F408 BCC 0x0E19
(0206) {
(0207) CSC2_1;
0E18 9AA9 SBI 0x15,1
(0208) }
(0209) if(!(y_add<4))
0E19 3044 CPI R20,4
0E1A F008 BCS 0x0E1C
(0210) {
(0211) CSC1_1;
0E1B 9AA8 SBI 0x15,0
(0212) }
(0213)
(0214) lcd_write_code(row);
0E1C 2D0A MOV R16,R10
0E1D DFC6 RCALL _lcd_write_code
(0215) lcd_write_code(column);
0E1E 2F06 MOV R16,R22
0E1F DFC4 RCALL _lcd_write_code
(0216) for(i=0;i<32;i++)
0E20 2744 CLR R20
0E21 C00F RJMP 0x0E31
(0217) {
(0218) if(i==16)
0E22 3140 CPI R20,0x10
0E23 F429 BNE 0x0E29
(0219) {
(0220) lcd_write_code(row+1);
0E24 2D0A MOV R16,R10
0E25 5F0F SUBI R16,0xFF
0E26 DFBD RCALL _lcd_write_code
(0221) lcd_write_code(column);
0E27 2F06 MOV R16,R22
0E28 DFBB RCALL _lcd_write_code
(0222) }
(0223) lcd_write_data(*po_to_flash++);
0E29 0116 MOVW R2,R12
0E2A 01C1 MOVW R24,R2
0E2B 9601 ADIW R24,1
0E2C 016C MOVW R12,R24
0E2D 01F1 MOVW R30,R2
0E2E 9104 LPM R16,0(Z)
0E2F DF9E RCALL _lcd_write_data
0E30 9543 INC R20
0E31 3240 CPI R20,0x20
0E32 F378 BCS 0x0E22
(0224) }
(0225) CSC1_0;//使列扫描无效
0E33 98A8 CBI 0x15,0
(0226) CSC2_0;
0E34 98A9 CBI 0x15,1
(0227) WDR();
0E35 95A8 WDR
0E36 940E1350 CALL pop_gset4
0E38 9508 RET
_dis_one_abc:
column --> R22
row --> R10
i --> R20
po_to_flash --> R12
y_add --> R20
x_add --> R22
0E39 940E1358 CALL push_gset4
0E3B 2F42 MOV R20,R18
0E3C 2F60 MOV R22,R16
0E3D 84C8 LDD R12,Y+8
0E3E 84D9 LDD R13,Y+9
(0228) }
(0229)
(0230) //**************************************************************
(0231) //写一个字母
(0232)
(0233) void dis_one_abc(uchar x_add,uchar y_add,const uchar *po_to_flash)
(0234) {
(0235)
(0236) uchar i,row,column;
(0237) row=x_add*2+0xb8;
0E3F E082 LDI R24,2
0E40 9F86 MUL R24,R22
0E41 2D80 MOV R24,R0
0E42 5488 SUBI R24,0x48
0E43 2EA8 MOV R10,R24
(0238) column=(y_add<8?y_add:y_add-8)*8+0x40;
0E44 3048 CPI R20,0x8
0E45 F418 BCC 0x0E49
0E46 2F64 MOV R22,R20
0E47 2777 CLR R23
0E48 C004 RJMP 0x0E4D
0E49 2F64 MOV R22,R20
0E4A 2777 CLR R23
0E4B 5068 SUBI R22,0x8
0E4C 4070 SBCI R23,0
0E4D E008 LDI R16,0x8
0E4E E010 LDI R17,0
0E4F 019B MOVW R18,R22
0E50 940E133A CALL empy16s
0E52 2F60 MOV R22,R16
0E53 5C60 SUBI R22,0xC0
0E54 4F7F SBCI R23,0xFF
(0239) if(y_add<8)
0E55 3048 CPI R20,0x8
0E56 F408 BCC 0x0E58
(0240) {
(0241) CSC2_1;
0E57 9AA9 SBI 0x15,1
(0242) }
(0243) if(!(y_add<8))
0E58 3048 CPI R20,0x8
0E59 F008 BCS 0x0E5B
(0244) {
(0245) CSC1_1;
0E5A 9AA8 SBI 0x15,0
(0246) }
(0247) lcd_write_code(row);
0E5B 2D0A MOV R16,R10
0E5C DF87 RCALL _lcd_write_code
(0248) lcd_write_code(column);
0E5D 2F06 MOV R16,R22
0E5E DF85 RCALL _lcd_write_code
(0249) for(i=0;i<16;i++)
0E5F 2744 CLR R20
0E60 C00F RJMP 0x0E70
(0250) {
(0251) if(i==8)
0E61 3048 CPI R20,0x8
0E62 F429 BNE 0x0E68
(0252) {
(0253) lcd_write_code(row+1);
0E63 2D0A MOV R16,R10
0E64 5F0F SUBI R16,0xFF
0E65 DF7E RCALL _lcd_write_code
(0254) lcd_write_code(column);
0E66 2F06 MOV R16,R22
0E67 DF7C RCALL _lcd_write_code
(0255) }
(0256) lcd_write_data(*po_to_flash++);
0E68 0116 MOVW R2,R12
0E69 01C1 MOVW R24,R2
0E6A 9601 ADIW R24,1
0E6B 016C MOVW R12,R24
0E6C 01F1 MOVW R30,R2
0E6D 9104 LPM R16,0(Z)
0E6E DF5F RCALL _lcd_write_data
0E6F 9543 INC R20
0E70 3140 CPI R20,0x10
0E71 F378 BCS 0x0E61
(0257) }
(0258) CSC1_0;
0E72 98A8 CBI 0x15,0
(0259) CSC2_0;
0E73 98A9 CBI 0x15,1
(0260) WDR();
0E74 95A8 WDR
0E75 940E1350 CALL pop_gset4
0E77 9508 RET
_dis_one_ban_zi:
e --> R20
w --> R22
j --> R10
i --> R12
po_to_flash --> R14
k_add --> Y+10
y_add --> R12
x_add --> R22
0E78 940E1356 CALL push_gset5
0E7A 2EC2 MOV R12,R18
0E7B 2F60 MOV R22,R16
0E7C 84EC LDD R14,Y+12
0E7D 84FD LDD R15,Y+13
(0261) }
(0262)
(0263) //写数字K=0,显示前半个字 ******************************************
(0264) void dis_one_ban_zi(uchar x_add,uchar y_add,uchar k_add,const uchar *po_to_flash)
(0265) {
(0266)
(0267) uchar i,j,w,e;
(0268) if(k_add==0){e=0;}
0E7E 840A LDD R0,Y+10
0E7F 2000 TST R0
0E80 F409 BNE 0x0E82
0E81 2744 CLR R20
(0269) if(k_add==1){e=8;}
0E82 858A LDD R24,Y+10
0E83 3081 CPI R24,1
0E84 F409 BNE 0x0E86
0E85 E048 LDI R20,0x8
(0270) j=x_add*2+0xb8;
0E86 E082 LDI R24,2
0E87 9F86 MUL R24,R22
0E88 2D80 MOV R24,R0
0E89 5488 SUBI R24,0x48
0E8A 2EA8 MOV R10,R24
(0271) w=(y_add<4?y_add:y_add-4)*16+0x40; //左右半屏判断
0E8B 2D8C MOV R24,R12
0E8C 3084 CPI R24,4
0E8D F418 BCC 0x0E91
0E8E 2F68 MOV R22,R24
0E8F 2777 CLR R23
0E90 C004 RJMP 0x0E95
0E91 2D6C MOV R22,R12
0E92 2777 CLR R23
0E93 5064 SUBI R22,4
0E94 4070 SBCI R23,0
0E95 E100 LDI R16,0x10
0E96 E010 LDI R17,0
0E97 019B MOVW R18,R22
0E98 940E133A CALL empy16s
0E9A 2F60 MOV R22,R16
0E9B 5C60 SUBI R22,0xC0
0E9C 4F7F SBCI R23,0xFF
(0272) if(y_add<4)
0E9D 2D8C MOV R24,R12
0E9E 3084 CPI R24,4
0E9F F408 BCC 0x0EA1
(0273) {
(0274) CSC2_1;
0EA0 9AA9 SBI 0x15,1
(0275) }
(0276) if(!(y_add<4))
0EA1 2D8C MOV R24,R12
0EA2 3084 CPI R24,4
0EA3 F008 BCS 0x0EA5
(0277) {
(0278) CSC1_1;
0EA4 9AA8 SBI 0x15,0
(0279) }
(0280) lcd_write_code(j);
0EA5 2D0A MOV R16,R10
0EA6 DF3D RCALL _lcd_write_code
(0281) lcd_write_code(w+e);
0EA7 2F06 MOV R16,R22
0EA8 0F04 ADD R16,R20
0EA9 DF3A RCALL _lcd_write_code
(0282) for(i=0;i<16;i++)//循环显示内容
0EAA 24CC CLR R12
0EAB C011 RJMP 0x0EBD
(0283) {
(0284) if(i==8)
0EAC 2D8C MOV R24,R12
0EAD 3088 CPI R24,0x8
0EAE F431 BNE 0x0EB5
(0285) {
(0286) lcd_write_code(j+1);
0EAF 2D0A MOV R16,R10
0EB0 5F0F SUBI R16,0xFF
0EB1 DF32 RCALL _lcd_write_code
(0287) lcd_write_code(w+e);
0EB2 2F06 MOV R16,R22
0EB3 0F04 ADD R16,R20
0EB4 DF2F RCALL _lcd_write_code
(0288) }
(0289) lcd_write_data(*po_to_flash++);
0EB5 0117 MOVW R2,R14
0EB6 01C1 MOVW R24,R2
0EB7 9601 ADIW R24,1
0EB8 017C MOVW R14,R24
0EB9 01F1 MOVW R30,R2
0EBA 9104 LPM R16,0(Z)
0EBB DF12 RCALL _lcd_write_data
0EBC 94C3 INC R12
0EBD 2D8C MOV R24,R12
0EBE 3180 CPI R24,0x10
0EBF F360 BCS 0x0EAC
(0290) }
(0291) CSC1_0;
0EC0 98A8 CBI 0x15,0
(0292) CSC2_0;
0EC1 98A9 CBI 0x15,1
(0293) WDR();
0EC2 95A8 WDR
0EC3 940E1353 CALL pop_gset5
0EC5 9508 RET
_CLRLCD:
n --> R20
m --> R22
0EC6 940E135C CALL push_gset2
0EC8 9722 SBIW R28,2
(0294) }
(0295) //*****************************************************************
(0296)
(0297) void CLRLCD(void) //清屏
(0298) {
(0299) uchar n,m;
(0300) for(n=0;n<4;n++)
0EC9 2744 CLR R20
0ECA C013 RJMP 0x0EDE
(0301) {
(0302) for(m=0;m<8;m++)
0ECB 2766 CLR R22
0ECC C00E RJMP 0x0EDB
(0303) {
(0304) p_to_flash=X26;
0ECD E584 LDI R24,0x54
0ECE E090 LDI R25,0
0ECF 93900068 STS p_to_flash+1,R25
0ED1 93800067 STS p_to_flash,R24
(0305) dis_one_zi(n,m,p_to_flash);
0ED3 011C MOVW R2,R24
0ED4 8239 STD Y+1,R3
0ED5 8228 STD Y+0,R2
0ED6 2F26 MOV R18,R22
0ED7 2F04 MOV R16,R20
0ED8 DF21 RCALL _dis_one_zi
(0306) WDR();
0ED9 95A8 WDR
0EDA 9563 INC R22
0EDB 3068 CPI R22,0x8
0EDC F380 BCS 0x0ECD
0EDD 9543 INC R20
0EDE 3044 CPI R20,4
0EDF F358 BCS 0x0ECB
0EE0 9622 ADIW R28,2
0EE1 940E134A CALL pop_gset2
0EE3 9508 RET
(0307) }
(0308) }
(0309) }
(0310) //***********************************************************************
(0311) void lcd_init(void) //显示屏初始化 ,写入初始化命令字
(0312) {
(0313) delay_ms(100);
_lcd_init:
0EE4 E604 LDI R16,0x64
0EE5 E010 LDI R17,0
0EE6 DEB8 RCALL _delay_ms
(0314)
(0315) lcd_write_code(0x3f);
0EE7 E30F LDI R16,0x3F
0EE8 DEFB RCALL _lcd_write_code
(0316)
(0317) lcd_write_code(0xc0);
0EE9 EC00 LDI R16,0xC0
0EEA DEF9 RCALL _lcd_write_code
(0318)
(0319) lcd_write_code(0xb8);
0EEB EB08 LDI R16,0xB8
0EEC DEF7 RCALL _lcd_write_code
(0320)
(0321) lcd_write_code(0x40);
0EED E400 LDI R16,0x40
0EEE DEF5 RCALL _lcd_write_code
(0322)
(0323) CLRLCD();//清屏
0EEF DFD6 RCALL _CLRLCD
0EF0 9508 RET
_display_graphic:
count --> R12
column --> R20
row --> R22
i --> R12
po_to_flash --> R10
0EF1 940E1358 CALL push_gset4
0EF3 0158 MOVW R10,R16
(0324) }
(0325) //**********************************************************************
(0326) //显示图形
(0327) void display_graphic(const uchar *po_to_flash)
(0328) {
(0329) uchar i,row=0xb8,column=0x40,count=0;
0EF4 EB68 LDI R22,0xB8
0EF5 E440 LDI R20,0x40
0EF6 24CC CLR R12
(0330)
(0331) for(;row<0xc0;row++)
0EF7 C028 RJMP 0x0F20
(0332) {
(0333) WDR();
0EF8 95A8 WDR
(0334) CSC2_1;CSC1_0;
0EF9 9AA9 SBI 0x15,1
0EFA 98A8 CBI 0x15,0
(0335) lcd_write_code(row);
0EFB 2F06 MOV R16,R22
0EFC DEE7 RCALL _lcd_write_code
(0336) lcd_write_code(column);
0EFD 2F04 MOV R16,R20
0EFE DEE5 RCALL _lcd_write_code
(0337) for(i=0;i<64;i++)
0EFF 24CC CLR R12
0F00 C008 RJMP 0x0F09
(0338) {
(0339) lcd_write_data(*po_to_flash++);
0F01 0115 MOVW R2,R10
0F02 01C1 MOVW R24,R2
0F03 9601 ADIW R24,1
0F04 015C MOVW R10,R24
0F05 01F1 MOVW R30,R2
0F06 9104 LPM R16,0(Z)
0F07 DEC6 RCALL _lcd_write_data
0F08 94C3 INC R12
0F09 2D8C MOV R24,R12
0F0A 3480 CPI R24,0x40
0F0B F3A8 BCS 0x0F01
(0340) }
(0341) CSC2_0;CSC1_1;//显示右半页
0F0C 98A9 CBI 0x15,1
0F0D 9AA8 SBI 0x15,0
(0342) lcd_write_code(row);
0F0E 2F06 MOV R16,R22
0F0F DED4 RCALL _lcd_write_code
(0343) lcd_write_code(column);
0F10 2F04 MOV R16,R20
0F11 DED2 RCALL _lcd_write_code
(0344) for(i=0;i<64;i++)
0F12 24CC CLR R12
0F13 C008 RJMP 0x0F1C
(0345) {
(0346) lcd_write_data(*po_to_flash++);
0F14 0115 MOVW R2,R10
0F15 01C1 MOVW R24,R2
0F16 9601 ADIW R24,1
0F17 015C MOVW R10,R24
0F18 01F1 MOVW R30,R2
0F19 9104 LPM R16,0(Z)
0F1A DEB3 RCALL _lcd_write_data
0F1B 94C3 INC R12
0F1C 2D8C MOV R24,R12
0F1D 3480 CPI R24,0x40
0F1E F3A8 BCS 0x0F14
0F1F 9563 INC R22
0F20 3C60 CPI R22,0xC0
0F21 F408 BCC 0x0F23
0F22 CFD5 RJMP 0x0EF8
(0347) }
(0348)
(0349) }
(0350) WDR();
0F23 95A8 WDR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -