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

📄 newlcdtest_1127.c

📁 8051f020的屏显和控制文件包含头文件。开发环境可选用KEIL
💻 C
📖 第 1 页 / 共 5 页
字号:
{
	uchar keyvalue=0,i;
	EA=0;
	keytemp=KEY&0x3f;
keyjudge:
	if(keytemp!=keyvalue)//键盘防抖
	{
	     for(i=0;i<10;i++)
	     delay(30000);
	     keyvalue=keytemp;
	     goto keyjudge;
	 }
	 else if(keytemp<0x3f) 
	 goto keyrun;
keyrun:
	switch(keytemp)//根据key的值判断哪个键按下,执行相应的函数
	{
		case 0x3e:
			turn_up();
			break;
		case 0x3d:
			turn_down();
			break;
		case 0x3b:
			turn_left();
			break;
	 	case 0x37:
	 		turn_right();
	 		break;
	 	case 0x2f:
	 		turn_affirm();
	 		key_judge();
	 		if(flag_affirm==1)
	 		flag_adjust=0;
	 		else
	 		flag_adjust=1;
	 		flag_affirm=0;
	 		break;
	 	case 0x1f:
	 		turn_cancle();
	 		key_judge();
	 		if(flag_affirm==1)
	 		flag_adjust=0;
	 		else
	 		flag_adjust=1;
	 		flag_affirm=0;
	 		break;
	 	default:
	 		break;
	 	} 
	key_judge();//判断按键是否弹起,弹起重新判断有无按键按下,未弹起等待其弹起
	count_TF2=0;//重新开始计数
	RCAP2H=0x00;
	RCAP2L=0x00;
	TR2=1;      //重新允许定时器2
	en_vfd=1;
	ET2=1;
	EA=1;
}

////////////////////////UART中断服务程序////////////////////
void interrupt_UART(void) interrupt 4
{
	EA=0;
	RI0=0;
	if(SBUF0!=num)
	goto ret;
	buf[0]=SBUF0;
	sre();
ret:
	EA=1;
}

///////////////////////计时器2中断服务程序////////////////////
void interrupt_T2(void) interrupt 5
{
	EA=0;
	TF2=0;
	count_TF2+=1;
	if(count_TF2==1687)
	{
		TR2=0;//禁止定时器2
		ET2=0;
		screen_off();
		en_vfd=0;
		count_TF2=0;
	}
	EA=1;
}

