📄 key.c
字号:
#include "global.h"
#include "key.h"
//获取键值程序
unsigned char Key_Process(void)
{
Up_Key=1; Down_Key=1; //初始值
_nop_();_nop_();
if(!Up_Key) //如果上键按下了
{
if(Down_Key) //第一种情况
{
Delay_ms(20);//去抖动
if(!Up_Key)//现在键值还是一样的话
{
Key_Down=1;//按下了
Data_Change=0;//表示关键数据无改变了
Count_5s=0;//用于计数5秒时间的,5秒到后才存数据
Auto_Search_Flag=0;
Count_500ms=0;
Add_Process(); //加键处理程序
if(Mode==0) //在频率设置模式下时
VolSet(Volume/2+19);//不要太大声了
// if(Mode==0) //在频率设置模式下时
// {
// Tuner_Preset (False,True,Low,gdwPresetVCO);
// }
while(!Up_Key)//判断是否有松键
{
if(Long_Click==1)//长按成功了,用于手动设置频率的
{
if(Auto_Search_Flag==0)//如果不在自动搜频模式时
{
if(CountTime_Key>40)
{
CountTime_Key=0;
Add_Process(); //加键处理程序
// if(Mode==0) //在频率设置模式下时
// Tuner_Preset(False,True,High,gdwPresetVCO);
WatchDog;//喂狗
}
}
else //在自动搜索状态了,计时成功了
{
Autosearch_Up();
while(!Up_Key)//判断是否有松键
{
WatchDog;//喂狗
}
break;
}
}
WatchDog;//喂狗
}
Key_Down=0;//没按下
Long_Click=0;//清长按
//Count_500ms=0;
CountTime_Key=0;//清长按时间的
Count_Auto_Search=0;//清自动搜索的计时
//Auto_Search_Flag=0;
Data_Change=1;//表示关键数据有改变了
if(Mode==0)
{
Delay_ms(200);//稍作延时
VolSet(Volume+19);//还原应有的声音
}
return 0;
}
}
}
else
{
if(!Down_Key) //如果下键按下了 //第二种情况
{
Delay_ms(20);//去抖动
if(!Down_Key)//现在键值还是一样的话
{
Key_Down=1;//按下了
Count_5s=0;//用于计数5秒时间的,5秒到后才存数据
Data_Change=0;//表示关键数据无改变了
Auto_Search_Flag=0;
Count_500ms=0;
Dec_Process(); //减键处理程序
if(Mode==0) //在频率设置模式下时
VolSet(Volume/2+19);//不要太大声了
// if(Mode==0) //在频率设置模式下时
// {
// Tuner_Preset (False,True,Low,gdwPresetVCO); // Preset to searched station 0301 mao
// }
while(!Down_Key)//判断是否有松键
{
if(Long_Click==1)//长按成功了
{
if(Auto_Search_Flag==0)//如果不在自动搜频模式时
{
if(CountTime_Key>30)
{
CountTime_Key=0;
Dec_Process(); //减键处理程序
// Tuner_Preset(False,True,High,gdwPresetVCO);
WatchDog;//喂狗
}
}
else //在自动搜索状态了,计时成功了
{
Autosearch_Down();
WatchDog;//喂狗
while(!Down_Key)//判断是否有松键
{
WatchDog;//喂狗
}
break;
}
}
WatchDog;//喂狗
}
Key_Down=0;//没按下
//Count_500ms=0;
Long_Click=0;//清长按
CountTime_Key=0;//清长按时间的
Count_Auto_Search=0;//清自动搜索的计时
Data_Change=1;//表示关键数据有改变了
if(Mode<2)//在频率与音量模式 下时,在音量执行减少音量时,会有噪音,这是为了去噪音的
{
Delay_ms(200);//稍作延时
VolSet(Volume+19);//还原应有的声音
}
return 0;
}
}
else
{
Up_Key=0;
if(!Down_Key)//下键按下了//第三种情况功能切换键
{
Up_Key=1; Down_Key=0;
if(!Up_Key)
{
Delay_ms(20);//去抖动
if(!Up_Key)//现在键值还是一样的话
{
Mode++; //显示状态的切换
if(Mode>4) Mode=0;
}
}
while(!Up_Key&&!Down_Key)//判断是否有松键
{
WatchDog; //喂狗
}
// AutoS_LongClick=0;//清自动搜频长按开始计数标志
// Count_Auto_Search=0;// 清自动搜频长按计数标志
Data_Change=1;//有关键数据改变标志
return 0;
}
}
}
//第三种情况*********************
Band=1;
_nop_();_nop_();
if(Band==0)
{
Delay_ms(20);//去抖动
if(Band==0) //还有键按下
{
Band_Data++;
Count_5s=0;//用于计数5秒时间的,5秒到后才存数据
Data_Change=0;//表示关键数据无改变了
if(Auto_Search_Flag==1)
Auto_Search_Flag=0;
if(Band_Data>1)
Band_Data=0;//切换回默认状态
Band_Change(Band_Data);//波段数据转换
}
while(Band==0) //判断是否有松键
{
WatchDog; //喂狗
}
Data_Change=1;//有关键数据改变标志
return 0;
}
return 0;
}
//加键程序
void Dec_Process(void)
{
switch(Mode)//显示切换
{
case 0: {
gdwPresetVCO=gdwPresetVCO-STEP;
if(Band_Data==0)//是高高波段了
{
if(gdwPresetVCO<Min_FreqH)
gdwPresetVCO=Max_FreqH;
}
else //是低波段了
{
if(gdwPresetVCO<Min_FreqL)
gdwPresetVCO=Max_FreqL;
}
Frequency_Change(gdwPresetVCO);
WatchDog;
Tuner_Preset (False,True,Low,gdwPresetVCO);//向5767发码
// Radio_Mode=1;//使能手动搜频功能
}
break;
case 1: {
if(Volume)
{
Volume--;
VolSet(Volume+19);
}
else
VolSet(0);//不出声音了
Volume_Change(Volume);
}
break;
case 2:{
Delay_s=Delay_s-1;
if(Delay_s<10) Delay_s=250;
Delays_change(Delay_s);
}
break;
case 3: {
District=District-1;
if(District<1)District=128;
District_Change(District);
}
break;
case 4: {
Node=Node-1;
if(Node<1) Node=255;
Node_Change(Node);
}
break;
default: break;
}
}
//减键程序
void Add_Process(void)
{
switch(Mode)//显示切换
{
case 0: {
gdwPresetVCO=gdwPresetVCO+STEP;
if(Band_Data==0)//是高波段了
{
if(gdwPresetVCO>Max_FreqH)
gdwPresetVCO=Min_FreqH;
}
else //是低波段了
{
if(gdwPresetVCO>Max_FreqL)
gdwPresetVCO=Min_FreqL;
}
//gdwPresetVCO+=STEP;
Frequency_Change(gdwPresetVCO);
WatchDog;
Tuner_Preset (False,True,Low,gdwPresetVCO);//向5767发码
// Radio_Mode=1;//使能手动搜频功能
}
break;
case 1: {
//Volume=Volume+1;
if(Volume<68) Volume++;
Volume_Change(Volume);
VolSet(Volume+19);
}
break;
case 2: {
Delay_s=Delay_s+1;
if(Delay_s>250) Delay_s=10;
Delays_change(Delay_s);
}
break;
case 3:{
District=District+1;
if(District>128)
District=1;
District_Change(District);
}
break;
case 4:{
Node=Node+1;
if(Node==0) Node=1;
Node_Change(Node);
}
break;
default: break;
}
}
/*
void Radio_Process(void)
{
//uchar vol;
//vol=(uchar)Volume/2;
switch(Radio_Mode)
{
case 1:{
Tuner_Preset(False,False,High,gdwPresetVCO);
}
break; //手动搜台
case 2:break;
case 3:break;
default: break;
}
Radio_Mode=0;//清搜台功能
}
*/
bit SearchDelayMs(unsigned int Time)
{
unsigned char i;
while( --Time != 0)
{
for(i = 0; i < 125; i++); //i 从0加到125,CPU大概就耗时1 毫秒 。
WatchDog;
if((Time%20)==0)//大约20ms检测一次
{
if((Up_Key!=1)||(Down_Key!=1))//如果有按下时,表示有人为的停下要求了
// {
// WatchDog;
//
// }
return 1;//表示有键按下了
}
}
return 0;//无键按下了
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -