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

📄 t10a2_display.c

📁 AVR单片机基础程序实例! 十个程序源代码。
💻 C
📖 第 1 页 / 共 5 页
字号:
		for(tmp=0;tmp<7;tmp++)
		{
			total+=FreqData.frqField[tmp];
		}
		if(total>900)
		{
			fustep++;
			fdstep=0;
			if(fustep>20)
			{
				fustep=0;
				tmp=OCR1A;
				if(total>180*7 && tmp<135)
				{
					tmp+=10;
					if(tmp>limit)tmp=limit;
				}
				else
				{
					if(tmp<limit)tmp++;
				}
				OCR1A=tmp;
			}
		}
		else
		{
			if(total<8*80)
			{
				fdstep++;
				fustep=0;
                                tmp=OCR1A;
				if(fdstep>20)
				{
					fdstep=0;
					if(total<40*7)
					{
						tmp-=10;
						if(tmp>255-10)tmp=0;
					}
					else
					{
						if(tmp>0)tmp--;
					}
					OCR1A=tmp;

				}
			}
			else
			{
				fdstep=0;
				fustep=0;
			}
		}
		}
		else
		{
			OCR1A=0;
		}
	
	}
	if(step==0x17)
	{
		tmp=OCR1A;
		tmp>>=2;
		if(FreqData.frqField[6]>tmp)
		{
			FreqData.frqField[6]-=tmp;
                        FreqData.frqField[6]>>=1;
		}
		else
		{
			FreqData.frqField[6]=0;
		}
	}
	(*Current_Spect)();
	step++;
	return;
}


void FrqBasicDisp()
{
	//DispTemp();
	//FrqHillDisp(0);
	FreqHillDisp(4);
}

void SkyAndEarth()
{
	FreqHillDisp(1);
}

void Rain()
{
	FreqHillDisp(2);
}

void Frq21Lines()
{
	FreqHillDisp(0);
}

void FrqDispWithCLine()
{
	FreqHillDisp(5);
}

void FrqDispPlant()
{
	FreqHillDisp(3);
}

void TimeDisp()
{
	DLineDisp(0);
}

void AutoSet()
{
	static unsigned int ctimer=0;
	static unsigned char stc=0;
	if(ctimer++>1500)
	{
		if(++stc>6)stc=0;
		ctimer=0;
	}
	switch(stc)
	{
		case 0:
			FreqHillDisp(4);
			break;
		case 1:
			FreqHillDisp(1);
			break;
		case 2:
			FreqHillDisp(2);
			break;
		case 3:
			FreqHillDisp(0);
			break;
		case 4:
			FreqHillDisp(5);
			break;
		case 5:
			FreqHillDisp(3);
			break;
		case 6:
			DLineDisp(0);
			break;
	}
}

/*void DTimeDisp()
{
	DLineDisp(3);
}*/


