STC单片机 ADC按键 求助!!

STC单片机 ADC按键 求助!!,第1张

取那么多、那么长时间的平均值干什么?
连续取 20 次,其中有10 次,按的是这个键,有10 次,按的是那个键,
平均一下,判定结果:是按下了一个根本就没有按的键。
========
#include<reg52h>
#include<intrinsh>
unsigned char code k_AD[] = {
10, 40, 70, 100, 130, 160, 190, 210, 230};//九个按键所对应的ADC值
unsigned char code duan[] = { //共阳段码
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//--------------------------------------------
void delay(int x)
{
int i;
while(x--) for(i = 115; i > 0; i--);
}
//--------------------------------------------
unsigned char keyscan()
{
unsigned char k1, k2;
k1 = GetADCResult(0);//读出
if(k1 < 238) { //按下了
delay(20); //延时
k2 = GetADCResult(0); //再次读出
if((k1 > (k2 - 5) && (k1 < (k2 + 5)) { //两者相差无几
k1 /= 2; k2 /= 2; k1 += k2; //两次的平均值
for(k2 = 0; k2 < 9; k2++) //在表格中查找9次
if(k1 > (k_AD[k2]) - 5) && (k1 < (k_AD[k2]) + 5)) //找到了
return(k2); //就返回键值
}
}
return(255); //没有按键
}
//--------------------------------------------
void main()
{
unsigned char key;
while(1) {
key = keyscan();
if(key != 255) P0 = duan[key];//显示键值
}
}
//--------------------------------------------
本程序未经验证,仅供参考。

以上就是关于STC单片机 ADC按键 求助!!全部的内容,包括:STC单片机 ADC按键 求助!!、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9352474.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存