📄 zhw.lst
字号:
02BE 0DE0 ADD R30,R0
02BF 1DF1 ADC R31,R1
02C0 E180 LDI R24,0x10
02C1 9F86 MUL R24,R22
02C2 0DE0 ADD R30,R0
02C3 1DF1 ADC R31,R1
02C4 E88C LDI R24,0x8C
02C5 E090 LDI R25,0
02C6 0FE8 ADD R30,R24
02C7 1FF9 ADC R31,R25
02C8 9104 LPM R16,0(Z)
02C9 DFBE RCALL _SdData
02CA 94E3 INC R14
02CB 2D8E MOV R24,R14
02CC 3088 CPI R24,0x8
02CD F2E0 BCS 0x02AA
02CE 9543 INC R20
02CF 3042 CPI R20,2
02D0 F408 BCC 0x02D2
02D1 CFCD RJMP 0x029F
02D2 940E0CF5 CALL pop_gset5
02D4 9624 ADIW R28,4
02D5 9508 RET
_SdPage:
i --> R20
j --> R22
02D6 940E0CFE CALL push_gset2
(0114) }
(0115) }
(0116) }
(0117)
(0118) //-------------------------------------------------------------------------------
(0119) //清屏
(0120) //-------------------------------------------------------------------------------
(0121) void SdPage(void)
(0122) {
(0123) UINT8 i, j;
(0124) SPCR = 0x50;
02D8 E580 LDI R24,0x50
02D9 B98D OUT 0x0D,R24
(0125) for(i=0;i<12;i++) // page data
02DA 2744 CLR R20
02DB C012 RJMP 0x02EE
(0126) {
(0127) WDR();
02DC 95A8 WDR
(0128) SdCmd(0xb0|i ); // select page
02DD 2F04 MOV R16,R20
02DE 6B00 ORI R16,0xB0
02DF DF9A RCALL _SdCmd
(0129) SdCmd(0x10); // column address start at 00 (Y7,Y6,Y5)
02E0 E100 LDI R16,0x10
02E1 DF98 RCALL _SdCmd
(0130) SdCmd(0x00); // column address start at 00 (Y4,Y3,Y2,Y1)
02E2 2700 CLR R16
02E3 DF96 RCALL _SdCmd
(0131) for(j=0;j<128;j++)
02E4 2766 CLR R22
02E5 C005 RJMP 0x02EB
(0132) {
(0133) SdData(0X00); //清屏
02E6 2700 CLR R16
02E7 DFA0 RCALL _SdData
(0134) SdData(0X00);
02E8 2700 CLR R16
02E9 DF9E RCALL _SdData
02EA 9563 INC R22
02EB 3860 CPI R22,0x80
02EC F3C8 BCS 0x02E6
02ED 9543 INC R20
02EE 304C CPI R20,0xC
02EF F360 BCS 0x02DC
(0135) }
(0136) }
(0137) SPCR = 0x54;
02F0 E584 LDI R24,0x54
02F1 B98D OUT 0x0D,R24
02F2 940E0CEC CALL pop_gset2
02F4 9508 RET
_test:
i --> Y+4
j --> Y+4
k --> R20
page --> R22
data --> R20
02F5 940E0CFE CALL push_gset2
02F7 2F62 MOV R22,R18
02F8 2F40 MOV R20,R16
02F9 9723 SBIW R28,3
(0138) }
(0139)
(0140) void test(UINT8 data,UINT8 page)
(0141) {
(0142) UINT8 k,j,i;
(0143) SPCR = 0x50;
02FA E580 LDI R24,0x50
02FB B98D OUT 0x0D,R24
(0144) date[0]=(data&0xf0)>>4;
02FC 2F84 MOV R24,R20
02FD 7F80 ANDI R24,0xF0
02FE 9582 SWAP R24
02FF 708F ANDI R24,0xF
0300 93800100 STS date,R24
(0145) date[1]=data&0x0f;
0302 2F84 MOV R24,R20
0303 708F ANDI R24,0xF
0304 93800101 STS date+1,R24
(0146)
(0147) for(k=0;k<2;k++)
0306 2744 CLR R20
0307 C013 RJMP 0x031B
(0148) {
(0149) LCDSHOW( page, 0x10+k/2, (0x08*k)&0x0f, date[k]);
0308 E080 LDI R24,0
0309 E091 LDI R25,1
030A 2FE4 MOV R30,R20
030B 27FF CLR R31
030C 0FE8 ADD R30,R24
030D 1FF9 ADC R31,R25
030E 8020 LDD R2,Z+0
030F 822A STD Y+2,R2
0310 E088 LDI R24,0x8
0311 9F84 MUL R24,R20
0312 2D80 MOV R24,R0
0313 708F ANDI R24,0xF
0314 8388 STD Y+0,R24
0315 2F24 MOV R18,R20
0316 9526 LSR R18
0317 5F20 SUBI R18,0xF0
0318 2F06 MOV R16,R22
0319 DF7C RCALL _LCDSHOW
031A 9543 INC R20
031B 3042 CPI R20,2
031C F358 BCS 0x0308
(0150) }
(0151) SPCR = 0x54;
031D E584 LDI R24,0x54
031E B98D OUT 0x0D,R24
031F 9623 ADIW R28,3
0320 940E0CEC CALL pop_gset2
0322 9508 RET
_LCD_init_initialize:
0323 940E0CFE CALL push_gset2
(0152) }
(0153)
(0154)
(0155)
(0156) //-------------------------------------------------------------------------------
(0157) //LCD初始化
(0158) //-------------------------------------------------------------------------------
(0159) void LCD_init_initialize(void)
(0160) {
(0161) LCD_control&=~(1<<LCD_RST); // reset the LCD module
0325 9895 CBI 0x12,5
(0162) delayms(5);
0326 E005 LDI R16,5
0327 E010 LDI R17,0
0328 E020 LDI R18,0
0329 E030 LDI R19,0
032A DEED RCALL _delayms
(0163)
(0164) LCD_control|=1<<LCD_RST;
032B 9A95 SBI 0x12,5
(0165) delayms(5); // wait for the init routine to finish
032C E005 LDI R16,5
032D E010 LDI R17,0
032E E020 LDI R18,0
032F E030 LDI R19,0
0330 DEE7 RCALL _delayms
(0166)
(0167) // SdCmd(0xae); // Display off **hardware reset default**
(0168) SdCmd(0x48); // Display Duty Ratio = 1/96
0331 E408 LDI R16,0x48
0332 DF47 RCALL _SdCmd
(0169) SdCmd(0x60); // (two byte instruction)
0333 E600 LDI R16,0x60
0334 DF45 RCALL _SdCmd
(0170) SdCmd(0xa1); // ADC = 1, reverse (flip x-direction)
0335 EA01 LDI R16,0xA1
0336 DF43 RCALL _SdCmd
(0171) SdCmd(0xc8); // SHL = 1, reverse (flip y-direction)
0337 EC08 LDI R16,0xC8
0338 DF41 RCALL _SdCmd
(0172) SdCmd(0x44); // COM0Reg = 16
0339 E404 LDI R16,0x44
033A DF3F RCALL _SdCmd
(0173) SdCmd(0x10); // (two byte instruction)
033B E100 LDI R16,0x10
033C DF3D RCALL _SdCmd
(0174) SdCmd(0x40); // Display Start Line = 0
033D E400 LDI R16,0x40
033E DF3B RCALL _SdCmd
(0175) SdCmd(0x00); // (two byte instruction)
033F 2700 CLR R16
0340 DF39 RCALL _SdCmd
(0176) SdCmd(0xab); // Osc on strat
0341 EA0B LDI R16,0xAB
0342 DF37 RCALL _SdCmd
(0177) SdCmd(0x66); // DC-DC StepUp = 5x boosting
0343 E606 LDI R16,0x66
0344 DF35 RCALL _SdCmd
(0178)
(0179) SdCmd(0x27); // 1+(Rb/Ra) = 7.2 (highest value)
0345 E207 LDI R16,0x27
0346 DF33 RCALL _SdCmd
(0180) SdCmd(0x81); // ElecVol = 32 (middle value)
0347 E801 LDI R16,0x81
0348 DF31 RCALL _SdCmd
(0181) SdCmd(0x20); // (two byte instruction)
0349 E200 LDI R16,0x20
034A DF2F RCALL _SdCmd
(0182) SdCmd(0x54); // LCD bias = 1/9 (adjusted for better control)
034B E504 LDI R16,0x54
034C DF2D RCALL _SdCmd
(0183) // SdCmd(0x4c); // N-line inversion = frame inversion **hardware reset default**
(0184) // SdCmd(0x00); // (two byte instruction) **hardware reset default**
(0185)
(0186) SdCmd(0x93); // FRC=4 PWM=15
034D E903 LDI R16,0x93
034E DF2B RCALL _SdCmd
(0187)
(0188) SdCmd(0x88); // white mode (two byte instruction)
034F E808 LDI R16,0x88
0350 DF29 RCALL _SdCmd
(0189) SdCmd(0x00); // 1st Frame Pulse width = 00h
0351 2700 CLR R16
0352 DF27 RCALL _SdCmd
(0190) // 2nd Frame Pulse width = 00h
(0191) SdCmd(0x89); // white mode (two byte instruction)
0353 E809 LDI R16,0x89
0354 DF25 RCALL _SdCmd
(0192) SdCmd(0x00); // 3rd Frame Pulse width = 00h
0355 2700 CLR R16
0356 DF23 RCALL _SdCmd
(0193) // 4th Frame Pulse width = 00h
(0194)
(0195) SdCmd(0x8a); // light gray mode (two byte instruction)
0357 E80A LDI R16,0x8A
0358 DF21 RCALL _SdCmd
(0196) SdCmd(0x00); // 1st Frame Pulse width = 08h
0359 2700 CLR R16
035A DF1F RCALL _SdCmd
(0197) // 2nd Frame Pulse width = 08h
(0198) SdCmd(0x8b); // white mode (two byte instruction)
035B E80B LDI R16,0x8B
035C DF1D RCALL _SdCmd
(0199) SdCmd(0x00); // 3rd Frame Pulse width = 08h
035D 2700 CLR R16
035E DF1B RCALL _SdCmd
(0200) // 4th Frame Pulse width = 08h
(0201)
(0202) SdCmd(0x8c); // dark gray mode (two byte instruction)
035F E80C LDI R16,0x8C
0360 DF19 RCALL _SdCmd
(0203) SdCmd(0xff); // 1st Frame Pulse width = 0Bh
0361 EF0F LDI R16,0xFF
0362 DF17 RCALL _SdCmd
(0204) // 2nd Frame Pulse width = 0Bh
(0205) SdCmd(0x8d); // white mode (two byte instruction)
0363 E80D LDI R16,0x8D
0364 DF15 RCALL _SdCmd
(0206) SdCmd(0xff); // 3rd Frame Pulse width = 0Bh
0365 EF0F LDI R16,0xFF
0366 DF13 RCALL _SdCmd
(0207) // 4th Frame Pulse width = 0Bh
(0208)
(0209) SdCmd(0x8e); // dark gray mode (two byte instruction)
0367 E80E LDI R16,0x8E
0368 DF11 RCALL _SdCmd
(0210) SdCmd(0xff); // 1st Frame Pulse width = 0Eh (set to reduce crosstalk)
0369 EF0F LDI R16,0xFF
036A DF0F RCALL _SdCmd
(0211) // 2nd Frame Pulse width = 0Eh (set to reduce crosstalk)
(0212) SdCmd(0x8f); // white mode (two byte instruction)
036B E80F LDI R16,0x8F
036C DF0D RCALL _SdCmd
(0213) SdCmd(0xff); // 3rd Frame Pulse width = 0Eh (set to reduce crosstalk)
036D EF0F LDI R16,0xFF
036E DF0B RCALL _SdCmd
(0214) // 4th Frame Pulse width = 0Eh (set to reduce crosstalk)
(0215)
(0216) SdCmd(0x2C); // power ctl = DC-DC ON
036F E20C LDI R16,0x2C
0370 DF09 RCALL _SdCmd
(0217) delayms(1);
0371 E001 LDI R16,1
0372 E010 LDI R17,0
0373 E020 LDI R18,0
0374 E030 LDI R19,0
0375 DEA2 RCALL _delayms
(0218) SdCmd(0x2f); // power ctl = Voltage Regulator ON
0376 E20F LDI R16,0x2F
0377 DF02 RCALL _SdCmd
(0219) delayms(1);
0378 E001 LDI R16,1
0379 E010 LDI R17,0
037A E020 LDI R18,0
037B E030 LDI R19,0
037C DE9B RCALL _delayms
(0220) SdCmd(0x2f); // power ctl = Voltage follower ON
037D E20F LDI R16,0x2F
037E DEFB RCALL _SdCmd
(0221) delayms(1);
037F E001 LDI R16,1
0380 E010 LDI R17,0
0381 E020 LDI R18,0
0382 E030 LDI R19,0
0383 DE94 RCALL _delayms
(0222)
(0223) SdCmd(0xaf); // display ON
0384 EA0F LDI R16,0xAF
0385 DEF4 RCALL _SdCmd
0386 940E0CEC CALL pop_gset2
0388 9508 RET
_LCD_init:
ret --> Y+1
csdbuff --> Y+0
0389 9760 SBIW R28,0x10
(0224) }
(0225) //-------------------------------------------------------------------------------
(0226) void LCD_init(void) //模块复位与初始化
(0227) {
(0228) UINT8 csdbuff[16],ret;
(0229) SPCR = 0x50;
038A E580 LDI R24,0x50
038B B98D OUT 0x0D,R24
(0230) DDRD|=1<<LCD_CS;
038C 9A8E SBI 0x11,6
(0231) DDRD|=1<<LCD_RS;
038D 9A8C SBI 0x11,4
(0232) DDRD|=1<<LCD_RST;
038E 9A8D SBI 0x11,5
(0233)
(0234) LCD_init_initialize(); //LCD初始化
038F DF93 RCALL _LCD_init_initialize
(0235) SdPage(); // 清屏
0390 DF45 RCALL _SdPage
(0236) SPCR = 0x54;
0391 E584 LDI R24,0x54
0392 B98D OUT 0x0D,R24
0393 9660 ADIW R28,0x10
0394 9508 RET
FILE: D:\new_sd\init.c
(0001)
(0002) #include "glo.h"
(0003) void port_init(void)
(0004) {
(0005) PORTA = 0xFF; //PORTx 端口x数据寄存器
_port_init:
0395 EF8F LDI R24,0xFF
0396 BB8B OUT 0x1B,R24
(0006) DDRA = 0xFF; //DDRx 端口x方向寄存器 1为输出,0为输入
0397 BB8A OUT 0x1A,R24
(0007)
(0008) PORTB = 0xFF;
0398 BB88 OUT 0x18,R24
(0009) DDRB = 0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -