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

📄 写字库.lst

📁 一个LED特效显示程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
    01DA 7D8F      ANDI	R24,0xDF
    01DB BB82      OUT	0x12,R24
(0275)    DDRA =0;
    01DC 2422      CLR	R2
    01DD BA2A      OUT	0x1A,R2
(0276)    PORTA =0XFF;
    01DE EF8F      LDI	R24,0xFF
    01DF BB8B      OUT	0x1B,R24
(0277)    temp =PINA;
    01E0 B349      IN	R20,0x19
(0278)    return temp;
    01E1 2F04      MOV	R16,R20
    01E2 D1C5      RCALL	pop_gset1
    01E3 9508      RET
_data_store:
  data                 --> R20
    01E4 D1C0      RCALL	push_gset1
    01E5 2F40      MOV	R20,R16
(0279) }
(0280) //存储数据到外部RAM
(0281) 
(0282) void data_store(char data)
(0283) {
(0284)    if((data ==76) &&(FileEnd ==1))     //数据起始位检测
    01E6 344C      CPI	R20,0x4C
    01E7 F479      BNE	0x01F7
    01E8 91800085  LDS	R24,FileEnd
    01EA 3081      CPI	R24,1
    01EB F459      BNE	0x01F7
(0285)    {
(0286)        HeadEN =1;                           //开启头文件数据传输
    01EC E081      LDI	R24,1
    01ED 93800087  STS	HeadEN,R24
(0287) 	   HeadLoad =0;                         //头文件指针清零
    01EF 2422      CLR	R2
    01F0 92200086  STS	HeadLoad,R2
(0288) 	   DataIndex =0;                        //存储数据指针清零
    01F2 2433      CLR	R3
    01F3 92300089  STS	DataIndex+1,R3
    01F5 92200088  STS	DataIndex,R2
(0289)    }
(0290)    if((HeadEN ==0) &&(FileEnd ==0))
    01F7 90200087  LDS	R2,HeadEN
    01F9 2022      TST	R2
    01FA F571      BNE	0x0229
    01FB 90200085  LDS	R2,FileEnd
    01FD 2022      TST	R2
    01FE F551      BNE	0x0229
(0291)    {
(0292) 	   RAM_Write(DataIndex,data);            //数组送数
    01FF 2F24      MOV	R18,R20
    0200 91000088  LDS	R16,DataIndex
    0202 91100089  LDS	R17,DataIndex+1
    0204 DFCA      RCALL	_RAM_Write
    0205 940E0427  CALL	0x427
(0293) 	   DataIndex++;
    0207 9601      ADIW	R24,1
    0208 93900089  STS	DataIndex+1,R25
    020A 93800088  STS	DataIndex,R24
(0294) 	   if(DataIndex <2)                      //送文件长度数据到变量
    020C 3082      CPI	R24,2
    020D E0E0      LDI	R30,0
    020E 079E      CPC	R25,R30
    020F F434      BGE	0x0216
(0295) 	   {
(0296) 	       //FileLength |=data <<DataIndex;    
(0297) 	       FileLength =316;
    0210 E38C      LDI	R24,0x3C
    0211 E091      LDI	R25,1
    0212 9390008B  STS	FileLength+1,R25
    0214 9380008A  STS	FileLength,R24
(0298) 	   }                                     //数据指针
(0299) 	   if((DataIndex >=FileLength)&& (DataIndex >16))
    0216 9020008A  LDS	R2,FileLength
    0218 9030008B  LDS	R3,FileLength+1
    021A 90400088  LDS	R4,DataIndex
    021C 90500089  LDS	R5,DataIndex+1
    021E 1442      CP	R4,R2
    021F 0453      CPC	R5,R3
    0220 F044      BLT	0x0229
    0221 E180      LDI	R24,0x10
    0222 E090      LDI	R25,0
    0223 1584      CP	R24,R4
    0224 0595      CPC	R25,R5
    0225 F41C      BGE	0x0229
(0300) 	   {
(0301) 		   HeadEN =1;
    0226 E081      LDI	R24,1
    0227 940E044B  CALL	0x44B
(0302) 		   FileEnd =1;
(0303) 	   }
(0304)    }
(0305)    if(HeadEN ==1)                            //循环检测文件起始标志
    0229 91800087  LDS	R24,HeadEN
    022B 3081      CPI	R24,1
    022C F501      BNE	0x024D
(0306)    {
(0307)       Head[HeadLoad] =data;
    022D E983      LDI	R24,0x93
    022E E090      LDI	R25,0
    022F 91E00086  LDS	R30,HeadLoad
    0231 27FF      CLR	R31
    0232 0FE8      ADD	R30,R24
    0233 1FF9      ADC	R31,R25
    0234 8340      STD	Z+0,R20
(0308)       HeadLoad++;
    0235 91800086  LDS	R24,HeadLoad
    0237 5F8F      SUBI	R24,0xFF
    0238 93800086  STS	HeadLoad,R24
(0309) 	  if(HeadLoad ==3)
    023A 3083      CPI	R24,3
    023B F489      BNE	0x024D
(0310) 	  { 
(0311) 	     if((Head[0] ==76) && (Head[1] ==69) &&(Head[2] ==68))//文件起始表示吻合
    023C 91800093  LDS	R24,Head
    023E 348C      CPI	R24,0x4C
    023F F469      BNE	0x024D
    0240 91800094  LDS	R24,Head+1
    0242 3485      CPI	R24,0x45
    0243 F449      BNE	0x024D
    0244 91800095  LDS	R24,Head+2
    0246 3484      CPI	R24,0x44
    0247 F429      BNE	0x024D
(0312) 		 {
(0313) 		     HeadEN =0;
    0248 2422      CLR	R2
    0249 92200087  STS	HeadEN,R2
(0314) 			 FileEnd =0;
    024B 92200085  STS	FileEnd,R2
(0315) 		 }
(0316)       }
(0317)    }
    024D D15A      RCALL	pop_gset1
    024E 9508      RET
(0318) }
(0319) /**************************************************
(0320) 
(0321) 			 显示效果处理	 
(0322) 			 
(0323) ****************************************************/
(0324) void Disp_Model(void)
(0325) {   
(0326)     unsigned int file_length =0;
_Disp_Model:
  PFileMax             --> R16
  file_length          --> R18
    024F 2722      CLR	R18
    0250 2733      CLR	R19
(0327) 	int PFileMax;
(0328) 	//DispModel =RAM_Read(2) & (RAM_Read(3)<<8); 			 //model控制字节
(0329) 	//PFileMax =(RAM_Read(0) & RAM_Read(1)<<8)>>3;	     //计算缓冲区域的最大列数
(0330) 	if(ModelDelayTime ==0)
    0251 90200090  LDS	R2,ModelDelayTime
    0253 90300091  LDS	R3,ModelDelayTime+1
    0255 2022      TST	R2
    0256 F009      BEQ	0x0258
    0257 C05F      RJMP	0x02B7
    0258 2033      TST	R3
    0259 F009      BEQ	0x025B
    025A C05C      RJMP	0x02B7
(0331) 	{
(0332) 	     switch(DispModel)
    025B 9120008F  LDS	R18,DispModel
    025D 2733      CLR	R19
    025E 3020      CPI	R18,0
    025F 0723      CPC	R18,R19
    0260 F0B9      BEQ	0x0278
    0261 3021      CPI	R18,1
    0262 E0E0      LDI	R30,0
    0263 073E      CPC	R19,R30
    0264 F0E9      BEQ	0x0282
    0265 3022      CPI	R18,2
    0266 E0E0      LDI	R30,0
    0267 073E      CPC	R19,R30
    0268 F0E1      BEQ	0x0285
    0269 3023      CPI	R18,3
    026A E0E0      LDI	R30,0
    026B 073E      CPC	R19,R30
    026C F409      BNE	0x026E
    026D C045      RJMP	0x02B3
    026E 3024      CPI	R18,4
    026F E0E0      LDI	R30,0
    0270 073E      CPC	R19,R30
    0271 F0D9      BEQ	0x028D
    0272 3025      CPI	R18,5
    0273 E0E0      LDI	R30,0
    0274 073E      CPC	R19,R30
    0275 F409      BNE	0x0277
    0276 C03C      RJMP	0x02B3
    0277 C03B      RJMP	0x02B3
(0333) 		 {
(0334) 	        case 0:
(0335) 		    {                //基本显示
(0336) 			   PDataYMin =4;
    0278 E084      LDI	R24,4
    0279 E090      LDI	R25,0
    027A 940E0431  CALL	0x431
(0337) 		   	   PDataYMax =154;
    027C E98A      LDI	R24,0x9A
    027D 93900082  STS	PDataYMax+1,R25
    027F 93800081  STS	PDataYMax,R24
(0338) 			   break;
    0281 C031      RJMP	0x02B3
(0339) 			}
(0340) 			case 1:
(0341) 		    {             	 //滚屏
(0342) 			   PDataY++;
    0282 940E0403  CALL	0x403
(0343) 			   break;
    0284 C02E      RJMP	0x02B3
(0344) 		    }
(0345) 			case 2:
(0346) 		    {  	   	 		 //反向滚屏
(0347) 			   PDataY--;
    0285 940E0422  CALL	0x422
    0287 9701      SBIW	R24,1
    0288 93900080  STS	PDataY+1,R25
    028A 9380007F  STS	PDataY,R24
(0348) 			   break;
    028C C026      RJMP	0x02B3
(0349) 		    }
(0350) 			case 3:
(0351) 		    {  
(0352) 			   break;
(0353) 		    }
(0354) 			case 4:
(0355) 		    {                //覆盖模式
(0356) 			   if(ModelContJuge =1)
    028D E081      LDI	R24,1
    028E 93800092  STS	ModelContJuge,R24
    0290 2388      TST	R24
    0291 F049      BEQ	0x029B
    0292 940E0455  CALL	0x455
(0357) 			   {
(0358) 			       PDataYMax++;
    0294 9601      ADIW	R24,1
    0295 940E0414  CALL	0x414
(0359) 			   	   PDataYMin++;
    0297 9601      ADIW	R24,1
    0298 940E0431  CALL	0x431
(0360) 			   }
    029A C008      RJMP	0x02A3
(0361) 			   else
(0362) 			   {
(0363) 			       PDataYMax--;
    029B 940E0455  CALL	0x455
    029D 9701      SBIW	R24,1
    029E 940E0414  CALL	0x414
(0364) 			   	   PDataYMin--;
    02A0 9701      SBIW	R24,1
    02A1 940E0431  CALL	0x431
(0365) 			   }
(0366) 			   if(PDataYMax >PFileMax)
    02A3 940E0436  CALL	0x436
    02A5 1502      CP	R16,R2
    02A6 0513      CPC	R17,R3
    02A7 F41C      BGE	0x02AB
(0367) 			   {   
(0368) 				  ModelContJuge =0;
    02A8 2422      CLR	R2
    02A9 92200092  STS	ModelContJuge,R2
(0369) 			   }
(0370) 			   if(PDataYMax <PFileMax)
    02AB 940E0436  CALL	0x436
    02AD 1620      CP	R2,R16
    02AE 0631      CPC	R3,R17
    02AF F41C      BGE	0x02B3
(0371) 			   {   
(0372) 				  ModelContJuge =1;
    02B0 E081      LDI	R24,1
    02B1 93800092  STS	ModelContJuge,R24
(0373) 			   }
(0374) 			   break;
(0375) 		    }
(0376) 			case 5:
(0377) 		    {
(0378) 			   break;      
(0379) 	        }
(0380) 		 }
(0381) 	//ModelDelayTime =RAM_Read(4) & (RAM_Read(5)<<8);
(0382) 	ModelDelayTime =400;
    02B3 E980      LDI	R24,0x90
    02B4 E091      LDI	R25,1
    02B5 940E0441  CALL	0x441
(0383) 	}
    02B7 9508      RET
(0384) }
(0385) 
(0386) /**************************************************
(0387) 
(0388) 			  按键\显示事件处理区	 
(0389) 			  
(0390) ****************************************************/
(0391) void KEY_event(void)
(0392) { /********* 添加按键处理代码 ***************/
(0393)     switch(key_num)
_KEY_event:
    02B8 9100006D  LDS	R16,key_num
    02BA 2711      CLR	R17
    02BB 3000      CPI	R16,0
    02BC 0701      CPC	R16,R17
    02BD F0F1      BEQ	0x02DC
    02BE 3001      CPI	R16,1
    02BF E0E0      LDI	R30,0
    02C0 071E      CPC	R17,R30
    02C1 F0D1      BEQ	0x02DC
    02C2 3002      CPI	R16,2
    02C3 E0E0      LDI	R30,0
    02C4 071E      CPC	R17,R30
    02C5 F029      BEQ	0x02CB
    02C6 3003      CPI	R16,3
    02C7 E0E0      LDI	R30,0
    02C8 071E      CPC	R17,R30
    02C9 F079      BEQ	0x02D9
    02CA C011      RJMP	0x02DC
(0394) 	{
(0395) 	    case 0:
(0396) 		{//And your code
(0397) 		   //RAM_Write(0x0010,0xCF);
(0398) 		   break;
(0399) 		}
(0400) 		case 1:
(0401) 		{
(0402) 		   //Disp_Buff[0] =RAM_Read(0x0010)&0xf;
(0403) 		   //Disp_Buff[1] =RAM_Read(0x0010)>>4;
(0404) 		   break;
(0405) 		}
(0406) 		case 2:
(0407) 		{  
(0408) 		   DispModel++;
    02CB 9180008F  LDS	R24,DispModel
    02CD 5F8F      SUBI	R24,0xFF
    02CE 9380008F  STS	DispModel,R24
(0409) 		   if(DispModel >8)
    02D0 E088      LDI	R24,0x8
    02D1 9020008F  LDS	R2,DispModel
    02D3 1582      CP	R24,R2
    02D4 F438      BCC	0x02DC
(0410) 		      DispModel =0;
    02D5 2422      CLR	R2
    02D6 9220008F  STS	DispModel,R2
(0411) 		   break;
    02D8 C003      RJMP	0x02DC
(0412) 		}
(0413) 		case 3:
(0414) 		{
(0415) 		   PORTD &=0b10111111;
    02D9 B382      IN	R24,0x12
    02DA 7B8F      ANDI	R24,0xBF
    02DB BB82      OUT	0x12,R24
(0416) 		   break;
    02DC 9508      RET
(0417) 		}
(0418) 		/*..................*/   
(0419) 	}
(0420) }
(0421) // 显示事件添加
(0422) void Display_event(void)
(0423) { /************* 添加显示 ***********************/
(0424) 	 //Disp_Buff[1] =>>4;
(0425) 	 //Disp_Buff[6] =head[2]&0x0f;
(0426) 	 Disp_Buff[0] =DataIndex&0x0f;
_Display_event:
    02DD 940E0427  CALL	0x427
    02DF 708F      ANDI	R24,0xF
    02E0 7090      ANDI	R25,0
    02E1 93800060  STS	Disp_Buff,R24
    02E3 940E0427  CALL	0x427
(0427) 	 Disp_Buff[1] =(DataIndex>>4)&0x0f;
    02E5 9595      ASR	R25
    02E6 9587      ROR	R24
    02E7 9595      ASR	R25
    02E8 9587      ROR	R24
    02E9 9595      ASR	R25
    02EA 9587      ROR	R24
    02EB 9595      ASR	R25
    02EC 9587      ROR	R24
    02ED 708F      ANDI	R24,0xF
    02EE 7090      ANDI	R25,0
    02EF 93800061  STS	Disp_Buff+1,R24
(0428) 	 Disp_Buff[2] =DataIndex>>8;
    02F1 90200088  LDS	R2,DataIndex
    02F3 90300089  LDS	R3,DataIndex+1
    02F5 2C23      MOV	R2,R3
    02F6 2433      CLR	R3
    02F7 FC27      SBRC	R2,7
    02F8 9430      COM	R3
    02F9 92200062  STS	Disp_Buff+2,R2
    02FB 940E0422  CALL	0x422
(0429) 	 Disp_Buff[4] =PDataY&0x0f;
    02FD 708F      ANDI	R24,0xF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -