📄 main.c
字号:
}
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 + -