旋钮编码器c代码_求旋转编码器c程序
编码器涵盖很多种类,不知你具体要求的哪种?我也曾折腾过一段时间EC11型的,给你个从网上找来的,参考吧(在我板上能运行)
//通过编码开关(旋转编码器)控制数码管的加减一
#include
#define uchar unsigned char
#define uint unsigned int
#define cycle 1 //定义动作周期,编码器旋转多少格有效
#define NULL 0 //定义编码器不动作时的还回值
#define E_RIGHT 0x0e //定义右旋转还回值
#define E_LEFT 0x0f //定义左旋转还回值
/*=====数码管位及按键定义=====*/
sbit dula=P2^0; //数码管段选,锁存器控制信号
sbit wela=P2^1; //数码管位选,锁存器控制信号
sbit PINA = P1^0; //定义IO
sbit PINB = P1^1;
uchar WheelNow,WheelOld,RightCount,LeftCount;
/*=====0-9=====A-G=====*/
uchar a[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
//数码管显示编码
unsigned sled_bit_table[]={0x5f,0x6f,0x77,0x7b,0x7d,0x7e,0xff};
/*定义点亮的数码管与数组的关系*/
/*=====四个数码管显示数据存放处=====*/
uchar one,two,three,four;
uint wc=0;
/*=====函数定义=====*/
void delay(uint x);
void display(void);
//void key();
void led_analyze(uint i);
/*====延时函数=====*/
void delay(uint x)
{
uint i;
for(i=0;i
}
/*====显示函数=====*/
void display(void)
{
//送段码
dula=0;
P0 =a[one];
dula=1;
dula=0;
//数码管位选
wela=0;
P0=sled_bit_table[0]; //开显示
wela=1;
wela=0;
delay(200); //调用键盘扫描
wela=0;
P0=sled_bit_table[6];
wela=1;
wela=0; //关显示
dula=0;
P0=a[two];
dula=1;
dula=0;
//数码管位选
wela=0;
P0=sled_bit_table[1]; //开显示
wela=1;
wela=0;
delay(200); //调用键盘扫描
wela=0;
P0=sled_bit_table[6];
wela=1;
wela=0; //关显示
dula=0;
P0=a[three];
dula=1;
dula=0;
//数码管位选
wela=0;
P0=sled_bit_table[2]; //开显示
wela=1;
wela=0;
delay(200); //调用键盘扫描
wela=0;
P0=sled_bit_table[6];
wela=1;
wela=0; //关显示
dula=0;
P0=a[four];
dula=1;
dula=0;
//数码管位选
wela=0;
P0=sled_bit_table[3]; //开显示
wela=1;
wela=0;
delay(200); //调用键盘扫描
wela=0;
P0=sled_bit_table[6];
wela=1;
wela=0; //关显示
}
/*====分解显示数据=====*/
void led_analyze(uint i)
{
i=i%10000;
four=i/1000; // 千位
three=(i/100)%10; // 百位
two=(i%100)/10; // 十位
one=(i%100)%10; // 个位
}
//=================================================
uchar WheelRight()
{
LeftCount=0;
RightCount++;
if (RightCount>=cycle)
{
RightCount=0;
return(E_RIGHT);
}
else
return(NULL);
}
//=====================================================
uchar WheelLeft()
{
RightCount=0;
LeftCount++;
if (LeftCount>=cycle)
{
LeftCount=0;
return(E_LEFT);
}
else
return(NULL);
}
//=================================================================
uchar EncoderProcess()
{
uchar keytmp;
PINA = 1;
PINB = 1;
WheelNow=WheelNow<<1;
if (PINA==1) WheelNow=WheelNow+1; // 读 PINA
WheelNow=WheelNow<<1;
if (PINB==1) WheelNow=WheelNow+1; // 读 PINB
WheelNow=WheelNow & 0x03; // 将 WheelNow 的 2 - 7 位清零,保留 0 - 1 两个位的状态.
if (WheelNow==0x00) return(NULL); //当 PINA 和 PINB 都为低电平时退出,低电平区不做处理
keytmp=WheelNow;
keytmp ^=WheelOld; // 判断新读的数据同旧数据
if (keytmp==0) return(NULL); // 新读的数据同旧数据一样时退出.
if (WheelOld==0x01 && WheelNow==0x02)
{ // 是左旋转否
WheelOld=WheelNow;
return(WheelLeft()); //左旋转
}
else
if (WheelOld==0x02 && WheelNow==0x01)
{ // 是右旋转否
WheelOld=WheelNow;
return(WheelRight()); //右旋转
}
WheelOld=WheelNow; // 保存当前值
return(NULL); // 当 PINA 和 PINB 都为高电平时表示编码器没有动作,退出
}
//==========================================================================
void inc()
{
wc++;
if(wc>9999) wc=0;//如果WG大于9999则将它清零
led_analyze(wc);
} // 在此处设置断点看 num 加的变化
//====================================================================
void dec()
{
wc--;
if(wc>9999) wc=9999;
led_analyze(wc);
} // 在此处设置断点看 num 减的变化
//===========================================================================
void main()
{
while (1)
{
switch(EncoderProcess())
{
case E_RIGHT: inc(); break;
case E_LEFT: dec(); break;
}
display();
}
}
旋钮编码器c代码_求旋转编码器c程序相关推荐
- 旋钮编码器c代码_旋转编码器EC11驱动
旋转编码器EC11驱动 /*-------->>>>>>>>--------注意事项:EC11旋转编码器的扫描时间间隔控制在1~4ms之间, 否则5ms ...
- 旋钮编码器c代码_人脸合成效果媲美StyleGAN,而它是个自编码器
机器之心报道 参与:魔王 自编码器(AE)与生成对抗网络(GAN)是复杂分布上无监督学习最具前景的两类方法,它们也经常被拿来比较.人们通常认为自编码器在图像生成上的应用范围比 GAN 窄,那么自编码器 ...
- kmplayer安卓版外部编码器_求KMplayer编码器的设置教程
问题同上,谁有有关KMplayer的编码器设置教程?个人对编码器,滤镜什么的作用知道一点,但是在设置编码器时,完全搞不懂里面是什么东西,哪些有什么用,虽说KMplayer大部分格式不需要... 问题同 ...
- 编码器c语言斌编程,旋转编码器的编程思路
旋转编码器应用于角度定位或测量时,通常有A.B.Z三相输出.A相和B相输出占空比为50%的方波.编码器每转一周,A相和B相输出固定数目的脉冲.当编码器正向旋转时,A相比B相超前四分之一个周期;当编码器 ...
- 小程序开发代码_快速学会微信小程序开发,无需懂代码!
现在想要制作自己的小程序的人越来越多,但大多数都不懂任何代码知识,不知该如何制作.其实随着各种第三方开发工具的出现,无需微信小程序开发源代码,小白也能顺利生成一个自己的小程序了.下面我就跟大家说下该如 ...
- 旋钮编码器c代码_非常稳定的旋转编码器解码程序(C51源代码)
在网上下载过很多种编码器解码程序,使用后感觉都不够稳定,特别是旋转速度稍快时,经常会出现错误解码.为此,经过分析编码器输出波形特点,结合其它解码程序的优点,编写如下代码,不用中断,也可以不用定时器.经 ...
- java 模拟投票代码_求投票系统(Java源代码)
求投票系统(Java源代码) 关注:175 答案:3 mip版 解决时间 2021-02-02 21:06 提问者 侑點尐悲伤 2021-02-02 16:54 设计一个投票系统来进行调查.评选或 ...
- 台达编码器型号含义_台达编码器选型.doc
台达编码器选型 台达编码器选型 德国欧玛AUMA 德国ABB 德国西博思SIPOS 德国科宝KOBOLD 德国萨姆森SAMSON 德国ps 德国力士乐REXROTH 德国贺徳克HYDAC 德国德瑞EM ...
- 苹果手机通讯录java代码_求通讯录系统
求通讯录系统 老师要求我们做作业,题目是做一个同学通讯录系统,用java语言写. 功能:控制台上进行同学信息的增删改查,比如录入:张三,1365541646,上海,乒乓球.唱K:王五,12345455 ...
最新文章
- Java - PriorityQueue
- Linux给命令设置超时时间,Linux命令技巧和时间设置
- 富文本编辑器 java_Java开发之富文本编辑器TinyMCE
- Lua 语言 快速入门
- MySQL主从失败:slave_IO_Running为No
- 云原生应用Go语言:你还在考虑的时候,别人已经应用实践
- 数据库类型少_DELETE与DROP 在数据库中的使用方法和区别
- python蛇术_小蛇学python(16)numpy高阶用法
- Python爬虫番外篇之关于登录
- R语言之数据分析高级方法「时间序列」
- Sqlmap命令大全
- 漏洞扫描工具MySQL_五大著名的免费SQL注入漏洞扫描工具(2)
- 软件测试工程师职业规划
- 爬楼梯--每次只能走一步或者两步,但是不能连续走两步
- 编译原理基本定义(文法、算符文法、算符优先文法、算符优先关系表、算符优先分析过程)
- 微信小程序自定义tabbar底部菜单
- 4位超60岁程序员大爷的生存秘籍
- mysql之把查询的结果保存到新表
- log4j实现发送邮件功能
- Lua和Luajit的优势和不足(1)