📄 eeprom读写演示程序.lst
字号:
0415 3080 CPI R24,0
0416 E0E0 LDI R30,0
0417 079E CPC R25,R30
0418 F444 BGE 0x0421
(0165) {
(0166) LCMWriteData(0x2d); //显示负号
0419 E20D LDI R16,0x2D
041A DF88 RCALL _LCMWriteData
(0167) DisplayNum = -DisplayNum;
041B 01C5 MOVW R24,R10
041C 9580 COM R24
041D 9590 COM R25
041E 5F8F SUBI R24,0xFF
041F 4F9F SBCI R25,0xFF
0420 015C MOVW R10,R24
(0168) }
(0169) LCD_temp=DisplayNum/10000;
0421 E120 LDI R18,0x10
0422 E237 LDI R19,0x27
0423 0185 MOVW R16,R10
0424 940E061D CALL div16s
0426 2F60 MOV R22,R16
(0170) if(flag | LCD_temp)
0427 2E24 MOV R2,R20
0428 2A20 OR R2,R16
0429 F019 BEQ 0x042D
(0171)
(0172) {
(0173)
(0174) LCMWriteData(0x30 + LCD_temp);
042A 5D00 SUBI R16,0xD0
042B DF77 RCALL _LCMWriteData
(0175)
(0176) flag = 1;
042C E041 LDI R20,1
(0177)
(0178) }
(0179) DisplayNum -= LCD_temp*10000;
042D 2F26 MOV R18,R22
042E 2733 CLR R19
042F E100 LDI R16,0x10
0430 E217 LDI R17,0x27
0431 940E0653 CALL empy16s
0433 1AA0 SUB R10,R16
0434 0AB1 SBC R11,R17
(0180) LCD_temp = DisplayNum/1000;
0435 EE28 LDI R18,0xE8
0436 E033 LDI R19,3
0437 0185 MOVW R16,R10
0438 940E061D CALL div16s
043A 2F60 MOV R22,R16
(0181) if(flag | LCD_temp)
043B 2E24 MOV R2,R20
043C 2A20 OR R2,R16
043D F019 BEQ 0x0441
(0182)
(0183) {
(0184)
(0185) LCMWriteData(0x30 + LCD_temp);
043E 5D00 SUBI R16,0xD0
043F DF63 RCALL _LCMWriteData
(0186)
(0187) flag = 1;
0440 E041 LDI R20,1
(0188)
(0189) }
(0190) DisplayNum -= LCD_temp*1000;
0441 2F26 MOV R18,R22
0442 2733 CLR R19
0443 EE08 LDI R16,0xE8
0444 E013 LDI R17,3
0445 940E0653 CALL empy16s
0447 1AA0 SUB R10,R16
0448 0AB1 SBC R11,R17
(0191) LCD_temp = DisplayNum/100;
0449 E624 LDI R18,0x64
044A E030 LDI R19,0
044B 0185 MOVW R16,R10
044C 940E061D CALL div16s
044E 2F60 MOV R22,R16
(0192) if(flag | LCD_temp)
044F 2E24 MOV R2,R20
0450 2A20 OR R2,R16
0451 F019 BEQ 0x0455
(0193)
(0194) {
(0195)
(0196) LCMWriteData(0x30 + LCD_temp);
0452 5D00 SUBI R16,0xD0
0453 DF4F RCALL _LCMWriteData
(0197)
(0198) flag = 1;
0454 E041 LDI R20,1
(0199)
(0200) }
(0201) DisplayNum -= LCD_temp*100;
0455 E684 LDI R24,0x64
0456 9F86 MUL R24,R22
0457 18A0 SUB R10,R0
0458 08B1 SBC R11,R1
(0202) LCD_temp = DisplayNum/10;
0459 E02A LDI R18,0xA
045A E030 LDI R19,0
045B 0185 MOVW R16,R10
045C 940E061D CALL div16s
045E 2F60 MOV R22,R16
(0203) if(flag | LCD_temp)
045F 2E24 MOV R2,R20
0460 2A20 OR R2,R16
0461 F019 BEQ 0x0465
(0204)
(0205) {
(0206)
(0207) LCMWriteData(0x30 + LCD_temp);
0462 5D00 SUBI R16,0xD0
0463 DF3F RCALL _LCMWriteData
(0208)
(0209) flag = 1;
0464 E041 LDI R20,1
(0210)
(0211) }
(0212) DisplayNum -= LCD_temp*10;
0465 E08A LDI R24,0xA
0466 9F86 MUL R24,R22
0467 18A0 SUB R10,R0
0468 08B1 SBC R11,R1
(0213) LCD_temp = DisplayNum;
0469 2D6A MOV R22,R10
(0214) if(flag | LCD_temp)
046A 2E24 MOV R2,R20
046B 282A OR R2,R10
046C F021 BEQ 0x0471
(0215)
(0216) {
(0217)
(0218) LCMWriteData(0x30 + LCD_temp);
046D 2F06 MOV R16,R22
046E 5D00 SUBI R16,0xD0
046F DF33 RCALL _LCMWriteData
(0219)
(0220) flag = 1;
0470 E041 LDI R20,1
(0221)
(0222) }
(0223) if(!flag) LCMWriteData(0x30);
0471 2344 TST R20
0472 F411 BNE 0x0475
0473 E300 LDI R16,0x30
0474 DF2E RCALL _LCMWriteData
0475 940E069C CALL pop_gset5
0477 9508 RET
(0224) }
(0225)
(0226)
(0227)
(0228) ////////////////////////////////////////////////////////////////////
(0229)
(0230) /*-----------------------液晶初始化-----------------------------*/
(0231) void LCMInit()
(0232) {
(0233) LCDDDR_OUT;
_LCMInit:
0478 B38A IN R24,0x1A
0479 618F ORI R24,0x1F
047A BB8A OUT 0x1A,R24
(0234) LCD_PSB;
047B 98DB CBI 0x1B,3
(0235) LCD_AK;
047C 9ADC SBI 0x1B,4
(0236) LCD_EN_L;
047D 98DA CBI 0x1B,2
(0237) LCD_RS_L;
047E 98D8 CBI 0x1B,0
(0238) LCD_RW_L;
047F 98D9 CBI 0x1B,1
(0239)
(0240) LCMWriteCommand(0x30);
0480 E300 LDI R16,0x30
0481 DF07 RCALL _LCMWriteCommand
(0241) // 8 bits interface,basic instrument
(0242) LCMWriteCommand(0x0c);
0482 E00C LDI R16,0xC
0483 DF05 RCALL _LCMWriteCommand
(0243) // display,cursor on
(0244) LCMWriteCommand(0x01);
0484 E001 LDI R16,1
0485 DF03 RCALL _LCMWriteCommand
(0245) // clear DDRAM
(0246) LCMWriteCommand(0x02);
0486 E002 LDI R16,2
0487 DF01 RCALL _LCMWriteCommand
0488 9508 RET
_LCMDelay:
i --> R20
j --> R22
k --> R16
0489 940E06A5 CALL push_gset2
(0247) // cursor return
(0248)
(0249)
(0250) }
(0251)
(0252) /*----------------------延时子函数---------------------------*/
(0253) void LCMDelay(int k)
(0254) {
(0255) int i;
(0256) int j;
(0257) for(i=0;i<k;i++)
048B 2744 CLR R20
048C 2755 CLR R21
048D C00B RJMP 0x0499
(0258) {
(0259) for(j=0;j<=2000;j++)
048E 2766 CLR R22
048F 2777 CLR R23
0490 5F6F SUBI R22,0xFF
0491 4F7F SBCI R23,0xFF
0492 ED80 LDI R24,0xD0
0493 E097 LDI R25,7
0494 1786 CP R24,R22
0495 0797 CPC R25,R23
0496 F7CC BGE 0x0490
0497 5F4F SUBI R20,0xFF
0498 4F5F SBCI R21,0xFF
0499 1740 CP R20,R16
049A 0751 CPC R21,R17
049B F394 BLT 0x048E
049C 940E0693 CALL pop_gset2
049E 9508 RET
_LCMDisplayPicture:
c --> Y+3
b --> Y+3
r --> R22
CurrentRow --> R10
i --> R20
CurrentCol --> R14
j --> R12
n --> Y+12
049F 931A ST R17,-Y
04A0 930A ST R16,-Y
04A1 940E069F CALL push_gset5
04A3 9722 SBIW R28,2
FILE: E:\学习专区\AVR专区\个人创作区\AVR单片机开发平台\EEPROM读写演示程序\图片生成.c
(0001) //读取EEPROM中的数据,并在128*64显示屏上显示。
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) char r_y[];//读取数取缓存
(0005) void LCMDisplayPicture(int n)//显示一幅图片
(0006) {
(0007) char *r;
(0008) int b;
(0009) int c;
(0010) char CurrentCol=0x80;
04A4 E880 LDI R24,0x80
04A5 2EE8 MOV R14,R24
(0011) char CurrentRow=0x80;
04A6 2EA8 MOV R10,R24
(0012) char i,j;
(0013) r=r_y;
04A7 EA6D LDI R22,0xAD
04A8 E070 LDI R23,0
(0014) LCMWriteCommand(0x34);
04A9 E304 LDI R16,0x34
04AA E010 LDI R17,0
04AB 940E0389 CALL _LCMWriteCommand
(0015) for (i=0;i<64;i++)
04AD 2744 CLR R20
04AE C04F RJMP 0x04FE
(0016) {
(0017) CurrentRow=0x80+i;
04AF 2F84 MOV R24,R20
04B0 5880 SUBI R24,0x80
04B1 2EA8 MOV R10,R24
(0018) if(CurrentRow>0x9F)
04B2 E98F LDI R24,0x9F
04B3 158A CP R24,R10
04B4 F420 BCC 0x04B9
(0019) CurrentRow=0x80+CurrentRow-0xa0;
04B5 2D8A MOV R24,R10
04B6 5880 SUBI R24,0x80
04B7 5A80 SUBI R24,0xA0
04B8 2EA8 MOV R10,R24
(0020) twi_init();
04B9 940E05A0 CALL _twi_init
(0021) rd24c(r,i*16+n,16);
04BB E180 LDI R24,0x10
04BC E090 LDI R25,0
04BD 8399 STD Y+1,R25
04BE 8388 STD Y+0,R24
04BF 9F84 MUL R24,R20
04C0 0190 MOVW R18,R0
04C1 840C LDD R0,Y+12
04C2 841D LDD R1,Y+13
04C3 0D20 ADD R18,R0
04C4 1D31 ADC R19,R1
04C5 018B MOVW R16,R22
04C6 940E05A9 CALL _rd24c
(0022) r=r_y;
04C8 EA6D LDI R22,0xAD
04C9 E070 LDI R23,0
(0023) for (j=0;j<8;j++)
04CA 24CC CLR R12
04CB C02A RJMP 0x04F6
(0024) {
(0025) if (i<=31)
04CC E18F LDI R24,0x1F
04CD 1784 CP R24,R20
04CE F010 BCS 0x04D1
(0026) CurrentCol=0x80;
04CF E880 LDI R24,0x80
04D0 2EE8 MOV R14,R24
(0027) if (i>31)
04D1 E18F LDI R24,0x1F
04D2 1784 CP R24,R20
04D3 F410 BCC 0x04D6
(0028) CurrentCol=0x88;
04D4 E888 LDI R24,0x88
04D5 2EE8 MOV R14,R24
(0029) CurrentCol=CurrentCol+j;
04D6 0CEC ADD R14,R12
(0030) LCMWriteCommand(CurrentRow);
04D7 2D0A MOV R16,R10
04D8 2711 CLR R17
04D9 940E0389 CALL _LCMWriteCommand
(0031) LCMWriteCommand(CurrentCol);
04DB 2D0E MOV R16,R14
04DC 2711 CLR R17
04DD 940E0389 CALL _LCMWriteCommand
(0032)
(0033) LCMWriteData(r_y[2*j]); //低八位
04DF E082 LDI R24,2
04E0 9D8C MUL R24,R12
04E1 01F0 MOVW R30,R0
04E2 EA8D LDI R24,0xAD
04E3 E090 LDI R25,0
04E4 0FE8 ADD R30,R24
04E5 1FF9 ADC R31,R25
04E6 8100 LDD R16,Z+0
04E7 2711 CLR R17
04E8 940E03A3 CALL _LCMWriteData
(0034) LCMWriteData(r_y[2*j+1]); //高八位
04EA E082 LDI R24,2
04EB 9D8C MUL R24,R12
04EC 01F0 MOVW R30,R0
04ED EA8E LDI R24,0xAE
04EE E090 LDI R25,0
04EF 0FE8 ADD R30,R24
04F0 1FF9 ADC R31,R25
04F1 8100 LDD R16,Z+0
04F2 2711 CLR R17
04F3 940E03A3 CALL _LCMWriteData
04F5 94C3 INC R12
04F6 2D8C MOV R24,R12
04F7 3088 CPI R24,0x8
04F8 F298 BCS 0x04CC
(0035) }
(0036) LCMWriteCommand(0x36); //扩充指令集 绘图开
04F9 E306 LDI R16,0x36
04FA E010 LDI R17,0
04FB 940E0389 CALL _LCMWriteCommand
04FD 9543 INC R20
04FE 3440 CPI R20,0x40
04FF F408 BCC 0x0501
0500 CFAE RJMP 0x04AF
(0037) }
(0038) LCMWriteCommand(0x30); //基本指令集 绘图关
0501 E300 LDI R16,0x30
0502 E010 LDI R17,0
0503 940E0389 CALL _LCMWriteCommand
0505 9622 ADIW R28,2
0506 940E069C CALL pop_gset5
0508 9622 ADIW R28,2
0509 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -