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

📄 c8051f021.c

📁 片上系统单片机C8051F021的应用程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	if (menu==0)
	{
		switch (fcount)
		{
			case 0:
			{
				fun1=1;
				clrp_disp();
				clrram();
				f1disp();				
				break;
			}
			case 1:
			{
				clrp_disp();
				clrram();
				chn_disp (tab1);
				con_disp (0xff,0xff,0x80,0x80,8,16);	//显示光条
				break;
			}
			case 2:
			{
				clrp_disp();
				clrram();
				chn_disp (tab4);
				con_disp (0xff,0xff,0x80,0x80,8,16);	//显示光条
				break;
			}
			case 3:
			{
				fun4=1;
				clrp_disp();
				clrram();
				f4disp();
				break;
			}
			case 4:
			{
				clrp_disp();
				clrram();
				chns_disp (tab8);
				flashwr();
				break;
			}
		}
	}
	else if (meda==0&&mepw==0)
	{
		switch(fcount)
		{
			case 1:
			{
				meda=1;
				fun2=1;
				clrp_disp();
				clrram();
				f2disp();
				break;
			}
			case 2:
			{
				mepw=1;
				fun3=1;
				clrp_disp();
				clrram();
				f3disp();
				break;
			}
		}
	}
	menu=1;
	
}					
			
