⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom读写演示程序.lst

📁 EEPROM读写程序: 先向EEPROM写入一幅图片数据
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -