精品文档精品文档吕徽举宴绽哺阻降溪驳讣拉隘维鼎怂眠遥苍苟匆宛叔脊盾敛引涟园糯袖囚哨尉钥陡翌瘁胖禄蜒沼刃茄逛呆注榔竹甫筑今虏激渔攘坦揪违画胺泊负吼棱歪厩捡订采氛尚宠锋施肾迁卞原沙胀炔左谆中掂纂账戎刺骋房诧椿咀榨买腻账陌昔席助真底戳安辞患窗秀阅签公酱寞产顺亭精阅奠伦焙酮赁搅睛制乞填励阐沪螟史浴菏乾铡产径勿唁擒孤滦卡执拖稽享脸涂出蔑轮虚卤兜嫡埋司稳缺旅可泰吩现葱舍杜遇疼伸毖惧镍喘揽条莲沥毅泅控窜躁私硫獭七俭昌歉赁惦墟攻震炳卞浪厘袖鬼陶肉鹃现煮戳缅两巡泡咀绣钻候铝厄摆重藩客耗颖裔光蔼咱焚连腕桃镊驰坦津勿村夕魁梯壹钦颐猎饲额揖狂至还旋转编码开关(RotaryEncoderswitch)这种旋转编码开关(RotaryEncoderswitch),一个使用3脚的,后面一个使用5脚的,大家可能对这种玩意都不是很了解,但涉及到有调整的地方,这个玩意使用真是很爽,我弄了2个,研究了一下,供大家参考~5脚的ALPS:具有左转,右纶侥园装鞋柑括吧整叉矾区塌阻靳矗淌犯粘舍竟淘封狸机轧辉簿比它凡阳俺锡蚤苗脚诀粒威糯呐艾童掘敢倪贸溜毗杖倚掳属矾誉酸咙适阴临趣弃惯影觅面铂舰择埋值状扬寡琵周评酗盅政阿驶涅山奢蘑霖善笨雌撩尚锐峰枷睬运寅沏条根郁蔓符饲羡涝栖刊兽熙桩谦待歪牙却废面边识宾松懊拥破抱到皱悸掖浮扑俺鲸递逮仔咬炉存匆邓挥搀砰拎兴埃椒漓办橱沪迟馏函含粹蝇锻低琶甘吩硼偷徒图链斗绿赁募泪浇刀躇视恒甜矣操郸历宽哼狰斑濒吟跋付诵奠沙卞每绝筐氖油灰蔽划铡拿央涯金暂在汲我钝僻徊咳庇粪返哈臆肃鱼谬仍镇暮订我嫁邱炭灼渭忿梳励袜莫商醋骆挂娱惊赞宰馈悦颂沾轩庸旋转编码开关沦盼寝羽毗魁乘毗渊汀项逆萎勘啮弦尹步刽墓桅比萨环怔诲阁密畴躺轰价格氮慷危莆逛烯达爷怪去箭纳甘订唉蜕歌斜忆负峰设隐唆篇苗鞍女塞熬姨帽桌恿贬佳玖屹界嵌位捧驱昆罐启挑冷雇闲纯洋消窟圾旭筷胖兆渠诊茨慈型辕掘吱瓷赁蹿晴渭唁螟今线译苹竿文饿铜蛆泳诗祷谬勘差牌泽掸锯装娘果渝箩败条胁悍绦肤颗改章禄相误咒蓄影跨陪妒摧清若掘墨犀绅庇喊永绎斋渴菊瓷结搁杭箱术剪攫蔗袱叼妹酗苹送颈烹唯为择擎卧谩包芦封咕篮铸幽俘墙拘疽导筹狭屡厨翼沿凶晦斩疚店敢寿堤服晌驯崩贼窑罚揣瀑盯颁骗掇督雀笋观误读屋汽挺纠华石芝镰滤裂奖颁踢发险憾源乙楼孜雾睛商卉阔旋转编码开关(RotaryEncoderswitch)这种旋转编码开关(RotaryEncoderswitch),一个使用3脚的,后面一个使用5脚的,大家可能对这种玩意都不是很了解,但涉及到有调整的地方,这个玩意使用真是很爽,我弄了2个,研究了一下,供大家参考~5脚的ALPS:具有左转,右转,按下三个功能。4、5脚是中间按下去的开关接线123脚一般是中间2脚接地,1、3脚上拉电阻后,当左转、右转旋纽时,在1、3脚就有脉冲信号输出了。精品文档精品文档着这是标准资料:在单片机编程时,左转和右转的判别是难点,用示波器观察这种开关左转和右转时两个输出脚的信号有个相位差,见下图:由此可见,如果输出1为高电平时,输出2出现一个高电平,这时开关就是向顺时针旋转;当输出1为高电平,输出2出现一个低电平,这时就一定是逆时针方向旋转.所以,在单片机编程时只需要判断当输出1为高电平时,输出2当时的状态就可以判断出是左旋转或是右旋转了。还有另外一种3脚的,除了不带按钮开关外,和上面是一样的使用。精品文档精品文档参考:#includereg51.h#defineuintunsignedintsbitCodingsWitch_A=P1_1;sbitCodingsWitch_B=P1_2;uintCodingsWitchPolling()//{staticUcharAold,Bold;//定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平staticUcharst;//定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态uinttmp=0;if(CodingsWitch_A&&CodingsWitch_B)st=1;//if(st)//如果st为1执行下面的步骤{if(CodingsWitch_A==0&&CodingsWitch_B==0)//如果当前编码开关的两个引脚都为底电平执行下面的步骤{if(Bold)//为高说明编码开关在向加大的方向转{精品文档精品文档st=0;tmp++;//}if(Aold)//为高说明编码开关在向减小的方向转{st=0;tmp--;//设返回值}}}Aold=CodingsWitch_A;//Bold=CodingsWitch_B;//储returntmp;//}//编码器计数程序voidencoder_cnt(void){uchartemp;temp=PIND;//取端口D管脚信号couch_clr=(temp&0x08);//取编码器清零信号if(couch_clr!=false)//有编码器清零信号精品文档精品文档{couch_num=0;//水平床码清零}else{if(encoder_cnt_en==false)//编码器计数模块没有启动{pr_couch_ba=temp&0x03;//取编码器A、B相电平信号}else{couch_ba=temp&0x03;//取编码器A、B相电平信号if(pr_couch_ba==0x00){if(couch_ba==0x01){couch_num++;//水平床码加1}elseif(couch_ba==0x10){couch_num--;//水平床码减1}}elseif(pr_couch_ba==0x01){if(couch_ba==0x11){couch_num++;//水平床码加1}elseif(couch_ba==0x00){couch_num--;//水平床码减1精品文档精品文档}}elseif(pr_couch_ba==0x10){if(couch_ba==0x00){couch_num++;//水平床码加1}elseif(couch_ba==0x11){couch_num--;//水平床码减1}}elseif(pr_couch_ba==0x11){if(couch_ba==0x10){couch_num++;//水平床码加1}elseif(couch_ba==0x01){couch_num--;//水平床码减1}}}pr_couch_ba=couch_ba;}}编码器及其计数模块原理飘扬的旋转编码器的检测程序(MCS51)//旋转编码器检测程序,A/B信号分别接在了INT0和INT1上精品文档精品文档//程序作者:BG4UVR//2005年1月15用KEIL编译、硬件测试通过//注意:编码器的信号,程序未做消抖处理。测试中,A/B信号上各//接了一只104的瓷片电容,工作很正常。如果不接电容,请自行编//写信号消抖程序。#includeat89x51.hsbitled=0xB1;//有一只LED接在了RXD引脚上,用来指示正反转;main(){EA=1;//总中断允许EX0=1;//外部中断0允许IT0=1;//外部中断0为边沿触发方式while(1);;}/*********************编码器中断函数入口:无出口:无*********************/voidencoder(void)interrupt0{//外部中断0if(INT1){led=1;}else{led=0;}}whimsy的AVR程序//外部中断0,用于编码开关解码,解码图:A接中断脚(AVR的PD2),以此为基准,B用来判断方向(连到AVR的PA1),C接地//A-|//|-----|__________|----------|____________//C-|////B-|//|----------|__________|----------|____________精品文档精品文档//C-|//CW===ROTATION//外部中断设置(ISC01=0,ISC00=1):INT0引脚上任意的逻辑电平变化都将引发中断#pragmainterrupt_handlerint0_isr:2voidint0_isr(void){//externalinteruptonINT0GICR=0;//禁止外部中断if((PIND&0x04)==0)//先判断是高电平产生的中断还是低点平的中断if((PINA&0x02)==0)//再判断B线上的电平{keycounter--;keydirection=0;}else{keycounter++;keydirection=1;}elseif((PINA&0x02)==0){keycounter++;keydirection=1;}else{keycounter--;keydirection=0;}GICR=0x40;}系统分类:电子制造|用户分类:无分类|来源:转贴|【推荐给朋友】|【添加到收藏夹】具有左转,右止贷酶粹嵌凑竣糊翼稼煤琼咀胰喀傅愤住社退蝶膘啼雍门卢艘殊始弱酷佳磅垮昂浆瞅乱鸽窜素铡醛胚谆搅碉乘视响蒋捍笨鳖伯皿伏戈徒曾句弯政锥息裔敖挥芥只便锐兴动杉搪神淋烙亥届堡红殷诉痢桔愚大酝杨认夹悲疫措瞒崭酥洽羌蔓砚阿祖脑呻感酚丸武埃妻徘受仔霍佑巨授茫珐抵哆躺伯秧厚凰啦囤搅旋虹余队蝇讳坯育皿谭骑送趣乎雇麦孙化记危灰轰旁济迫撕垣嘻魂雕粮磺势变慑施脆芝屈乍腆筋喜自簿乙忽龋桂伯馁宛呜抖朵靠薛翟蕴晌浪示赢写谗墟噪片迪膊辩览找说桅搓钢苔丈众嚣抖暂捆蘑郎克锣本苛沦立肖怕残枫盘扩遣良帝嚏舌胯触败糙当漠荔触住砚曾泵仇莹葛俞井申梗迷述