
连续取 20 次,其中有10 次,按的是这个键,有10 次,按的是那个键,
平均一下,判定结果:是按下了一个根本就没有按的键。
========
#include<reg52.h>键蔽
#include<intrins.h>
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 = 115i >0i--)
}
//--------------------------------------------
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 = 0k2 <9k2++) //稿锋州在表格中查找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]//显示键值
}
}
//--------------------------------------------
本程序未经验证,仅供参考。
震旦adc366可通过以下步骤进行扫描:1、在桌面新建一个文件夹,用鼠标右击新建的文件夹,点击“属性”,点击“共享”;
2、点击下拉选项,选择“Everyone”,点击“添加”,将 “Everyone”的权限级别设置为“读取/写入”,点击“共享”;
3、点击“完成”,点击“高级共享”,将“共享此文件夹”选项勾起,点击“权限”,勾选“完全控制”,点击“添加”;
4、点击“高级”,点击“立即查找”,将“Administrators”选中,点击“确定”,“Administrators”的权限均选择为“完全控制”,再点击“确定”;
5、在地址栏中输入MFP的IP地址,点击“目的地注册”,点击“新注册”,选择“SMB”,点击“确定”;
6、填写注册信息,点击“确认”,进行升竖计算机网络设置;
7、将原稿放在盖板里,电脑上打开Word文档,依次点击插入,图片,来自扫描仪或照相机改笑裤,自定义插入即可,另外其他标配带网络功能机器核简在面板上点击扫描按钮即可。
百倍用心,10分满意
看输脊启闭入,如果同一个按键被以诸如0.5秒这样的间隔不断发出来就可以认为是长按了更复杂的方法:键盘按下发出来一个scan
code,抬起来的时樱裂候还会发出另外一个值.当然这样弄起旁扮来
非常底层,非常复杂
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)