欢迎来到天天文库
浏览记录
ID:56802481
大小:290.50 KB
页数:8页
时间:2020-07-12
《旋转编码开关-数字电位器.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、标签:无标签旋转编码开关(RotaryEncoderswitch)这种旋转编码开关(RotaryEncoderswitch),一个使用3脚的,后面一个使用5脚的,大家可能对这种玩意都不是很了解,但涉及到有调整的地方,这个玩意使用真是很爽,我弄了2个,研究了一下,供大家参考~5脚的ALPS:具有左转,右转,按下三个功能。4、5脚是中间按下去的开关接线 123脚一般是中间2脚接地,1、3脚上拉电阻后,当左转、右转旋纽时,在1、3脚就有脉冲信号输出了。着这是标准资料:在单片机编程时,左转和右转的判别是难点,
2、用示波器观察这种开关左转和右转时两个输出脚的信号有个相位差,见下图:由此可见,如果输出1为高电平时,输出2出现一个高电平,这时开关就是向顺时针旋转;当输出1为高电平,输出2出现一个低电平,这时就一定是逆时针方向旋转.所以,在单片机编程时只需要判断当输出1为高电平时,输出2当时的状态就可以判断出是左旋转或是右旋转了。还有另外一种3脚的,除了不带按钮开关外,和上面是一样的使用。参考:#include"reg51.h"#defineuintunsignedintsbitCodingsWitch_A=P1_1;
3、sbitCodingsWitch_B=P1_2;uintCodingsWitchPolling()//{ staticUcharAold,Bold; //定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平 staticUcharst; //定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态 uinttmp=0; if(CodingsWitch_A&&CodingsWitch_B) st=1; // if(st) //如果
4、st为1执行下面的步骤 { if(CodingsWitch_A==0&&CodingsWitch_B==0) //如果当前编码开关的两个引脚都为底电平执行下面的步骤 { if(Bold) //为高说明编码开关在向加大的方向转 { st=0; tmp++; // } if(Aold) //为高说明编码开关在向减小的方向转
5、 { st=0; tmp--; //设返回值 } } } Aold=CodingsWitch_A; // Bold=CodingsWitch_B; //储 returntmp; //}//编码器计数程序voidencoder_cnt(void){ uchartemp; temp=PIND;//取端口D管脚信号 c
6、ouch_clr=(temp&0x08);//取编码器清零信号 if(couch_clr!=false)//有编码器清零信号 { couch_num=0;//水平床码清零 } else { if(encoder_cnt_en==false)//编码器计数模块没有启动 { pr_couch_ba=tem
7、p&0x03;//取编码器A、B相电平信号 } else { couch_ba=temp&0x03;//取编码器A、B相电平信号 if(pr_couch_ba==0x00) { if(couch_ba==0x01)
8、 { couch_num++;//水平床码加1 } elseif(couch_ba==0x10) {
此文档下载收益归作者所有