15W401AS单片机
单个IO口ADC检测4个按键,采用ADC查询方式。
1,按键检测很不稳定,如何增加稳定性;
2,如何做到松键有效的功能;
P1M1 = 0x83;
P1M0 = 0x00;
while(set_state ==0)
{
//CTR按键检测---------------
key_vol = GetADCResult_key()*100; //按键电压放大100倍
//reset = 375
if(key_vol>365 && key_vol<385) //reset按键
{
delay_us(10);
if(key_vol>365 && key_vol<385)
{ CTR = CTRoff;
state_cur = 0;
}
}
//set按键检测
if(key_vol>0 && key_vol<100)
//set = 0
{
delay_us(10);
if(key_vol>0 && key_vol<100)
{
set_state=1;
setplace=0;
}
}
//while(!key_vol>1 && key_vol<20);
} //默认状态结束
while(set_state==1)//设置状态
{
key_vol = GetADCResult_key()*100; //按键电压放大100倍
//k2-=335,k1+=252,set=0
if(setplace==0)
{
DisplayData[0]=0x31;//时间设置T00分钟
DisplayData[1]=DIG_CODE[set1/10%10];
DisplayData[2]=DIG_CODE[set1%10];
}
if(setplace==1)
{
DisplayData[0]=0x73;//检测功率阀值设置P00
DisplayData[1]=DIG_CODE[set2/10%10];
DisplayData[2]=DIG_CODE[set2%10];
}
if(setplace==2)
{
DisplayData[0]=0x39;//下降比例设置C00
DisplayData[1]=DIG_CODE[set3/10%10];
DisplayData[2]=DIG_CODE[set3%10];
}
if(setplace==3)
{
DisplayData[0]=0x3F;//过流功率设置
DisplayData[1]=0x3E;
DisplayData[2]=0x73;
DisplayData[3]=DIG_CODE[set4/100];
DisplayData[4]=DIG_CODE[set4/10%10];
DisplayData[5]=DIG_CODE[set4%10];
}
if(key_vol>240 && key_vol<265) //K1+按键设置
{
delay_us(10);
if(key_vol>240 && key_vol<265)
{
if(setplace==0)
{
set1++;
if(set1>10)
set1=10;
}
if(setplace==1)
{
set2++;
if(set2>20)
set2=20;
}
if(setplace==2)
{
set3++;
if(set3>99)
set3=99;
}
if(setplace==3)
{
set3++;
if(set3>150)
set3=150;
}
}
save();
while(key_vol>240 && key_vol<265);
}
if(key_vol>325 && key_vol<345) //K2-按键设置
{
delay_us(10);
if(key_vol>325 && key_vol<345)
{
if(setplace==0)
{
set1--;
if(set1<1)
set1=0;
}
if(setplace==1)
{
set2--;
if(set2<1)
set2=1;
}
if(setplace==2)
{
set3--;
if(set3<1)
set3=1;
}
if(setplace==3)
{
set4--;
if(set4<1)
set3=1;
}
}
save();
while(key_vol>325 && key_vol<345);
}
if(key_vol>0 && key_vol<100)
{
delay_us(10);
if(key_vol>0 && key_vol<100)
{
setplace++;
if(setplace>=4)
{
setplace=0;
set_state=0;//返回
}
}
while(key_vol>0 && key_vol<100);
}
} //参数设置结束
|