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

📄 main.c

📁 单片机键盘以及LCD和AD控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
						}
				break;
				}
	}		
}
/************************************************************************
*
*
*							以下为复用数字键6
*					选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
*                 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/	
void Key6Func()
{
	//按键代码
	if(Confirm==3)
	{
				switch(Menu)				   //选择子菜单进入
				{
				case 1:
						switch(SubMenu)
						{
						case 1:
								{
								Disp_chars(16,"60",2);
								Disp_chars(19,"DB",2);
								Delay(2000);
								AMP=~5;
								}
						break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 2:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 3:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 4:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				}
	}	
}
/************************************************************************
*
*
*							以下为复用数字键7
*					选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
*                 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/	
void Key7Func()
{
	if(Confirm==3)
	{
				switch(Menu)				   //选择子菜单进入
				{
				case 1:
						switch(SubMenu)
						{
						case 1:
						break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 2:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 3:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 4:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				}
	}
}
/************************************************************************
*
*
*							以下为复用数字键8
*					选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
*                 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/	
void Key8Func()
{
	//按键代码
	if(Confirm==3)
	{
				switch(Menu)				   //选择子菜单进入
				{
				case 1:
						switch(SubMenu)
						{
						case 1:
						break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 2:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 3:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 4:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				}
	}	
}
/************************************************************************
*
*
*							以下为复用数字键9
*					选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
*                 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/	
void Key9Func()
{
	//按键代码
	if(Confirm==3)
	{
				switch(Menu)				   //选择子菜单进入
				{
				case 1:
						switch(SubMenu)
						{
						case 1:				  
		
						break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 2:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 3:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 4:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				}
	}		
}
/************************************************************************
*
*
*							以下为复用数字键0
*					选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
*                 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/	
void Key0Func()
{
	//按键代码
	if(Confirm==3)
	{
				switch(Menu)				   //选择子菜单进入
				{
				case 1:
						switch(SubMenu)
						{
						case 1:
						break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 2:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 3:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 4:
						switch(SubMenu)
						{
						case 1:break;
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				}
	}		
}
/************************************************************************
*
*
*							以下为复用键"STOP"
*							用于清除对应子菜单变量数据
*						    以及重新显示当前菜单条目提示
*
*
***************************************************************************/
void Key14Func() //	清除对应的子菜单的变量数据
{
	switch(Menu)				   //执行相关的操作
				{
				case 1:
						switch(SubMenu)
						{
						case 1:
								{
								Lcd_clear();
								Delay(200);
								Sub11Disp();	   //重新显示当前菜单提示
								Delay(200);
								}
						break;	 //进入菜单一的子菜单一确定后的操作
						case 2:
								{
								Lcd_clear();
								Delay(200);
								Sub12Disp();	   //重新显示当前菜单提示
								Delay(200);
								LowPass=0;
								}
						break;	 //进入菜单一的子菜单二确定后的操作
						case 3:
								{
								Lcd_clear();
								Delay(200);
								Sub11Disp();	   //重新显示当前菜单提示
								Delay(200);
								}
						break;	 //以下类似
						case 4: 
								{
								Lcd_clear();
								Delay(200);
								Sub11Disp();	   //重新显示当前菜单提示
								Delay(200);
								HighPass=0;
								}
						break;
						}
				break;
				case 2:
						switch(SubMenu)
						{
						case 1:break;	  //进入菜单二的子菜单一确定后的操作
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 3:
						switch(SubMenu)
						{
						case 1:break;	  //进入菜单二的子菜单一确定后的操作
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				case 4:
						switch(SubMenu)
						{
						case 1:break;	  //进入菜单二的子菜单一确定后的操作
						case 2:break;
						case 3:break;
						case 4:break;
						}
				break;
				}
}

/************************************************************************
*
*
*							以下为复用键"ENTER"
*							用于确认 执行相应的操作
*						    进入状态3后,就不动了
*							执行操作时应给出相应的提示信息
*
***************************************************************************/
void Key13Func()								  //确认键
{
	if(((MenuSelect==1)||(SubMenuSelect==1))&&Confirm<3)  //进入最后的菜单后就不动了
			{
			MenuSelect=0;
			SubMenuSelect=0;  
			Confirm++;
			}
	switch(Confirm)
	{
		case 1:
				switch(Menu)			   		//选择菜单进入
				{
				case 1:SubMenu1();break;	   //显示子菜单一的条目,以下类似
				case 2:SubMenu2();break;
				case 3:SubMenu3();break;
				case 4:SubMenu4();break;
				}
		break;		
		case 2:
				switch(Menu)				   //选择子菜单进入
				{
				case 1:
						switch(SubMenu)
						{
						case 1:Sub11Disp();break;  //进入菜单一的子菜单一后的内容
						case 2:Sub12Disp();break;  //类似
						case 3:Sub13Disp();break;
						case 4:Sub14Disp();break;
						}
				break;
				case 2:
						switch(SubMenu)
						{
						case 1:Sub21Disp();break;  //进入菜单二的子菜单以后的现实内容
						case 2:Sub22Disp();break;
						case 3:Sub23Disp();break;
						case 4:Sub24Disp();break;
						}
				break;
				case 3:
						switch(SubMenu)
						{
						case 1:Sub31Disp();break;
						case 2:Sub32Disp();break;
						case 3:Sub33Disp();break;
						case 4:Sub34Disp();break;
						}
				break;
				case 4:
						switch(SubMenu)
						{
						case 1:Sub41Disp();break;
						case 2:Sub42Disp();break;
						case 3:Sub43Disp();break;
						case 4:Sub44Disp();break;
						}
				break;
				}
				Confirm=3;
		break;
		case 3:	
				switch(Menu)				   //执行相关的操作
				{
				case 1:
						switch(SubMenu)
						{
						case 1:Sub11Op();SubConfirm=11;break;	 //进入菜单一的子菜单一确定后的操作
						case 2:Sub12Op();SubConfirm=12;break;	 //进入菜单一的子菜单二确定后的操作
						case 3:Sub13Op();SubConfirm=13;break;	 //以下类似
						case 4:Sub14Op();SubConfirm=14;break;
						}
				break;
				case 2:
						switch(SubMenu)
						{
						case 1:Sub21Op();SubConfirm=21;break;	  //进入菜单二的子菜单一确定后的操作
						case 2:Sub22Op();SubConfirm=22;break;
						case 3:Sub23Op();SubConfirm=23;break;
						case 4:Sub24Op();SubConfirm=24;break;
						}
				break;
				case 3:
						switch(SubMenu)
						{
						case 1:Sub31Op();SubConfirm=31;break;
						case 2:Sub32Op();SubConfirm=32;break;
						case 3:Sub33Op();SubConfirm=33;break;
						case 4:Sub34Op();SubConfirm=34;break;
						}
				break;
				case 4:
						switch(SubMenu)
						{
						case 1:Sub41Op();SubConfirm=41;break;
						case 2:Sub42Op();SubConfirm=42;break;
						case 3:Sub43Op();SubConfirm=43;break;
						case 4:Sub44Op();SubConfirm=44;break;
						}
				break;
				}
		break;
		case 4:break;
		case 5:break;
		case 6:break;
		case 7:break;
	}
}

/************************************************************************
*
*
*							以下为键"RESET"
*							清除所有数据	注意添加需要相应的清除数据
*						    
*
*
***************************************************************************/
void Key12Func()	 				//复位键 清除所有数据	注意添加需要相应的清除数据
{
	Lcd_clear();
	Delay(500);
	Disp_words(9,"正在初始化",5);
	Delay(50000);
	RootMenu();
	Confirm=0;
	Menu=0;
	SubMenu=0;
	HighPass=0;
	LowPass=0;
	Delay(200);

}
/************************************************************************
*
*
*							以下为键"上箭头"
*							回主菜单键 不清除数据
*						    
*
*
***************************************************************************/
void Key10Func()		 			 // 回主菜单键 不清除数据
{
 	Lcd_clear();
	Delay(500);
	Disp_words(9,"回到主菜单",5);
	Delay(50000);
	RootMenu();
	Confirm=0;
	Menu=0;
	SubMenu=0;
	Delay(200);
}

void Key11Func()
{}
void Key15Func()
{}
/***********************************
*
* 键盘中断程序
*
*************************************/
void Key_ISR() interrupt 0//中断接INT0
	{
		EA=0;
		KeyValue=ATMEL;
		KeyValue&=0x0f;
		switch(KeyValue)
		{
			case 0:Key0Func();break;
			case 1:Key1Func();break;
			case 2:Key2Func();break;
			case 3:Key3Func();break;
			case 4:Key4Func();break;
			case 5:Key5Func();break;
			case 6:Key6Func();break;
			case 7:Key7Func();break;
			case 8:Key8Func();break;
			case 9:Key9Func();break;
			case 10:Key10Func();break;
			case 11:Key11Func();break;
			case 12:Key12Func();break;
			case 13:Key13Func();break;
			case 14:Key14Func();break;
			case 15:Key15Func();break;
		}	 
	    EA=1;
	}






/***********************************
*
* ADC中断程序
*
*************************************/
void ADC_ISR() interrupt 6
{
unsigned char i;
unsigned long sum=0;
double res=0;
	   EA=0;
	   if((ChFr<210000)||(ChFr==210000))
		{
			if(Adctimes==10)
				{
				  Adctimes=0;
				  Lcd_clear();
				  Disp_words(1,"幅频特性",4);
				  for(i=0;i<10;i++)
				   	sum+=(Adcout[i]&0x0fff);
				   res=sum/16384.0;
				   Result[RSN]=res;
				   RSN++;
				   Disp_char(16,(unsigned char)res+48);
				   Disp_char(17,'.');
				   Disp_char(18,(unsigned char)(res*10)%10+48);
				   Disp_char(19,(unsigned char)(res*100)%10+48);
				   Disp_char(20,(unsigned char)(res*1000)%10+48);
				   Disp_char(21,(unsigned char)(res*10000)%10+48);
				   Disp_char(22,'V');
				   Disp_number(32,ChFr);
				   Disp_chars(40,"Hz",2);
				   Set_freq(ChFr);
				  ChFr=ChFr+10000;
				  Delay(40000);
				  }
			else
				  { 
				   Adcout[Adctimes]=ADCDATAH*256+ADCDATAL;
				   Adctimes++;
				  }
		}
		else EADC=0;
	   EA=1; 
}

/***********************************
*
* 	主程序
*
*************************************/

void main()	
{
	Lcd_initial();
	Delay(5000);
	RootMenu();
	IT0 = 1;                     //负边沿触发中断
	EX0 = 1;                     //允许外部中断
	PX0 = 1;          //键盘中断优先		   
	EA = 1;
	while(1);
}		  

⌨️ 快捷键说明

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