📄 co0511.lst
字号:
(0272) PORTA&=0xfe;
02EE B38B IN R24,0x1B
02EF 7F8E ANDI R24,0xFE
02F0 BB8B OUT 0x1B,R24
(0273) }
02F1 9508 RET
(0274) void set_res(uchar i)
(0275) {
(0276) if(i)
_set_res:
i --> R16
02F2 2300 TST R16
02F3 F011 BEQ 0x02F6
(0277) PORTA|=0x02;
02F4 9AD9 SBI 0x1B,1
02F5 C003 RJMP 0x02F9
(0278) else
(0279) PORTA&=0xfd;
02F6 B38B IN R24,0x1B
02F7 7F8D ANDI R24,0xFD
02F8 BB8B OUT 0x1B,R24
(0280) }
02F9 9508 RET
(0281) void set_a0(uchar i)
(0282) {
(0283) if(i)
_set_a0:
i --> R16
02FA 2300 TST R16
02FB F011 BEQ 0x02FE
(0284) PORTA|=0x04;
02FC 9ADA SBI 0x1B,2
02FD C003 RJMP 0x0301
(0285) else
(0286) PORTA&=0xfb;
02FE B38B IN R24,0x1B
02FF 7F8B ANDI R24,0xFB
0300 BB8B OUT 0x1B,R24
(0287) }
0301 9508 RET
(0288) void set_sclk(uchar i)
(0289) {
(0290) if(i)
_set_sclk:
i --> R16
0302 2300 TST R16
0303 F011 BEQ 0x0306
(0291) PORTC|=0x40;
0304 9AAE SBI 0x15,6
0305 C003 RJMP 0x0309
(0292) else
(0293) PORTC&=0xbf;
0306 B385 IN R24,0x15
0307 7B8F ANDI R24,0xBF
0308 BB85 OUT 0x15,R24
(0294) }
0309 9508 RET
(0295) void set_si(uchar i)
(0296) {
(0297) if(i)
_set_si:
i --> R16
030A 2300 TST R16
030B F011 BEQ 0x030E
(0298) PORTC|=0x80;
030C 9AAF SBI 0x15,7
030D C003 RJMP 0x0311
(0299) else
(0300) PORTC&=0x7f;
030E B385 IN R24,0x15
030F 778F ANDI R24,0x7F
0310 BB85 OUT 0x15,R24
(0301) }
0311 9508 RET
(0302) void set_c86(uchar i)
(0303) {
(0304) if(i)
_set_c86:
i --> R16
0312 2300 TST R16
0313 F011 BEQ 0x0316
(0305) PORTA|=0x20;
0314 9ADD SBI 0x1B,5
0315 C003 RJMP 0x0319
(0306) else
(0307) PORTA&=0xcf;
0316 B38B IN R24,0x1B
0317 7C8F ANDI R24,0xCF
0318 BB8B OUT 0x1B,R24
(0308) }
0319 9508 RET
(0309) void set_ps(uchar i)
(0310) {
(0311) if(i)
_set_ps:
i --> R16
031A 2300 TST R16
031B F011 BEQ 0x031E
(0312) PORTA|=0x10;
031C 9ADC SBI 0x1B,4
031D C003 RJMP 0x0321
(0313) else
(0314) PORTA&=0xef;
031E B38B IN R24,0x1B
031F 7E8F ANDI R24,0xEF
0320 BB8B OUT 0x1B,R24
(0315) }
0321 9508 RET
_data_send:
temp --> R20
i --> R22
s --> R10
dat --> R20
0322 940E04B3 CALL push_gset3
0324 2F40 MOV R20,R16
(0316) void data_send(unsigned char dat)
(0317) {
(0318) unsigned char s,temp;
(0319) int i;
(0320) set_sclk(0);
0325 2700 CLR R16
0326 DFDB RCALL _set_sclk
(0321) s=dat;
0327 2EA4 MOV R10,R20
(0322) for(i=8;i>0;i--)
0328 E068 LDI R22,0x8
0329 E070 LDI R23,0
(0323) {set_sclk(0);
032A 2700 CLR R16
032B DFD6 RCALL _set_sclk
(0324) NOP();
032C 0000 NOP
(0325) NOP();
032D 0000 NOP
(0326) temp=s & 0x80;
032E 2D4A MOV R20,R10
032F 7840 ANDI R20,0x80
(0327) if(temp)
0330 F019 BEQ 0x0334
(0328) {set_si(1);}
0331 E001 LDI R16,1
0332 DFD7 RCALL _set_si
0333 C002 RJMP 0x0336
(0329) else {set_si(0);}
0334 2700 CLR R16
0335 DFD4 RCALL _set_si
(0330) set_sclk(1);
0336 E001 LDI R16,1
0337 DFCA RCALL _set_sclk
(0331) s=s<<1;
0338 0CAA LSL R10
0339 5061 SUBI R22,1
033A 4070 SBCI R23,0
033B 2422 CLR R2
033C 2433 CLR R3
033D 1626 CP R2,R22
033E 0637 CPC R3,R23
033F F354 BLT 0x032A
(0332) }
(0333) }
0340 940E0492 CALL pop_gset3
0342 9508 RET
_w_com:
com --> R20
0343 940E0498 CALL push_gset1
0345 2F40 MOV R20,R16
(0334) /*************************************************/
(0335) //写命令,串行模式
(0336) /*************************************************/
(0337) void w_com(unsigned char com)
(0338) {
(0339) set_a0(0);
0346 2700 CLR R16
0347 DFB2 RCALL _set_a0
(0340) set_cs(0);
0348 2700 CLR R16
0349 DFA0 RCALL _set_cs
(0341) data_send(com);
034A 2F04 MOV R16,R20
034B DFD6 RCALL _data_send
(0342) }
034C 940E049B CALL pop_gset1
034E 9508 RET
_w_data:
dat --> R20
034F 940E0498 CALL push_gset1
0351 2F40 MOV R20,R16
(0343) /*************************************************/
(0344) //写数据,串行模式
(0345) /*************************************************/
(0346) void w_data(unsigned char dat)
(0347) {
(0348) set_a0(1);
0352 E001 LDI R16,1
0353 DFA6 RCALL _set_a0
(0349) set_cs(0);
0354 2700 CLR R16
0355 DF94 RCALL _set_cs
(0350) data_send(dat);
0356 2F04 MOV R16,R20
0357 DFCA RCALL _data_send
(0351) }
0358 940E049B CALL pop_gset1
035A 9508 RET
_clrram:
page --> R20
i --> R22
j --> R10
035B 940E04B3 CALL push_gset3
(0352) /*************************************************/
(0353) //清DDRAM
(0354) /************************************************/
(0355) void clrram (void)
(0356) { uchar i,j,page;
(0357) page=0xb0;
035D EB40 LDI R20,0xB0
(0358) for(i=0;i<8;i++)
035E 2766 CLR R22
035F C010 RJMP 0x0370
(0359) {
(0360) w_com(page); /*设置页*/
0360 2F04 MOV R16,R20
0361 DFE1 RCALL _w_com
(0361) w_com(0x10); /*设置列号*/
0362 E100 LDI R16,0x10
0363 DFDF RCALL _w_com
(0362) w_com(0x00);
0364 2700 CLR R16
0365 DFDD RCALL _w_com
(0363) for(j=0;j<128;j++)
0366 24AA CLR R10
0367 C003 RJMP 0x036B
(0364) {
(0365) w_data(0x00);
0368 2700 CLR R16
0369 DFE5 RCALL _w_data
036A 94A3 INC R10
036B 2D8A MOV R24,R10
036C 3880 CPI R24,0x80
036D F3D0 BCS 0x0368
(0366) }
(0367) page++;
036E 9543 INC R20
036F 9563 INC R22
0370 3068 CPI R22,0x8
0371 F370 BCS 0x0360
(0368) }
(0369) }
0372 940E0492 CALL pop_gset3
0374 9508 RET
_init_lcd:
i --> R20
0375 940E0498 CALL push_gset1
(0370) /************************************************/
(0371) //液晶初始化
(0372) /************************************************/
(0373) void init_lcd (void)
(0374) {
(0375) uchar i=0;
0377 2744 CLR R20
(0376) set_res(0);
0378 2700 CLR R16
0379 DF78 RCALL _set_res
(0377) delay_nms(100);
037A E604 LDI R16,0x64
037B E010 LDI R17,0
037C DF46 RCALL _delay_nms
(0378) set_res(1);
037D E001 LDI R16,1
037E DF73 RCALL _set_res
(0379) delay_nms(100); /*复位液晶*/
037F E604 LDI R16,0x64
0380 E010 LDI R17,0
0381 DF41 RCALL _delay_nms
(0380) w_com(0xae); /*Display ON/OFF 0xae:OFF 0xaf:ON*/
0382 EA0E LDI R16,0xAE
0383 DFBF RCALL _w_com
(0381) w_com(0xa2); /*LCD bias set 0xa2:1/9 0xa3:1/7*/
0384 EA02 LDI R16,0xA2
0385 DFBD RCALL _w_com
(0382) w_com(0xa0); /*ADC select 0xa0:0-127 0xa1:127-0*/
0386 EA00 LDI R16,0xA0
0387 DFBB RCALL _w_com
(0383) w_com(0xc8);
0388 EC08 LDI R16,0xC8
0389 DFB9 RCALL _w_com
(0384) w_com(0xa6); /*Display 0xa6:normal 0xa7:reverse*/
038A EA06 LDI R16,0xA6
038B DFB7 RCALL _w_com
(0385) w_com(0x2a); /* V0 Voltage Regulator Internal Resistor Ration Set*/
038C E20A LDI R16,0x2A
038D DFB5 RCALL _w_com
(0386) w_com(0x81); /*Electronic Volume*/
038E E801 LDI R16,0x81
038F DFB3 RCALL _w_com
(0387) w_com(0x2a);
0390 E20A LDI R16,0x2A
0391 DFB1 RCALL _w_com
(0388) w_com(0x2f); /*power control*/
0392 E20F LDI R16,0x2F
0393 DFAF RCALL _w_com
(0389) delay_nms(100);
0394 E604 LDI R16,0x64
0395 E010 LDI R17,0
0396 DF2C RCALL _delay_nms
(0390) }
0397 940E049B CALL pop_gset1
0399 9508 RET
_img_disp:
page --> R20
i --> R22
j --> R12
point --> R10
039A 940E04B7 CALL push_gset4
039C 0158 MOVW R10,R16
(0391) /**********************************************/
(0392) //图形显示
(0393) /*********************************************/
(0394) void img_disp(const uchar *point)
(0395) { uchar i,j,page;
(0396) page=0xb7;
039D EB47 LDI R20,0xB7
(0397) w_com(0xaf);
039E EA0F LDI R16,0xAF
039F DFA3 RCALL _w_com
(0398) for(i=0;i<8;i++)
03A0 2766 CLR R22
03A1 C015 RJMP 0x03B7
(0399) {
(0400) w_com(page); /*设置页*/
03A2 2F04 MOV R16,R20
03A3 DF9F RCALL _w_com
(0401) w_com(0x10); /*设置列号*/
03A4 E100 LDI R16,0x10
03A5 DF9D RCALL _w_com
(0402) w_com(0x10);
03A6 E100 LDI R16,0x10
03A7 DF9B RCALL _w_com
(0403) for(j=0;j<128;j++)
03A8 24CC CLR R12
03A9 C008 RJMP 0x03B2
(0404) {
(0405) w_data(*(point++));
03AA 0115 MOVW R2,R10
03AB 01C1 MOVW R24,R2
03AC 9601 ADIW R24,1
03AD 015C MOVW R10,R24
03AE 01F1 MOVW R30,R2
03AF 9104 LPM R16,0(Z)
03B0 DF9E RCALL _w_data
03B1 94C3 INC R12
03B2 2D8C MOV R24,R12
03B3 3880 CPI R24,0x80
03B4 F3A8 BCS 0x03AA
(0406) }
(0407) page--;
03B5 954A DEC R20
03B6 9563 INC R22
03B7 3068 CPI R22,0x8
03B8 F348 BCS 0x03A2
(0408) }
(0409) w_com(0xaf); /*Display ON*/
03B9 EA0F LDI R16,0xAF
03BA DF88 RCALL _w_com
(0410) }
03BB 940E0495 CALL pop_gset4
03BD 9508 RET
(0411) /*****************************************/
(0412) /****************************************
(0413) void text_disp()
(0414) {
(0415) uchar i,j,page;
(0416) page=0xb0;
(0417) w_com(0xaf);
(0418) w_com(page); /*设置页
(0419) //w_com(0x10); /*设置列号
(0420) //w_com(0x01);
(0421) w_data(0xff);
(0422) //page--;
(0423) w_com(0xaf); /*Display ON
(0424) }
(0425) /****************************************/
(0426) //16的初始化
(0427) /****************************************/
(0428) void init_m16()
(0429) { DDRA=0Xff;
_init_m16:
03BE EF8F LDI R24,0xFF
03BF BB8A OUT 0x1A,R24
(0430) DDRB|=0Xf9;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -