单片机------ADC------39---摇杆

/
ADC摇杆
ROCKER_Ser.h

#ifndef Rocker_Ser
#define Rocker_Ser

#define Rocker_KEY_NO 0
#define Rocker_KEY_S 1
#define Rocker_KEY_M 2
#define Rocker_KEY_L 3

sbit Rocker_MUTE=P4^7; //摇杆电位器按键
//ADC 1.0 ADC1.1

extern void Rocker_Init(); //摇杆初始化

extern void Rocker_Read_Data_Ser(); //摇杆读取按键和ADC值

extern u8 xdata Rocker_Read_Buffer[5]; //摇杆读取的数据,上,下,左,右,按键长短

#endif
/
摇杆自带的按键,长按短按处理
#include <all.h>

u8 xdata Rocker_Read_Buffer[5];

void ROTARY_Key_Scan_Drive()
{
static bit flag1=0; //长按标志位
static bit flag2=1; //按键释放标志位,防止多次判断成长按
static bit key_down=0;
static u8 count1=0;
static u16 count2=0;
if(key_down1) //E 如果进入到状态1
{
count2 ;
if(count2>=5000) //F 如果按键持续按了很长时间
{
count2=0;
if(flag21) //如果上次长按后有过释放,如果没有释放就说明是按住不放,不再做判断。 这里面没有释放
就不做判断。flag2=1是按键释放标志位。只有长按后,做过一次按键释放判断,然后赋值,
才能进入下次长按判断,不然会有多次长按判断。需要按键释放后给一次值 。
{
flag1=1; //长按标志位,表示已经判断为长按
flag2=0;
ROTARY_Read_Data_Rotary ; //计数器,方便用数码管等显示示数
ROTARY_Read_Data_Key=ROTARY_KEY_L; //判断为长按,然后跳出
}
}

// 下面是按键释放后的一些判断    if(ROTARY_MUTE==1)// 如果按键释放    {key_down=0;//状态清0,下次循环不再进入flag2=1;                                               //长按之后的释放,如果不写就会连续判断为多次长按count2=0;//把长延迟count2清0if(flag1){flag1=0;//不判断是不是短按了,直接跳出}else{ROTARY_Read_Data_Rotary  ;ROTARY_Read_Data_Key=ROTARY_KEY_S;              //判断为短按,然后跳出}    }}

//下面的程序是判断按键有没有被按过 E如果没有进入到状态1
else
{
if(ROTARY_MUTE0) //A 如果按键按下
{
count1 ;
if(count1>100) //B稍微延迟下,避免抖动影响判断
{
count1=0;
if(ROTARY_MUTE0) //C如果按键确认按下

{key_down=1;// D进入到状态1}}}else//A按键没有按下{count1=0;                                      //D进入到状态0}}

}
/
摇杆初始化,初始化ADC

void Rocker_Init()
{
ADC_Init();
Rocker_Mute=1;

}
/
摇杆读取按键和ADC值
void Rocker_Read_Data_Ser()
{
static xdata u8 count=0;
count ;
Rocker_Key_Scan_Drive(); //扫描一下按键函数
switch(count%0)
{
case 1:
{
ADC_Write_Data=0x00; //两路ADC分时读取
ADC_Read_Data_Drive(); //控制ADC通道0 ,读取ADC值
if(ADC_Read_Data>=140) //如果大于一半多一点
{
Rocker_Read_Buffer[0]=ADC_Read_Data -140; //差值 给数组0
Rocker_Read_Buffer[1]=0; //清对象数组1

}else if(ADC_Read_Data<=120)                                           //如果小于一半少一点{Rocker_Read_Buffer[0]=0;                                             //清对象数组0Rocker_Read_Buffer[1]=120-ADC_Read_Data;            //差值给数组1       }else{Rocker_Read_Buffer[0]=0;                                       //摇杆在中间,清0Rocker_Read_Buffer[1]=0;                                      //摇杆在中间,清0}break;}case 125:{ADC_Write_Byte=0x01;ADC_Read_Data_Drive();if(ADC_Read_Byte>=140){Rocker_Read_Buffer[2]=ADC_Read_Byte-140;Rocker_Read_Buffer[3]=0;}else if(ADC_Read_Byte<=120){Rocker_Read_Buffer[2]=0;Rocker_Read_Buffer[3]=127-ADC_Read_Byte;}else{Rocker_Read_Buffer[2]=0;Rocker_Read_Buffer[3]=0;}

来源:https://www.icode9.com/content-4-866801.html

(0)

相关推荐

  • 一天一个设计实例-矩阵开关的应用

    矩阵键盘又叫行列式键盘.用带IO口的线组成行列结构,按键设置在行列的交点上.例如用4×4的行列式结构可以构成16个键的键盘.这样,当按键数量平方增长时,I/O口只是线性增长,这样就可以节省I/O口.矩 ...

  • 【电路“芯”说】单片机ADC扩展

    早在几天前,我写了一篇关于单片机IO口扩展的文章,接着有网友和我来讨论关于ADC扩展的问题了,关于这个问题,这篇文章有详细的讨论.单片机ADC为何要扩展现在的主流MCU都内置了不止一个多通道的ADC, ...

  • 太秀了!单片机内置ADC实现高分辨率采样?

    https://m.toutiao.com/is/JEFk8D4/ [导读] 相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想到采用一个较高位数的外置ADC ...

  • 72岁春上村树跑步39年!为啥不伤膝?七点您做到了吗?

    72岁日本著名作家春上村树跑步39年,还出版了一部跑步著作,却从未伤膝 想跑初跑的亲们,一直有朋友私信,问跑步如何才能不伤膝盖? 亲,鹏叔可以肯定地告诉您:正确跑步,适量跑步不仅不会伤害膝盖,而且对膝 ...

  • 不愧是好老师,把全国985大学(39所)...

    不愧是好老师,把全国985大学(39所),全部手写了出来,用来激励自己的学生,全班一半都考上了.家长们让孩子看一看,考一所本省的985也是一个不错的选择--#教育微头条# #师者说# #教育那些事#

  • 怎么理解单点对焦和多点对焦?9点、21点、39点对焦有什么区别?

    相机中的单点对焦.9点.21点.39点对焦这一块内容,属于自动对焦区域的内容,初学者对这块内容不理解,主要是因为没有把自动对焦区域和自动对焦模式这两块内容结合起来看.在实际拍摄过程中,一般是先根据拍摄 ...

  • “楼宇经济”稳步增长!青岛39座“亿元楼”集聚高端要素

    "亿元楼"是指单体税收过亿的商务楼宇, "亿元楼"的数量是衡量区域发展程度. 高端要素聚集能力的直观标准. 目前市南区.市北区.李沧区"亿元楼&quo ...

  • 1918年,39岁的李叔同在杭州出家。第...

    1918年,39岁的李叔同在杭州出家.第三天,他的妻子带着2个儿子,在寺庙外长跪不起,磕头4小时,头上鲜血直流,只求见他一面.可李叔同却托人带话:不见.   李叔同出家后的法号,是弘一,后来,他的确成 ...

  • 练笔冯振七绝56法之37、38、39、40。

    练笔冯振七绝56法之37.38.39.40. 甜蜜告白 你的每一次鼓励都让我信心满满,你的每一次微笑都让我久久难忘,你的每一次经过,都让我心潮澎湃. 冯振七绝56法之三十七法 (一)童儿赖学 隔邻无赖 ...

  • 世界卵巢癌日∣“沉默杀手”致患者五年生存率仅39%,全病程管理更重要

    今天是第九个世界卵巢癌日,"中国抗癌协会妇科肿瘤科普基地专家委员会成立暨2021年中国卵巢癌科普防治患者关爱行动"全国启动会上传出消息:卵巢癌是严重威胁女性生命健康的三大恶性肿瘤之 ...

  • 【男,39岁,小兄弟不中用,易秒泄】平日...

    [男,39岁,小兄弟不中用,易秒泄]平日腹胀.屁多.便秘,烦躁,失眠,口渴,记性差,转头就忘事,没走几步路就觉得气息跟不上,心慌胸闷,腰部酸痛,整天头晕目眩.舌淡苔白. 分析:心肾两虚 取方:党参.茯 ...