void DLineDisp(unsigned char mode)
{
	static unsigned char step=0,srp;
	unsigned char tmp,tmp2,*p,last,rp;
	if((step&15)==0)
	{
		ADMUX=64+32+AD_TIME;
		ADCSRA=0xbe;
		if(step&16)
		{
			Using_Temporary=Spectrum_Temporary1;
		}
		else
		{
			Using_Temporary=Spectrum_Temporary2;
		}
		Using_Temporary[0]=0;
		Using_Temporary[1]=0;
		Using_Temporary[2]=0;
		Using_Temporary[3]=128;
		ADC_ON;
		//Lighten_VFD();
		
		
		if(mode & 2)
		{
			/*rp=FreqData.frqField[4]>>2;
			
			if(rp!=0)
			{
				for(tmp=0;tmp<8;tmp++)
				{
					Display_Buffer[63][tmp]=0xaa;
				}
			}
			p=&Display_Buffer[62][7];
			for(tmp2=1;tmp2<rp;tmp2+=2)
			{
				for(tmp=0;tmp<8;tmp++)
				{
					*p=0xff;
					p--;
				}
			}
			if(!(rp&1))
			{
				for(tmp=0;tmp<8;tmp++)
				{
					*p=0x55;
					p--;
				}
			}
			rp=127-rp;
			srp=rp;*/
		}
		while( ! ( Using_Temporary[1] & 1) );
		//Lighten_VFD();
		if(mode & 2)
		{
			/*while(p>=Display_Buffer[0])
			{
				*p=0;
				p--;
			}*/
		}
		else
		{
			CLEAR_VFD();
			rp=srp=127;
			
		}
		if(step&16)
		{
			p=Spectrum_Temporary2+2;
			p=Spectrum_Temporary2+4+(*p);
		}
		else
		{
			p=Spectrum_Temporary1+2;
			p=Spectrum_Temporary1+4+(*p);
		}
		last=((*p));
		last-=128;
		last>>=2;
		if(last&32)last|=(128+64);
		last+=16;
		if(last&128)
		{
			last=0;
		}
		else
		{
			if(last>31)last=31;
		}
		while( rp!=255 )
		{
			/*while(Using_Temporary[0]<(p-(Using_Temporary+4)));
			if(Using_Temporary[0]>(192+48))
			{
				Using_Temporary[0]=192;
				//Lighten_VFD();
			}*/
			tmp=(*p);
			tmp-=128;
			tmp>>=2;
			if(tmp&32)tmp|=(128+64);
			tmp+=16;
			if(tmp&128)
			{
				tmp=0;
			}
			else
			{
				if(tmp>31)tmp=31;
			}
			if(tmp>last)
			{
				do
				{
					VFD_Point(rp,last,1);
				}while((++last)<tmp);
			}
			else
			{
				if(last>tmp)
				{
					do
					{
						VFD_Point(rp,last,1);
						
					}while((--last)>tmp);
				}
				else
				{
					VFD_Point(rp,last,1);
				}
			}
			rp--;
        	p++;
		
		}
		
	}
	
	//CLR_BIT(PORTE,4);
	if((step&15)==1)
	{
		rp=srp;
		if( ! (mode & 1) )
		{
			if(step & 16)
			{
				p=Spectrum_Temporary1+2;
				p=Spectrum_Temporary1+4+(*p);
			}
			else
			{
				p=Spectrum_Temporary2+2;
				p=Spectrum_Temporary2+4+(*p);
			}
			tmp2=1;
		}
		else
		{
			/*if(step & 16)
			{
				p=Spectrum_Temporary2+2;
				p=Spectrum_Temporary2+4+(*p);
			}
			else
			{
				p=Spectrum_Temporary1+2;
				p=Spectrum_Temporary1+4+(*p);
			}
			tmp2=0xff;*/
		}
		last=((*p));
		last-=128;
		last>>=2;
		if(last&32)last|=(128+64);
		last+=16;
		if(last&128)
		{
			last=0;
		}
		else
		{
			if(last>31)last=31;
		}
		while( rp!=255 )
		{
			tmp=((*p));
			tmp-=128;
			tmp>>=2;
			if(tmp&32)tmp|=(128+64);
			tmp+=16;
			if(tmp&128)
			{
				tmp=0;
			}
			else
			{
				if(tmp>31)tmp=31;
			}
			if(tmp>last)
			{
				do
				{
					VFD_Point(rp,tmp2*last,1);
				}while((++last)<tmp);
			}
			else
			{
				if(last>tmp)
				{
					do
					{
						VFD_Point(rp,tmp2*last,1);
						
					}while((--last)>tmp);
				}
				else
				{
					VFD_Point(rp,tmp2*last,1);
				}
			}
			rp--;
	       	p++;
			
		}
	}
	step++;
	if((step & 15)==5)
	{
		step &= 16;
		step ^= 16;
	}
	//Lighten_VFD();
	
	//SET_BIT(PORTE,4);
}

