使用模数转换读取按键可以节省IO。 在一个模拟输入上,按键与不同的电阻器相连,方式是按下不同的按键可以导致模拟输入读取的电压值不同,从而可以检测到特定的按键。 |
汽车方向盘按键大多采用这种单线多开关结构,思路与原理没有问题,消抖要考虑,最好加小电容硬件消拌 |
程序思想应没问题,就是消抖,抗干扰怎么处理,另K值没计算.不好说是否正确 |
u8 xdata ADC_Read_Data=0; u8 xdata ADC_Write_Data=0;//0~7 void ADC_Init() { P1M1|=0x03; P1M0&=0xfc; P1ASF|=0x03; CLK_DIV&=0xdf; ADC_RES=0; } void ADC_Read_Data_Drive() { ADC_RES=0; ADC_CONTR=0xe8|ADC_Write_Data; while(1) { if(ADC_CONTR&0x10)//不等于0 { ADC_Read_Data=ADC_RES; break; } } ADC_CONTR=0; } 使用单片机P1.2口的ADC转换,得到ADC转换结果0~255.然后确定在某个ADC范围是某个按键。比如 你图纸的k1,对应的ADC值可以设定为0~50.那么 90~150 可以认为是K2 |