编码旋钮资料

上传人:新** 文档编号:487296553 上传时间:2023-04-16 格式:DOCX 页数:28 大小:2.79MB
返回 下载 相关 举报
编码旋钮资料_第1页
第1页 / 共28页
编码旋钮资料_第2页
第2页 / 共28页
编码旋钮资料_第3页
第3页 / 共28页
编码旋钮资料_第4页
第4页 / 共28页
编码旋钮资料_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《编码旋钮资料》由会员分享,可在线阅读,更多相关《编码旋钮资料(28页珍藏版)》请在金锄头文库上搜索。

1、通过输出波形图可知每个运动周期的时序为顺时针运动逆时针运动A B1 10 10 01 0A B1 11 00 00 1静止状态为11 或00, A异或B的结果为0(注1)单片机可利用定时器中断来检测A和B的状态,中断时间在520ms之间均可。当检测到AB = 0时,表示为静止状态,记下A和B的状态。当检测到AB = 1时,表示有转动,读取AB的状态,如果AB是从11到01或者是从00到10则为正转,反之如果AB是从11到10或者是从00到01则为反转。此方法比较简单可靠,可以检测转动一格又可以检测快速转动。注1: 异或运算 异或的运算方法是一个二进制运算,C语言中用AB表示A异或B: 11=0

2、00=010=101=1两者相等为0,不等为1.也许是屎上最简单的旋转编码器程序, 占用一个外中断#define ROTATE_A PIND.2#define ROTATE_B PIND.3uchar CW=0;uchar CCW=0;/ External Interrupt 0 service routineinterrupt EXT_INT0 void ext_int0_isr(void)if(ROTATE_A!=ROTATE_B) CW+; else CCW+;void main(void) if (CW|CCW)!=0) DATA=DATA+CW-CCW; CW=0; CCW=0; d

3、elay_ms(50);/占用一个外中断,电平变化触发,CW是顺时针转过的脉冲,CCW是逆时针每50ms处理一下数值,如果想要出错,起码脉冲时间要比50ms/256短才行,手指是没可能达到这速度实际应用中感觉很爽/*/旋转编码器脉冲计数程序,在8051上通过外部中断0实现/特别说明:适应于旋转编码器脉冲频率较低的场合(对于12MHz晶体,大致可以支持4KHz/以下的旋转编码器脉冲频率),若旋转编码器脉冲频率更高,建议采用计数器/T0和T1分别实现正反向计数,此时一般需要附加少量外部电路的配合/以下代码仅供参考,由此产生的任何后果,本人不承担任何责任/*#includereg51.hlongco

4、unter=0;/旋转编码器的脉冲计数值,左转为正,右转为负voidmain()IT0=1;/外部中断0为边沿触发EX0=1;/使能外部中断0EA=1;/使能中断while(1)/在这里写代码实现你想做的事,比如计数值的进一步处理等等等等/*/延时函数delay(unsignedchardly)/延时值与晶体频率有关,可以自己调整变量x的值以取得合适的单位延时值/*voiddelay(unsignedchardly)unsignedintx;while(dly-)x=1000;while(x-);/*/外部中断0的中断处理函数voidISR0()/注意:旋转编码器的A接P3.2,B接P1.7(

5、跟你图上一样不变)/*voidISR0()interrupt0if(P1&0x80)=0x80)delay(10);/消抖动,延时一会,确认P1.7仍然为高,如果频率比较高,延时要缩短if(P1&0x80)=0x80)counter+;elsedelay(10);/消抖动,延时一会,确认P1.7仍然为低,如果频率比较高,延时要缩短if(P1&0x80)=0x00)counter-;最近用到旋转编码器,在网上找了一大堆资料,发现这篇好文章。收藏到自己的空间待用。ME850扩展应用旋转编码器计数程序(飞梭旋钮功能)数码管显示/* * ME850单片机开发实验仪演示程序 - 旋转编码器计数程序 *

6、* 3位数码管显示 * * MCU: AT89S52 晶振:11.0592MHz * * 版本:V1.1 (2011/07/14) * 作者:tangyuan * 网站:http:/ * * 邮箱: * *【版权】东莞市林积为实业投资有限公司 *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! * * * 功能简述: (飞梭旋钮功能) * 当旋钮顺时针旋转时,计数值增加。达到最大值255后,不再响应。 * 当逆钮顺时针旋转时,计数值减小。达到最小值0后,不再响应。 * 当按下旋钮时,将计数值清零(归位)。 * */#include sbit PINA = P10;sbit PINB

7、= P11;sbit PIND = P12;unsigned char display3;unsigned char code LEDData = 0xC0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8,0x80,0x90,0xff; char code reserve3_at_ 0x3b; /保留0x3b开始的3个字节unsigned char counter = 0; /编码器脉冲计数 unsigned char n,shift;/*ms延时子函数*/void delayms(unsigned int ms) unsigned char k; while (ms-) for (k = 0; k 114; k+) ; /*扫描编码器子函数在编码器引脚A为低电平期间

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号