/*----------------KEY2加键响应子程序-----------------------*/
void key2(void)
{
	if (menu==0)
	{
		clrp_disp();
		fcount-=1;
		if (fcount==255) //uchar 型的数据由0减1后为255
		{
			fcount=4;
		}
		switch(fcount)
		{
			case 0:con_disp (0xff,0xff,0x80,0x80,8,16);break;	//第一行显示光条
			case 1:con_disp (0xff,0xff,0x90,0x90,8,16);break;	//第二行显示光条
			case 2:con_disp (0xff,0xff,0x88,0x80,8,16);break;	//第三行显示光条
			case 3:chn_disp (tabme);con_disp (0xff,0xff,0x98,0x90,8,16);break;	//第四行显示光条
			case 4:												//菜单换页,第四行显示光条
			{
				chn_disp (tabmes);
				con_disp (0xff,0xff,0x98,0x90,8,16);
				break;	
			}
		}
	}
	else if (meda==0&&mepw==0)
	{
		switch (fcount)
		{
			case 1:
			{
				clrp_disp();
				f2count-=1;
				if (f2count==255)
				{
					f2count=1;
				}
				switch(f2count)
				{
					case 0:con_disp (0xff,0xff,0x80,0x80,8,16);break;	//第一行显示光条
					case 1:con_disp (0xff,0xff,0x90,0x90,8,16);break;	//第二行显示光条
				}
				break;
			}
			case 2:
			{
				clrp_disp();
				f3count-=1;
				if (f3count==255)
				{
					f3count=1;
				}
				switch(f3count)
				{
					case 0:con_disp (0xff,0xff,0x80,0x80,8,16);break;	//第一行显示光条
					case 1:con_disp (0xff,0xff,0x90,0x90,8,16);break;	//第二行显示光条
				}
				break;
			}
		}
	}
	else
	{
		switch(fcount)
		{
			case 1:
			{
				if (topsi==0)
				{
					k2count++;
					if (k2count==0x40)
					{
						instd=5;
						incount=5;
					}
					else if (k2count==0x80)
					{
						instd=1;
						incount=1;
						topsi=1;
					}
				}
				switch (f2count)
				{
					case 0:
					{
						if (incount==instd)
						{
							incount=0;
							bcda4(danum0,0,0,0,1);
						}
						if (danum0[0]==1&&danum0[3]==1)		//过10.00则清为00.00
						{
							danum0[0]=0x00;
							danum0[1]=0;
							danum0[2]=0;
							danum0[3]=0;
						}
						break;
					}
					case 1:
					{
						if (incount==instd)
						{
							incount=0;
							bcda4(danum1,0,0,0,1);
						}
						if (danum1[0]==1&&danum1[3]==1)		//过10.00则清为00.00
						{
							danum1[0]=0;
							danum1[1]=0;
							danum1[2]=0;
							danum1[3]=0;
						}
						break;
					}
				}
				incount++;
				break;
			}
			case 2:
			{
				if (topsi==0)
				{
					k2count++;
					if (k2count==0x40)
					{
						instd=5;
						incount=5;
					}
					else if (k2count==0x80)
					{
						instd=1;
						incount=1;
						topsi=1;
					}
				}
				switch (f3count)
				{
					case 0:
					{
						if (incount==instd)
						{
							incount=0;
							bcda4(pwnum0,0,0,0,1);
						}
						if (pwnum0[0]==1&&pwnum0[3]==1)		//过10.00则清为00.00
						{
							pwnum0[0]=0;
							pwnum0[1]=0;
							pwnum0[2]=0;
							pwnum0[3]=0;
						}
						break;
					}
					case 1:
					{
						if (incount==instd)
						{
							incount=0;
							bcda4(pwnum1,0,0,0,1);
						}
						if (pwnum1[0]==1&&pwnum1[3]==1)		//过10.00则清为00.00
						{
							pwnum1[0]=0;
							pwnum1[1]=0;
							pwnum1[2]=0;
							pwnum1[3]=0;
						}
						break;
					}
				}
				incount++;
				break;
			}
		}
	}
}	
/*----------------KEY4减键响应子程序-----------------------*/
void key4(void)
{
	switch(fcount)
	{
		case 1:
		{
			if (topsd==0)
			{
				k4count++;
				if (k4count==0x40)
				{
					destd=5;
					decount=5;
				}
				else if (k4count==0x80)
				{
						destd=1;
						decount=1;
						topsd=1;
					}
				}
				switch (f2count)
				{
					case 0:
					{
						if (decount==destd)
						{
							decount=0;
							bcds4(danum0,0,0,0,1);
						}
						if (danum0[0]==9&&danum0[1]==9&&danum0[2]==9&&danum0[3]==9)		//小于00.00则为10.00
						{
							danum0[0]=1;
							danum0[1]=0;
							danum0[2]=0;
							danum0[3]=0;
						}
						break;
					}
					case 1:
					{
						if (decount==destd)
						{
							decount=0;
							bcds4(danum1,0,0,0,1);
						}
						if (danum1[0]==9&&danum1[1]==9&&danum1[2]==9&&danum1[3]==9)		//小于00.00则为10.00
						{
							danum1[0]=1;
							danum1[1]=0;
							danum1[2]=0;
							danum1[3]=0;
						}
						break;
					}
				}
				decount++;
				break;
			}
			case 2:
			{
				if (topsd==0)
				{
					k4count++;
					if (k4count==0x40)
					{
						destd=5;
						decount=5;
					}
					else if (k4count==0x80)
					{
						destd=1;
						decount=1;
						topsd=1;
					}
				}
				switch (f3count)
				{
					case 0:
					{
						if (decount==destd)
						{
							decount=0;
							bcds4(pwnum0,0,0,0,1);
						}
						if (pwnum0[0]==9&&pwnum0[1]==9&&pwnum0[2]==9&&pwnum0[3]==9)		//小于00.00则为10.00
						{
							pwnum0[0]=1;
							pwnum0[1]=0;
							pwnum0[2]=0;
							pwnum0[3]=0;
						}
						break;
					}
					case 1:
					{
						if (decount==destd)
						{
							decount=0;
							bcds4(pwnum1,0,0,0,1);
						}
						if (pwnum1[0]==9&&pwnum1[1]==9&&pwnum1[2]==9&&pwnum1[3]==9)		//小于00.00则为10.00
						{
							pwnum1[0]=1;
							pwnum1[1]=0;
							pwnum1[2]=0;
							pwnum1[3]=0;
						}
						break;
					}
				}
				decount++;
				break;
			}
		}
}	
/*----------------按键响应-----------------------*/
void keyans(void)
{
	if (k1==1)
	{
		ring();
		key1();
		k1t=0;
		k1=0;
	}
	if (k2==1)
	{
		if (key2r==0)
		{
			key2r=1;
			ring();
		}
		key2();
		k2=0;
	}
	if (k3==1)
	{
		ring();
		key3();
		k3t=0;
		k3=0;
	}
	if (k4==1)
	{
		if (key4r==0)
		{
			key4r=1;
			ring();
		}
		key4();
		k4=0;
	}
}
/*---------------蜂鸣子程序------------------------*/				
void ring()
{
	p15=0;
	delay1(5000);
	p15=1;
}
/*---------------功能一AD子程序------------------------*/	
void adfun()		
{						//在AIN0.0和AIN0.1之间交替转换
	uint ad0ui=0;
	unsigned long int ad0n=0;
	if (adsel==0)			//一路
	{
		AMX0SL=0x00;
		AMX0CF=0x00;
	}
	else if (adsel==3)				//二路
	{
		AMX0SL=0x01;
		AMX0CF=0x00;
	}
	adsel++;
	if (adsel==6)
	{
		adsel=0;
	}
	AD0INT=0;
	AD0BUSY=1;
	while (!AD0INT);
	AD0INT=0;
	if (adsel==2)			//一路
	{
		ad0ui=ADC0H*256+ADC0L;
		adres0=filter(adf0,10,ad0ui,adres0);
		ad0n=adres0;
		ad0n*=12258;
		adnum0[0]=ad0n/10000000;
		adnum0[1]=ad0n/1000000-adnum0[0]*10;
		adnum0[2]=ad0n/100000-adnum0[1]*10-adnum0[0]*100;
	}
	else if (adsel==5) 
	{
		ad0ui=ADC0H*256+ADC0L;
		adres1=filter(adf1,10,ad0ui,adres1);
		ad0n=adres1;
		ad0n*=12258;
		adnum1[0]=ad0n/10000000;
		adnum1[1]=ad0n/1000000-adnum1[0]*10;
		adnum1[2]=ad0n/100000-adnum1[1]*10-adnum1[0]*100;
	}
}
/*---------------滤波子程序------------------------*/
uint filter(uint *a,uchar x,uint m,uint last)		//滤波,先递推,再求去掉最大最小值后的平均值,然后把平均值和上次的结果再平均
{										//滤波结果作为返回值.a为存储数组(uint),x为数组元素个数,m为新的数据
	unsigned long int avr=0;
	uint max,min;
	max=0;
	min=0;
	ditui(a,x,m);
	avr=sumarr(a,x);
	mami(a,x,&max,&min);
	avr-=max;
	avr-=min;
	avr/=(x-2);
	avr+=last;
	avr/=2;
	return avr;
}
void ditui(uint *b,uchar i,uint n) 		//递推子程序.b为存储数组(uint),i为数组元素个数,n为新的数据
{
	uchar j;
	for (j=1;j<i;j++)					
	{
		b[j-1]=b[j];
	}
	b[i-1]=n;
}
unsigned long int sumarr(uint *b,uchar i)	//uint数组求和,i为元素个数,和作为返回值
{
	uchar j=0;
	unsigned long int sum=0;
	for (j=0;j<i;j++)
	{
		sum+=b[j];
	}
	return sum;
}
void mami(uint *b,uchar i,uint *ma,uint *mi)	//求最大最小值子程序.b为数组,i为元素个数,ma为指向最大值的指针,mi同理
{
	uchar j=0;
	*ma=b[0];
	*mi=b[0];
	for (j=1;j<i;j++)
	{
		if (b[j]>(*ma))
		{
			*ma=b[j];
		}
		if (b[j]<(*mi))
		{
			*mi=b[j];
		}
	}
}
/*---------------功能二DA子程序------------------------*/
void dafun()
{
	unsigned long int da0re,da1re;
	da0re=0;
	da1re=0;
	da0re=bcdhb(danum0,4);	
	da1re=bcdhb(danum1,4);
	da0re*=4095;
	da0re/=1000;
	da1re*=4095;
	da1re/=1000;
	da0re=(uint)da0re;
	da1re=(uint)da1re;
	DAC0L=da0re&0x00ff;
	DAC0H=da0re>>8;
	DAC1L=da1re&0x00ff;
	DAC1H=da1re>>8;
}
/*---------------功能三PWM子程序------------------------*/
void pwm0fun()				//CEX0功能子程序
{
	/*if (pwnum0[0]==1)
	{
		pwpr0[0]=9;
		pwpr0[1]=9;
		pwpr0[2]=9;
		pwpr0[3]=9;
	}
	else
	{
		pwpr0[0]=pwnum0[1];
		pwpr0[1]=pwnum0[2];
		pwpr0[2]=pwnum0[3];
		pwpr0[3]=0;
	}*/
	unsigned long int pw0re;
	pw0re=bcdhb(pwnum0,4);
	pw0re=1000-pw0re;
	pw0re*=65536;
	pw0re/=1000;
	pwcp0l=pw0re&0x00ff;
	pwcp0h=pw0re>>8;
}
void pwm1fun()				//CEX1功能子程序
{
	unsigned long int pw1re;
			
	/*if (pwnum1[0]==1)
	{
		pwpr1[0]=9;
		pwpr1[1]=9;
		pwpr1[2]=9;
		pwpr1[3]=9;
	}
	else
	{
		pwpr1[0]=pwnum1[1];
		pwpr1[1]=pwnum1[2];
		pwpr1[2]=pwnum1[3];
		pwpr1[3]=0;
	}*/
	pw1re=bcdhb(pwnum1,4);
	pw1re=1000-pw1re;
	pw1re*=65536;
	pw1re/=1000;
	pwcp1l=pw1re&0x00ff;
	pwcp1h=pw1re>>8;
}
/*---------------功能五参数存储子程序(存储在FLASH中128B的数据存储器中)------------------------*/
void flashre(void)			//参数读子程序
{
	uchar code *pread=0x0000;
	uchar i=0;
	EA=0;
	PSCTL|=0x04;
	for(i=0;i<4;i++)		//读入danum0
	{
		danum0[i]=*pread;
		pread++;
	}
	for(i=0;i<4;i++)		//读入danum1
	{
		danum1[i]=*pread;
		pread++;
	}
	for(i=0;i<4;i++)		//读入pwnum0
	{
		pwnum0[i]=*pread;
		pread++;
	}
	for(i=0;i<4;i++)		//读入pwnum1
	{
		pwnum1[i]=*pread;
		pread++;
	}
	PSCTL&=0xfb;
	EA=1;
}
void flashwr(void)			//参数写子程序
{
	uchar xdata *pwrite=0x0000;
	uchar i=0;
	EA=0;
	FLSCL|=0x01;	//置位FLWE
	PSCTL|=0x07;	//将SFLE,PSEE,PSWE置1
	*pwrite=0;		//擦除
	PSCTL&=0xfd;	//将PSEE清0,禁止擦除
	for(i=0;i<4;i++)		//写入danum0
	{
		*pwrite=danum0[i];
		pwrite++;
	}
	for(i=0;i<4;i++)		//写入danum1
	{
		*pwrite=danum1[i];
		pwrite++;
	}
	for(i=0;i<4;i++)		//写入pwnum0
	{
		*pwrite=pwnum0[i];
		pwrite++;

⌨️ 快捷键说明

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