说明:我有一个带位置限制的编码器,里面是一个滑动变阻器,我通过AD采样到的值是0X00-0XFF,我想通过旋转编码器改变某个范围内的数值,比如30-80,但我不想直接映射,因为这样会出现调一小幅度,数值变化较大的情况。

所以我想:

1.向上旋转,数据++,方向为上,在方向为上时,不理会向下旋转的动作。

2.向下旋转,数据--,方向为下,在方向为下时,不理会向上旋转的动作。

typedef volatile unsigned char BYTE;
typedef volatile unsigned int WORD;#define n_KEY_DEALY_TIME 20//1S
#define n_KEY_UP   1
#define n_KEY_DWON 2#define n_AD_STOP_WAVE 1//抑制AD波动值#define ORIGINAL_DATA_MAX 245//对AD限定一下范围,防止器件老化
#define ORIGINAL_DATA_MIN 5//对AD限定一下范围,防止器件老化
#define LEFT_SHIFT_N 3BYTE D_changeData;//需要改变的值BYTE D_adGetFromKey;//通过编码器获取的AD值,范围0X00-0XFF,如果觉得有波动可以多次取值求平均BYTE D_ADwave;//抑制AD波动的中间值BYTE D_ADthis;
BYTE D_ADlast;
BYTE D_UPcnt;
BYTE D_DOWNcnt;BYTE KEY_DEAL();//每隔50ms进来一次
void KEY_DELAY_DEC();
BYTE MAP(BYTE dat,BYTE targetMax,BYTE targetMin);void main()
{BYTE key;while(1){if(f_50ms){f_50ms=0;key = KEY_DEAL();if(key==n_KEY_UP)D_changeData++;//这里可以根据自己的需要调整最大最小范围及步长else if(key==n_KEY_DOWN)D_changeData--;}}
}BYTE KEY_DEAL()//每隔50ms进来一次
{BYTE D_ADnow,D_keyCode,dat;D_keyCode=0KEY_DELAY_DEC();dat = D_adGetFromKey;if(dat>D_ADwave){if(dat-D_ADwave>n_AD_STOP_WAVE)D_ADwave=dat;else dat = D_ADwave;}else{if(D_ADwave-dat>n_AD_STOP_WAVE)D_ADwave=dat;else dat = D_ADwave;}D_ADnow = MAP(dat,24,0);//改变下AD的范围D_ADthis = D_ADnow;if(D_ADthis != D_ADlast){if(D_ADthis>D_ADlast){if(D_DOWNcnt==0){D_UPcnt = n_KEY_DEALY_TIME;D_keyCode = n_KEY_UP;}else{D_DOWNcnt = n_KEY_DEALY_TIME;}}else{if(D_UPcnt==0){D_DOWNcnt = n_KEY_DEALY_TIME;D_keyCode = n_KEY_DOWN;}else{D_UPcnt = n_KEY_DEALY_TIME;}}}   D_ADlast = D_ADthis;return D_keyCode;
}BYTE MAP(BYTE dat,BYTE targetMax,BYTE targetMin)
{WORD start,end,middle,target;WORD start1,end1,middle1;target = dat;if(target >= ORIGINAL_DATA_MAX){return targetMax;}if(target <= ORIGINAL_DATA_MIN){return targetMin;}target -= ORIGINAL_DATA_MIN;start = 0;end = ORIGINAL_DATA_MAX-ORIGINAL_DATA_MIN;start1 = 0;end1= targetMax-targetMin;end1 <<= LEFT_SHIFT_N;while((start != end) && (start+1 < end)){middle = (start+end)>>1;middle1 = (start1+end1)>>1;if(middle <= target){start = middle;start1 = middle1;}else{end = middle;end1 = middle1;}}start1>>=LEFT_SHIFT_N;return ((start1+targetMin)&0X00FF);
}void KEY_DELAY_DEC()
{if(D_UPcnt)D_UPcnt--;if(D_DOWNcnt)D_DOWNcnt--;
}

通过AD旋钮(编码器)改变数据,C语言实现相关推荐

  1. R语言ggplot2可视化自定义多个图例(legend)标签之间的距离实战(例如,改变数据点颜色和数据点大小图例之间的距离)

    R语言ggplot2可视化自定义多个图例(legend)标签之间的距离实战(例如,改变数据点颜色和数据点大小图例之间的距离) 目录

  2. R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战

    R语言attributes函数(获取属性.设置属性).attr函数(改变一个属性).structure函数(改变数据形状)实战 目录

  3. 数据操作语言DML及数据定义语言DDL的区别

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 数据操作 ...

  4. DDL语言(数据定义语言)

    文章目录 前言 一.库的管理 1.库的创建 2.库的修改 3.库的删除 二.表的管理 1.表的创建 2.表的修改 3.表的删除 4.表的复制 测试 前言 数据定义语言主要包括库和表的管理. 一.库的管 ...

  5. 3000门徒内部训练绝密视频(泄密版)第1课:大数据最火爆语言Scala光速入门

    大数据最火爆语言Scala光速入门 scala 可以使用java的库 scala 的工厂方法:apply 条件表达式有返回值 数组可以用to ,箭头 <- 最后一行内容的值是整个代码块的返回值 ...

  6. SQL中数据定义语言和数据操作语言的详细讲解

    我前面一篇博客讲解了什么是数据库中数据的定义语言和操作语言,接下来我们就详细讲解下 首先是数据的定义语言 1.CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库. S ...

  7. SQL中数据操作语言 (DML) 和数据定义语言 (DDL)

     可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法.但是 SQL 语言也包含用于更新.插入和删除记录的语法. ...

  8. Flux数据脚本语言

    官方文档:Flux data scripting language | InfluxDB Enterprise 1.9 Documentation 目录 1.Flux设计原则 2.启用Flux 3.执 ...

  9. 在 Ubuntu 上通过命令行改变 Linux 系统语言

    这是一个快速教程,展示了在 Ubuntu 和其他 Linux 发行版上从命令行改变语言的步骤. 事实上,我一直在写西班牙语的文章.如果你没有访问过它并且/或你是一个讲西班牙语的人,请访问 It's F ...

最新文章

  1. SAP 启用了HUM和QM的前提下,无法对采购订单的收货在质量放行前执行部分退货!
  2. php mysql 时间戳查询_mysql中时间查询函数(包括时间戳)
  3. CTF-压缩包套娃爆破脚本
  4. Python TCP聊天器
  5. Django框架(展示图书信息简易版)
  6. .sh文件是什么语言_关于Linux文件的一些基本命令和知识:
  7. 如何避免腾讯云彻底搞丢“天价数据”事件再次发生?
  8. flink sql设置并行度_Flink原理——任务调度原理
  9. 【ICML2019】Set Transformer:置换不变的注意力神经网络框架
  10. python人工智能-图像识别
  11. Jmeter+badboy
  12. 机器人语音---走进优必选
  13. linux系统怎么拨号上网,如何在Linux操作系统下ADSL拨号上网?
  14. 工业级手持式扫描仪3d扫描首选迪万科技抄数服务
  15. 如何出一幅具有三维立体显示的地形示意图
  16. 对 Python 代码使用的词语标记化器 tokenize,你懂了吗?【Python|标准库|tokenize】
  17. 如何将Sublime Text 4 设置成中文版
  18. sqlitespy可以打开MySQL吗_sqlitespy下载
  19. linux查找模糊文件位置,linux模糊查找文件用什么命令比较好
  20. babel-plugin-transform-remove-consol插件的安装及使用(作用是移除代码里的所有console.log())

热门文章

  1. 电视派显示服务器没给数据,创维\酷开电视一些常见问题解答
  2. 高端响应式电子商务网源码
  3. 教案设计计算机,认识计算机教案设计
  4. oracle穿越网闸,使Oracle穿越防火墙
  5. 数据结构与算法概念解析
  6. 搭建量化系统|股票数据的除权和复权
  7. 什么是国土空间规划的“双评价”?
  8. PDF文件怎么复制页面,复制页面工具使用方法
  9. 建行u盾弹不出来_关于建设银行网银的问题```
  10. GVP(Go 领域最具价值专家) 群像终揭晓,附竞猜获奖名单