编码器涵盖很多种类,不知你具体要求的哪种?我也曾折腾过一段时间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程序相关推荐

  1. 旋钮编码器c代码_旋转编码器EC11驱动

    旋转编码器EC11驱动 /*-------->>>>>>>>--------注意事项:EC11旋转编码器的扫描时间间隔控制在1~4ms之间, 否则5ms ...

  2. 旋钮编码器c代码_人脸合成效果媲美StyleGAN,而它是个自编码器

    机器之心报道 参与:魔王 自编码器(AE)与生成对抗网络(GAN)是复杂分布上无监督学习最具前景的两类方法,它们也经常被拿来比较.人们通常认为自编码器在图像生成上的应用范围比 GAN 窄,那么自编码器 ...

  3. kmplayer安卓版外部编码器_求KMplayer编码器的设置教程

    问题同上,谁有有关KMplayer的编码器设置教程?个人对编码器,滤镜什么的作用知道一点,但是在设置编码器时,完全搞不懂里面是什么东西,哪些有什么用,虽说KMplayer大部分格式不需要... 问题同 ...

  4. 编码器c语言斌编程,旋转编码器的编程思路

    旋转编码器应用于角度定位或测量时,通常有A.B.Z三相输出.A相和B相输出占空比为50%的方波.编码器每转一周,A相和B相输出固定数目的脉冲.当编码器正向旋转时,A相比B相超前四分之一个周期;当编码器 ...

  5. 小程序开发代码_快速学会微信小程序开发,无需懂代码!

    现在想要制作自己的小程序的人越来越多,但大多数都不懂任何代码知识,不知该如何制作.其实随着各种第三方开发工具的出现,无需微信小程序开发源代码,小白也能顺利生成一个自己的小程序了.下面我就跟大家说下该如 ...

  6. 旋钮编码器c代码_非常稳定的旋转编码器解码程序(C51源代码)

    在网上下载过很多种编码器解码程序,使用后感觉都不够稳定,特别是旋转速度稍快时,经常会出现错误解码.为此,经过分析编码器输出波形特点,结合其它解码程序的优点,编写如下代码,不用中断,也可以不用定时器.经 ...

  7. java 模拟投票代码_求投票系统(Java源代码)

    求投票系统(Java源代码) 关注:175  答案:3  mip版 解决时间 2021-02-02 21:06 提问者 侑點尐悲伤 2021-02-02 16:54 设计一个投票系统来进行调查.评选或 ...

  8. 台达编码器型号含义_台达编码器选型.doc

    台达编码器选型 台达编码器选型 德国欧玛AUMA 德国ABB 德国西博思SIPOS 德国科宝KOBOLD 德国萨姆森SAMSON 德国ps 德国力士乐REXROTH 德国贺徳克HYDAC 德国德瑞EM ...

  9. 苹果手机通讯录java代码_求通讯录系统

    求通讯录系统 老师要求我们做作业,题目是做一个同学通讯录系统,用java语言写. 功能:控制台上进行同学信息的增删改查,比如录入:张三,1365541646,上海,乒乓球.唱K:王五,12345455 ...

最新文章

  1. Java - PriorityQueue
  2. Linux给命令设置超时时间,Linux命令技巧和时间设置
  3. 富文本编辑器 java_Java开发之富文本编辑器TinyMCE
  4. Lua 语言 快速入门
  5. MySQL主从失败:slave_IO_Running为No
  6. 云原生应用Go语言:你还在考虑的时候,别人已经应用实践
  7. 数据库类型少_DELETE与DROP 在数据库中的使用方法和区别
  8. python蛇术_小蛇学python(16)numpy高阶用法
  9. Python爬虫番外篇之关于登录
  10. R语言之数据分析高级方法「时间序列」
  11. Sqlmap命令大全
  12. 漏洞扫描工具MySQL_五大著名的免费SQL注入漏洞扫描工具(2)
  13. 软件测试工程师职业规划
  14. 爬楼梯--每次只能走一步或者两步,但是不能连续走两步
  15. 编译原理基本定义(文法、算符文法、算符优先文法、算符优先关系表、算符优先分析过程)
  16. 微信小程序自定义tabbar底部菜单
  17. 4位超60岁程序员大爷的生存秘籍
  18. mysql之把查询的结果保存到新表
  19. log4j实现发送邮件功能
  20. Lua和Luajit的优势和不足(1)

热门文章

  1. nessus扫描报告英文转中文脚本1009
  2. 如何用css适配iphoneX底部横条?!?
  3. 学会这个图片格式转换技巧,原来PNG转JPG格式这么简单
  4. Google排名新算法之二
  5. AlexNet、VGG、GoogleNet学习笔记
  6. 【算法分析zxd】第 8 章 动态规划
  7. 数据结构 第一章(学习笔记)
  8. 浅析UGC、PGC和OGC
  9. 如何加密你的MC9S12(X)设备
  10. VM虚拟机安装凝思磐石系统(图形化界面)