旋转编码开关RotaryEncoderswitch使用说明及程序.docx

上传人:b****3 文档编号:5952174 上传时间:2023-05-09 格式:DOCX 页数:8 大小:389.98KB
下载 相关 举报
旋转编码开关RotaryEncoderswitch使用说明及程序.docx_第1页
第1页 / 共8页
旋转编码开关RotaryEncoderswitch使用说明及程序.docx_第2页
第2页 / 共8页
旋转编码开关RotaryEncoderswitch使用说明及程序.docx_第3页
第3页 / 共8页
旋转编码开关RotaryEncoderswitch使用说明及程序.docx_第4页
第4页 / 共8页
旋转编码开关RotaryEncoderswitch使用说明及程序.docx_第5页
第5页 / 共8页
旋转编码开关RotaryEncoderswitch使用说明及程序.docx_第6页
第6页 / 共8页
旋转编码开关RotaryEncoderswitch使用说明及程序.docx_第7页
第7页 / 共8页
旋转编码开关RotaryEncoderswitch使用说明及程序.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

旋转编码开关RotaryEncoderswitch使用说明及程序.docx

《旋转编码开关RotaryEncoderswitch使用说明及程序.docx》由会员分享,可在线阅读,更多相关《旋转编码开关RotaryEncoderswitch使用说明及程序.docx(8页珍藏版)》请在冰点文库上搜索。

旋转编码开关RotaryEncoderswitch使用说明及程序.docx

旋转编码开关RotaryEncoderswitch使用说明及程序

旋转编码开关(RotaryEncoderswitch)-使用说明及程序  

具有左转,右转,按下三个功能.4.5脚是中间按下去地开关接线123脚一般是中间2

脚接地,1.3脚上拉电阻后,当左转.右转旋纽时,在1.3脚就有脉冲信号输出了.

着这是标准资料:

在单片机编程时,左转和右转地判别是难点,用示波器观察这种开关左转和右转时两个输出

脚地信号有个相位差,见下图:

由此可见,如果输出1为高电平时,输出2出现一个高电平,这时开关就是向顺时针旋转;当输

出1为高电平,输出2出现一个低电平,这时就一定是逆时针方向旋转.

所以,在单片机编程时只需要判断当输出1为高电平时,输出2当时地状态就可以判断出是左

旋转或是右旋转了.

还有另外一种3脚地,除了不带按钮开关外,和上面是一样地使用.

参考:

#include"reg51.h"

#defineuintunsignedint

sbitCodingsWitch_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地瓷片电容,工作很正常.如果不接电容,请自行编

//写信号消抖程序.

#include

sbitled="0xB1";//有一只LED接在了RXD引脚上,用来指示正反转;

main()

{

EA=1;//总中断允许

EX0=1;//外部中断0允许

IT0=1;//外部中断0为边沿触发方式

while

(1);;

}

/*********************

编码器中断函数

入口:

出口:

*********************/

voidencoder(void)interrupt0{//外部中断0

if(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:

2

voidint0_isr(void)

{

//externalinteruptonINT0

GICR=0;//禁止外部中断

if((PIND&0x04)==0)//先判断是高电平产生地中断还是低点平地中断

if((PINA&0x02)==0)//再判断B线上地电平

{

keycounter--;

keydirection="0";

}

else

{

keycounter++;

keydirection="1";

}

else

if((PINA&0x02)==0)

{

keycounter++;

keydirection="1";

}

else

{

keycounter--;

keydirection=0;

}

GICR=0x40;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2