void FreqHillDisp(unsigned char sub)
{
	unsigned char p,*q,stp,*rain,tmp[12],rp,tmp2,tmp3,tmp4,rainarray;
	union Word2Byte extdata;
	rain=Spectrum_Temporary1+15;
	p=*(Spectrum_Temporary1+6);
	q=Spectrum_Temporary1+7;
	//savl=Spectrum_Temporary1+15+21;
	if(p==6)
	{
		p=7;
	}
	else
	{
		p=FreqData.latest;
		if(p>7)return;
	}
	for(stp=0;stp<7;stp++)
	{
		tmp2=FreqData.frqField[stp];
		//tmp2=LogTable[tmp2];
		if(tmp2>q[stp])
		{
			if(tmp2>(q[stp]+18))
			{
				if(q[stp]>247-18)
				{
					q[stp]=247;
				}
				else
				{
					q[stp]+=18;
				}
			}
    	}
		else
		{
			if(tmp2<q[stp])
			{
				if(q[stp]<9)
				{
					q[stp]=0;
				}
				else
				{
					q[stp]-=9;
				}
			}
		}
	}
	if(p&1)
	{
		if(sub==0 || sub==2)
		{
			for(stp=0;stp<64;stp+=3)
			{
				for(tmp2=0;tmp2<6;tmp2++)
				{
					Display_Buffer[stp][tmp2]=0;
				}
			}
		}
		if(sub!=3)
		{
			for(stp=0;stp<8;stp++)
			{
				Display_Buffer[63][stp]=0;
			}
		}
		extdata.word=Frequence_Extend(q[2],q[3],q[4]);
		tmp[0]=extdata.byte[0];
		tmp[1]=q[3];
		tmp[2]=extdata.byte[1];
		extdata.word=Frequence_Extend(q[3],q[4],q[5]);
		tmp[3]=extdata.byte[0];
		tmp[4]=q[4];
		tmp[5]=extdata.byte[1];
		extdata.word=Frequence_Extend(q[4],q[5],q[6]);
		tmp[6]=extdata.byte[0];
		tmp[7]=q[5];
		tmp[8]=extdata.byte[1];
		extdata.word=Frequence_Extend(q[5],q[6],q[6]);
		tmp[9]=extdata.byte[0];
		tmp[10]=q[6];
		tmp[11]=extdata.byte[1];
		rainarray=9;
		rp=28;
		tmp2=63;
	}
	else
	{
		if(sub!=3 /*&& sub!=6*/)
		{
			WriteMod(1,32-8,ButtomOfSpectrum);
		}
		extdata.word=Frequence_Extend(q[0],q[0],q[1]);
		tmp[0]=extdata.byte[0];
		tmp[1]=q[0];
		tmp[2]=extdata.byte[1];
		extdata.word=Frequence_Extend(q[0],q[1],q[2]);
		tmp[3]=extdata.byte[0];
		tmp[4]=q[1];
		tmp[5]=extdata.byte[1];
		extdata.word=Frequence_Extend(q[1],q[2],q[3]);
		tmp[6]=extdata.byte[0];
		tmp[7]=q[2];
		tmp[8]=extdata.byte[1];
		extdata.word=Frequence_Extend(q[2],q[3],q[4]);
		tmp[9]=extdata.byte[0];
		tmp[10]=q[3];
		tmp[11]=extdata.byte[1];
		rainarray=0;
		rp=1;
		tmp2=27;
	}
    switch(sub)
    {
    	case 0:
    		stp=0;
    		while(rp<tmp2)
			{
				tmp3=Calc256to24(tmp[stp]);
				DrawFrequenceLine(tmp3,rp,2);
				rp++;
				DrawFrequenceLine(tmp3,rp,2);
				rp+=2;
    		    stp++;
			}
			break;
		case 1:
			stp=0;
			while(rp<tmp2)
			{
				tmp3=Calc256to24(tmp[stp]);
				DrawFrequenceLine(tmp3,rp,2);
				rp++;
				DrawFrequenceLine(tmp3,rp,0);
				rp++;
				DrawLineAndPoint(tmp3,rp,1);
				rp++;
				stp++;
			}
			break;
		case 2:
			stp=0;
			while(rp<tmp2)
			{
				tmp3=Calc256to24(tmp[stp]);
				tmp4=rain[rainarray];
				tmp4++;
				if( tmp4<=(tmp3<<1) || tmp4>48 )tmp4=(tmp3<<1);
				rain[rainarray]=tmp4;
				DrawFrequenceLine(tmp3,rp,3);
				rp++;
				DrawFrequenceLine(tmp3,rp,3);
				VFD_PlaneLine(127-(rp<<1),128-((rp-1)<<1),tmp4>>1,1);
				rp+=2;
				stp++;
				rainarray++;
			}
			break;
		case 3:
			if(p&1)
			{
				rp=9;
				tmp2=17;
				stp=0;
			}
			else
			{
				rp=1;
				tmp2=9;
				stp=1;
			}
			while(rp<tmp2)
			{
				DrawFreqPlaneLine(tmp[stp],rp,0);
				tmp3=Calc256to24(tmp[stp]);
				rp++;
				stp++;
			}
			break;
		case 4:
			stp=1;
			if(p&1)
			{
				extdata.word=Frequence_Extend(tmp[10],tmp[11],tmp[11]);
				DrawLineAndPoint(Calc256to24(extdata.byte[0]),61,0);
				DrawLineAndPoint(Calc256to24(tmp[11]),62,0);
				DrawLineAndPoint(Calc256to24(extdata.byte[1]),63,0);
				rp=31;
				tmp2=61;
			}
			else
			{
				extdata.word=Frequence_Extend(tmp[0],tmp[0],tmp[1]);
				tmp3=Calc256to24(extdata.byte[0]);
				DrawLineAndPoint(tmp3,1,0);
				tmp3=Calc256to24(tmp[0]);
				DrawLineAndPoint(tmp3,2,0);
				tmp3=Calc256to24(extdata.byte[1]);
				DrawLineAndPoint(tmp3,3,0);
				rp=4;
				tmp2=31;
			}
			while(rp<tmp2)
			{
				extdata.word=Frequence_Extend(tmp[stp-1],tmp[stp],tmp[stp+1]);
				tmp3=Calc256to24(extdata.byte[0]);
				DrawLineAndPoint(tmp3,rp,0);
				rp++;
				tmp3=Calc256to24(tmp[stp]);
				DrawLineAndPoint(tmp3,rp,0);
				rp++;
				tmp3=Calc256to24(extdata.byte[1]);
				DrawLineAndPoint(tmp3,rp,0);
				rp++;
				stp++;
			}
			break;
			
		case 5:
			stp=1;
			if(p&1)
			{
				extdata.word=Frequence_Extend(tmp[10],tmp[11],tmp[11]);
				tmp3=Calc256to24(extdata.byte[0]);
				DrawFrequenceLine(tmp3,61,0);
				VFD_Point(127-61*2,tmp3,1);
				tmp3=Calc256to24(tmp[11]);
				DrawFrequenceLine(tmp3,62,0);
				VFD_Point(127-62*2,tmp3,1);
				tmp3=Calc256to24(extdata.byte[1]);
				DrawFrequenceLine(tmp3,63,0);
				if(sub==5)VFD_Point(127-63*2,tmp3,1);
				rp=31;
				tmp2=61;
			}
			else
			{
				extdata.word=Frequence_Extend(tmp[0],tmp[0],tmp[1]);
				tmp3=Calc256to24(extdata.byte[0]);
				DrawFrequenceLine(tmp3,1,0);
				VFD_Point(127-1*2,tmp3,1);
				tmp3=Calc256to24(tmp[0]);
				DrawFrequenceLine(tmp3,2,0);
				VFD_Point(127-2*2,tmp3,1);
				tmp3=Cal

⌨️ 快捷键说明

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