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

📄 led条屏控制器.c

📁 非常好的单片机汇编语言
💻 C
📖 第 1 页 / 共 2 页
字号:
						{
							P1=(P1&0xf1)|RowTab[hang];
							
							E138=0;
						}
						else
						{
							P1=(P1&0xf1)|RowTab[hang-8];
							E138=1;
						}
						Rclk=0;
					    Rclk=1;
						Rclk=0;
						XY=0;
						//Delay(Speed);
						if(StopFlag==1)
						{
							if(hang==15)
							{
								if(xflag==0)
								{
									x++;
									WDTRST=0x1e;
									WDTRST=0xe1;
								}
							}
							if(x==StopTime*28)
							{
								xflag=1;
								if(Col==0)
								{
									StopFlag=0;
									x=0;
									xflag=0;
								}
										
							}
						}
						
					}
					
				WDTRST=0x1e;
				WDTRST=0xe1;	
				
				 
		}

		if(StopFlag==0)
		{
			FirstAddress=FirstAddress+PingData;
		}
		StopFlag=1;
		
	}
	XY=1;	
} 
/*////////////////////////////////////////////////////////////////////////////////////*/ 
void GetCanShu(void)
{
	uchar i=0;
	while(i<ChangeNum)
	{
		ReadFromRom(0xa6,ReadEepRomBuff,0x10+4*i,4);
		
		CE_RAM=1;
		XBYTE[0x1fe1+4*i]=ReadEepRomBuff[0];
		XBYTE[0x1fe1+4*i+1]=ReadEepRomBuff[1];
		XBYTE[0x1fe1+4*i+2]=ReadEepRomBuff[2];
		XBYTE[0x1fe1+4*i+3]=ReadEepRomBuff[3];
		i++;
	}
}
/*////////////////////////////////////////////////////////////////////////////////////*/ 
void main()			 
{	
	unsigned char k=0;
	XY=1;
	EA=1;
	EX0=1;	 //开外部中断0
	IT0=1;	 //下降沿触发
	SCON=0X00; //串口模式0发数据
	P3=0xff;
	CE_RAM=1;
	
	WDTRST=0x1e;
	WDTRST=0xe1;
	ReadFromRom(0xa6,ReadEepRomBuff,0x00,5);
	PingCan=ReadEepRomBuff[0];	//开机读显示位数
	Speed=ReadEepRomBuff[1];	//开机读速度
	AllMoveWord=ReadEepRomBuff[2]*10+ReadEepRomBuff[3];
	ChangeNum=ReadEepRomBuff[4]; //取出改变显示方式的总次数
 	WDTRST=0x1e;
	WDTRST=0xe1;
	PingData=2*PingCan;
	GetHangDate();
	GetCanShu();
	getdata();
    Data_To_Ram();	   
	
	FirstAddress=0;
	while(1)
	{  
	   RamAddress=0x6000;
	   
	   for(k=0;k<ChangeNum;k++)
	   {
	   		CE_RAM=1;
			ChangeTab=XBYTE[0x1fe1+4*k];
			StopTime=(XBYTE[0x1fe1+4*k+1] & 0x0f);
			MoveWord=XBYTE[0x1fe1+4*k+2]*10+XBYTE[0x1fe1+4*k+3];  
			XY=0;
			if(ChangeTab==0x31)
			{
			
				MoveLeftDisplay();
				 
			 }
		 	if(ChangeTab==0x32)
			{
				MoveUpDisplay();
				
			}
			if(ChangeTab==0x33)
			{
				MoveDownDisplay();
				
			} 
			WDTRST=0x1e;
			WDTRST=0xe1; 
			XY=1;
		 	RamAddress=RamAddress+MoveWord+PingData;
		
	} 
		
	
		
		
			
			
	}  
}
/*//////////////////////////////////////////////////////*/
void DataTransmissiom(void) interrupt 0
{
	
	
	uint i=0;
	EX0=0;
	for(i=0;i<800;i++);	
	SCON=0x71; //串口工作于模式1,REN允许接收
	PCON=0x00; //波特率不加倍
	TMOD=0x20; //定时器1方式2
	ES=1;
	TH1=0XFA;  //11.0592晶振下4800波特率
	TL1=0XFA;
	TR1=1;
	RI=0;
	
}
/*//////////////////////////////////////////////////////*/
void chuankou(void) interrupt 4		  //串口接收程序
{

	
	uint Count=0,i=0;  
	uchar temp=0,temp1=0;
	uchar Song=0;
	uchar StopFlagAddress=0; //存储显示方式标志地址偏移量
	uint buchong=0; //补0xa1的个数
	uchar ReceiveBuff=0x91;		//串口接收数据
	uchar Buff[6]={0,0,0,0,0,0};
	EA=0;
	XY=1;
	WDTRST=0x1e;
	WDTRST=0xe1;
	
	while(RI==0)
	{
		WDTRST=0x1e;
		WDTRST=0xe1;
	}	
	RI=0;	
	Buff[0]=SBUF;
	WDTRST=0x1e;
	WDTRST=0xe1;
	if(Buff[0]==0x21)	//判断起始码0x21
	{
		while(RI==0)
	{
		WDTRST=0x1e;
		WDTRST=0xe1;
	}	
		RI=0; 
		Buff[1]=SBUF;
		WDTRST=0x1e;
		WDTRST=0xe1; 
			while(RI==0)
	{
		WDTRST=0x1e;
		WDTRST=0xe1;
	}	
		RI=0;
		Buff[2]=SBUF;
		WDTRST=0x1e;
		WDTRST=0xe1;
		
		if(Buff[1]==0x30 && Buff[2]==0x30)	 //判断显示屏号00
		{		
			WDTRST=0x1e;
			WDTRST=0xe1;
			while(RI==0)
			{
				WDTRST=0x1e;
				WDTRST=0xe1;
			}	
			RI=0;
			Buff[3]=SBUF;
			WDTRST=0x1e;
			WDTRST=0xe1;
			while(RI==0)
			{
				WDTRST=0x1e;
				WDTRST=0xe1;
			}	
			RI=0;
			Buff[4]=SBUF;
			WDTRST=0x1e;
			WDTRST=0xe1;
			while(RI==0)
			{
				WDTRST=0x1e;
				WDTRST=0xe1;
			}	
			RI=0;
			Buff[5]=SBUF;
			WDTRST=0x1e;
			WDTRST=0xe1;
			
			
			while(ReceiveBuff!=0x7e)
			{	
				WDTRST=0x1e;
				WDTRST=0xe1;
				while(RI==0)
					{
						WDTRST=0x1e;
						WDTRST=0xe1;
					}	
					RI=0;
				ReceiveBuff=SBUF;
				if(ReceiveBuff!=0x7e) 
				{
					CE_RAM=1;
					XBYTE[0x7e01+Count]=ReceiveBuff;	  //前3个字节为字数和速度控制,从0x7e01后为数据基内码
					Count++;	 //记录接收数据的总数
					
				}
				WDTRST=0x1e;
				WDTRST=0xe1;
				
			}
			WDTRST=0x1e;
			WDTRST=0xe1;
			temp=(((Buff[3]&0x0f)<<4) | (Buff[4]&0x0f));
			temp1=(temp/16)*10+temp%16;
			WDTRST=0x1e;
			WDTRST=0xe1;
			WriteOneByteToRom(0xa6,temp1,0x00);		//存显示屏参数  
			PingCan=temp1;

			WDTRST=0x1e;
			WDTRST=0xe1;  
			
			temp=Buff[5]&0x0f;
			WriteOneByteToRom(0xa6,temp,0x01);	//存速度数据
			Speed=temp;
			WDTRST=0x1e;
			WDTRST=0xe1;
/*////////////////////////////////////////////*/
			
						 
				ChangeNum=0;
				CE_RAM=1;
				
				if(XBYTE[0x7e01]==0x5B)	 //如果收到的第一个数据为“[”
				{
					WriteOneByteToRom(0xa6,XBYTE[0x7e02],0x10+StopFlagAddress);
					StopFlagAddress++;
					WriteOneByteToRom(0xa6,XBYTE[0x7e03],0x10+StopFlagAddress);
					StopFlagAddress++;
					ChangeNum++;	
					AllMoveWord=0;
					MoveWord=0;
					Count=Count-4;
					for(temp1=0;temp1<2*PingCan;temp1++)
					{
						WriteOneByteToRom(0xa0,0xa1,0x00+AllMoveWord);
						AllMoveWord++;
						WDTRST=0x1e;
						WDTRST=0xe1;
					}
					if(XBYTE[0x7e02]==0x31)
					{
						LeftMoveSign=1;
						UpMoveSign=0;
					}
					if(XBYTE[0x7e02]==0x32)
					{
						LeftMoveSign=0;
						UpMoveSign=1;
					}   
				}
				i=0;
				
				while(i<Count)	 //将RAM中的数据存到24C08中
				{
					
					Song=XBYTE[0x7e05+i];
					if(Song==0x0D)
					{
						i=i+2;
						temp=XBYTE[0x7e05+i];
						if(temp==0x5B)		//检测到为切换显示的标志
						{
							if((UpMoveSign==1 && LeftMoveSign==0 &&  DownMoveSign==0 && MoveWord%(2*PingCan)!=0) ||(UpMoveSign==0 && LeftMoveSign==0&&  DownMoveSign==1 && MoveWord%(2*PingCan)!=0))
							{
								buchong=2*PingCan+(2*PingCan-MoveWord%(2*PingCan));
								MoveWord=MoveWord+(2*PingCan-MoveWord%(2*PingCan));
							}
							else if(UpMoveSign==0 && LeftMoveSign==1&&  DownMoveSign==0 && MoveWord%2==1 )
							{
								buchong=2*PingCan+1;
								MoveWord=MoveWord+1;
							}
							else
							{
								buchong=2*PingCan;
							}
							WriteOneByteToRom(0xa6,MoveWord/10,0x10+StopFlagAddress);
							StopFlagAddress++;
							WriteOneByteToRom(0xa6,MoveWord%10,0x10+StopFlagAddress);
							StopFlagAddress++;
							for(temp1=0;temp1<buchong;temp1++)
							{
								if(AllMoveWord<=255)
								{
								  	
									WriteOneByteToRom(0xa0,0xa1,0x00+AllMoveWord);
									
									
									
								}
								else if(255<AllMoveWord<=512)
								{
									
									WriteOneByteToRom(0xa2,0xa1,0x00+AllMoveWord-256);
								
									
								}
								else
								{
									
									WriteOneByteToRom(0xa4,0xa1,0x00+AllMoveWord-512);
									
									
								}
								AllMoveWord++;
								WDTRST=0x1e;
								WDTRST=0xe1;
							}
					
							if(XBYTE[0x7e05+i+1]==0x31)
							{
								LeftMoveSign=1;
								UpMoveSign=0;
								DownMoveSign=0;
							}
							if(XBYTE[0x7e05+i+1]==0x32)
							{
								LeftMoveSign=0;
								UpMoveSign=1;
								DownMoveSign=0;
							}
							if(XBYTE[0x7e05+i+1]==0x33)
							{
								LeftMoveSign=0;
								UpMoveSign=0;
								DownMoveSign=1;
							}     
							WDTRST=0x1e;
							WDTRST=0xe1;
							WriteOneByteToRom(0xa6,XBYTE[0x7e05+i+1],0x10+StopFlagAddress);
							StopFlagAddress++;
							WriteOneByteToRom(0xa6,XBYTE[0x7e05+i+2],0x10+StopFlagAddress);
							StopFlagAddress++;	 
							i=i+4;
							MoveWord=0;//每换一次方式总字数清零
							ChangeNum++;
						}
					}				
					

					
					else	
					{	
						if(AllMoveWord<=255)
						{
						  	CE_RAM=1;
							WriteOneByteToRom(0xa0,XBYTE[0x7e05+i],0x00+AllMoveWord);
							
						}
						else if(255<AllMoveWord<=512)
						{
							CE_RAM=1;
							WriteOneByteToRom(0xa2,XBYTE[0x7e05+i],0x00+AllMoveWord-256);
						}
						else
						{
							CE_RAM=1;
							WriteOneByteToRom(0xa4,XBYTE[0x7e05+i],0x00+AllMoveWord-512);
							
						}
						i++;
						MoveWord++;
						AllMoveWord++;
						WDTRST=0x1e;
						WDTRST=0xe1;
					}
				}
				
				WDTRST=0x1e;
				WDTRST=0xe1;
				if((UpMoveSign==1 && LeftMoveSign==0 &&  DownMoveSign==0 && MoveWord%(2*PingCan)!=0) ||(UpMoveSign==0 && LeftMoveSign==0&&  DownMoveSign==1 && MoveWord%(2*PingCan)!=0) )
				{
					buchong=2*PingCan+(2*PingCan-MoveWord%(2*PingCan));
					MoveWord=MoveWord+(2*PingCan-MoveWord%(2*PingCan));
				}
				else if(UpMoveSign==0 && LeftMoveSign==1&&  DownMoveSign==0 && MoveWord%2==1 )
				{
					buchong=2*PingCan+1;
					MoveWord=MoveWord+1;
				}
				else
				{
					buchong=2*PingCan;
				}
				if((AllMoveWord+buchong)%2==1)
				{
					temp=buchong+1;
				}
				else
				{
					temp=buchong;
				}
				for(temp1=0;temp1<temp;temp1++)
				{
					if(AllMoveWord<=255)
					{
								  	
						WriteOneByteToRom(0xa0,0xa1,0x00+AllMoveWord);
									
					}
					else if(255<AllMoveWord<=512)
					{
						WriteOneByteToRom(0xa2,0xa1,0x00+AllMoveWord-256);
								
					}
					else
					{
						WriteOneByteToRom(0xa4,0xa1,0x00+AllMoveWord-512);
					}
					AllMoveWord++;
					WDTRST=0x1e;
					WDTRST=0xe1;
					
				}
				
				WriteOneByteToRom(0xa6,AllMoveWord/10,0x02);
				WriteOneByteToRom(0xa6,AllMoveWord%10,0x03);
				WriteOneByteToRom(0xa6,ChangeNum,0x04);	  //显示方式改变的总次数
				WriteOneByteToRom(0xa6,MoveWord/10,0x10+StopFlagAddress); //存储最后一条信息的数量
				StopFlagAddress++;
				WriteOneByteToRom(0xa6,MoveWord%10,0x10+StopFlagAddress);
				
		}
		
	}
	while(1);
} 

⌨️ 快捷键说明

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