//////////////////接收数据块///////////////////////////////////
void sre(void)
{
	ulong k;
	char l=0;
	int n=0;
	while(!RI0);             //等待一帧数据接收完成
	RI0=0;                   //清接收完成标志位
	buf[1]=SBUF0;            //取出接收缓冲区的数据
	while(1)
	{
		for(l=2;l<10;l++)
		{
			while(!RI0)      //等待接收下一个字节
			{
				n++;
				if(n>20000)goto receive_over;   //计数超时,没有后续字节,数据接收结束
			  }
			 RI0=0; 
			 buf[l]=SBUF0;    //数据接收未完成,继续接收
	                 n=0; 
	             }
	        }	
receive_over: 
       n=0;
       if(l!=0x05)    //字节长度不正确返回错误信息
       {               
       	SBUF0=ERR_LEN;
	while(!TI0);
	TI0=0;
	goto reti;
	      }         
       REN0=0;         //正确进行相应操作
       /*if((buf[1]&0x7f)<=15)   //buf[1]低7位表示工作参数的地址号
       {
       	if((buf[1]&0x80)==0)   //buf[1]7bit表示命令种类:0:设置工作参数;1:读取工作状态
       	{
       	unite24(buf[2],buf[3],buf[4]);
       	if((mil_data>=0)&&(mil_data<=0xffff00))
       	{
       		SBUF0=0x00;  //设置数据正确
       		while(!TI0);
		TI0=0;
	}
	else
        {
        	SBUF0=0x20;  //设置数据非法
		while(!TI0);
		TI0=0;
	}
       }
       else    //读取工作状态
       {
       		SBUF0=0xff;
       		while(!TI0);
		TI0=0;
	}
        }
        else
        {
        	SBUF0=0x80;  //参数地址非法
       		while(!TI0);
		TI0=0;
	}*/
	switch(buf[1]&0x7f)  //判断工作参数地址号
	{
		case 0x00:        //参数存储地址号为0
		    if((buf[1]&0x80)==0)//设置工作参数
		    {
		    	switch(buf[4])//数据段buf[4]:恢复默认值(0),保存设置(1),调用工作参数(2),其他字节任意
		    	{
		    		case 0:
		    		   sent(PARADEFAULT,0x00,0x00,0x00);
		                   flag_store=0;
		                   para[0]=flag_store;
		                   FlashWrite(para,1);
		                   para_default( );
		                   str_right();
		                   break;
		               case 1:
			           store_para();
		                   FlashWrite(para,17);
		                   str_right();
		                   break;
		               case 2:
		                   FlashRead(para,17);
		                   para_stored();
		                   str_right();
		                   break;
		               default:     //数据非法
			   	   SBUF0=ERR_DATA;
			   	   while(!TI0);
			   	   TI0=0;
			           break;
			         }
			 }
		     else   //命令非法
		     {
		     	SBUF0=ERR_COM;
			while(!TI0);
			TI0=0;
			  }
		     break;
         	case 0x01:     //左声道电平,LAUDIO:buf[3]为正(0)负(1)标志字节,buf[4]为数值(0~100)
		   if((buf[1]&0x80)==0)//设置工作参数
		   {
		   	if((buf[4]<=100)&&(buf[4]>=0)&&((buf[3]==0)||(buf[3]==1)))
			{
				if(en_audio==0)//非静音
			        {
			        	flag_symbol=((buf[3]==0)?(flag_symbol&0xfe):(flag_symbol|0x01));	
			     	        laudio_signal=buf[4];
			                if(flag_symbol&0x01)//音量为副
                                        {
	                                   if((laudio_signal%10)==0)lweight=lsignal[10-laudio_signal/10];
	                                   else
	                                   {
	                                      k=(lsignal[9-laudio_signal/10]-lsignal[10-laudio_signal/10])/10;
	                                      lweight=lsignal[10-laudio_signal/10]+k*(laudio_signal%10);
	                                    }
                                           }
                                        else 
                                        {
	                                   if((laudio_signal%10)==0)lweight=lsignal[10+laudio_signal/10];
	                                   else
	                                   {
	                                      k=(lsignal[10+laudio_signal/10]-lsignal[11+laudio_signal/10])/10;
	                                      lweight=lsignal[10+laudio_signal/10]-k*(laudio_signal%10);
	                                      }
	                                     }	       
	           	                dispart24(lweight);
		                        sent(LAUDIO,msb,isb,lsb);
		                        str_right();
		                   }
		                 else    //静音,音量不能更改
		                 {
		                 	SBUF0=ERR_AUD;
			   	        while(!TI0);
			   	        TI0=0;
			              }
			       }
		       else    //数据非法
		       {
		       	SBUF0=ERR_DATA;
			while(!TI0);
			TI0=0;
		   	    }
		   	  }
		   else              //读取工作状态
		   {
		  	SBUF0=flag_symbol;
		   	while(!TI0);
		   	TI0=0;
		   	SBUF0=laudio_signal;
		   	while(!TI0);
		   	TI0=0;
		   	str_right();
		   	}
	           break;
	       case 0x02:                         //右声道电平,RAUDIO
		   if((buf[1]&0x80)==0)//写数值
		   {
		      if((buf[4]<=100)&&(buf[4]>=0)&&((buf[3]==0)||(buf[3]==2)))
		      {
		   	   if(en_audio==0)//非静音
			   {
				flag_symbol=((buf[3]==0)?(flag_symbol&0xfd):(flag_symbol|0x02));	
			     	raudio_signal=buf[4];
			     	if(flag_symbol&0x02)
	                        {
	                        	if((raudio_signal%10)==0)rweight=rsignal[10-raudio_signal/10];
	                                else
	                                {
	                                      k=(rsignal[9-raudio_signal/10]-rsignal[10-raudio_signal/10])/10;
	                                      rweight=rsignal[10-raudio_signal/10]+k*(raudio_signal%10);
	                                    }
                                 }
                                else 
                                {
	                                if((raudio_signal%10)==0)rweight=rsignal[10+raudio_signal/10];
	                                else
	                                {
	                                       k=(rsignal[10+raudio_signal/10]-rsignal[11+raudio_signal/10])/10;
	                                       rweight=rsignal[10+raudio_signal/10]-k*(raudio_signal%10);
	                                    }
	                         }	       
	           	        dispart24(rweight);
		                sent(RAUDIO,msb,isb,lsb);
		                str_right();
		             }
		             else    //静音,音量不能更改
		             {
		                SBUF0=ERR_AUD;
			   	while(!TI0);
			   	TI0=0;
			       }
			     }
		       else   //数据非法
		       {
		       	   SBUF0=ERR_DATA;
			   while(!TI0);
			   TI0=0;
		   	  }
		    }
		    else                           //读取工作状态
		    {
		       SBUF0=flag_symbol;
		       while(!TI0);
		       TI0=0;
		       SBUF0=raudio_signal;
		       while(!TI0);
		       TI0=0;
		       str_right();
		       }
	           break;
	       case 0x03:                         //导频频偏
	          if((buf[1]&0x80)==0)//设置工作参数
		  {
		  	unite24(buf[2],buf[3],buf[4]);
		   	if((mil_data>=0)&&(mil_data<=20))
		   	{
		   		pilot_range=mil_data;
	     	                pilot_vol=0x10ab3*pilot_range;
	     	                dispart24(pilot_vol);
	           	        sent(PILOT,msb,isb,lsb);
	           	        str_right();
		   	}
		   	else   //数据非法
		   	{
		   		SBUF0=ERR_DATA;
			        while(!TI0);
			        TI0=0;
		   	        }
		   	}
		   else    //读取工作状态
		   {
		   	SBUF0=pilot_range;
		   	while(!TI0);
		   	TI0=0;
		   	str_right();
		   	}
		   break;
	      case 0x04:                         //调制度,CONT
		   if((buf[1]&0x80)==0)//设置工作参数
	           {
	           	unite24(buf[2],buf[3],buf[4]);
	           	if((mil_data>=0)&&(mil_data<=200))
	           	{
	           		fm_centi=mil_data;
	           		fm_trans(fm_centi);
	           		dispart24(cont_fm);
	           		sent(CONT,msb,isb,lsb);
	           		str_right();
		   	      }
		   	else   //数据非法
		   	{
		   		SBUF0=ERR_DATA;
			        while(!TI0);
			        TI0=0;
		   	       }
		      }
		  else   //读取工作状态
		  {
		  	SBUF0=fm_centi;
		   	while(!TI0);
		   	TI0=0;
		   	str_right();
		   	}
		  break; 
	     case 0x05:                         //输出允许,EN_RF:buf[2]为射频开关,buf[3]为内外频标
		 if((buf[1]&0x80)==0)//设置工作参数
		 {
		 	if(((buf[2]==0)||(buf[2]==1))&&((buf[3]==0)||(buf[3]==1))&&((buf[4]==0)||(buf[4]==1)))
			{
				en_power=buf[2]<<1;

⌨️ 快捷键说明

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