1、概述
本文所使用的编码器为EC11旋转编码器,该编码器由两个部分组成,第一部分(3脚ACB)分别为编码器A B相和公共端(接地);第二部分(2脚S1、S2)为按键,按下后导通。

2、电路图
如下图所示
其中EC11_A接P17、EC11_B接P30;电容103为0.01uf

3、信号分析

由上图中可以看出,当我们使用A相上升沿触发中断时,B相如果为高电平,则是顺时针旋转,反之则是逆时针旋转。
4、程序代码
以下程序运用了N76E003的管脚中断功能,相关博文请点这里
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED =P0^5;
int temp;
void main (void)
{
Set_All_GPIO_Quasi_Mode;//所有引脚配置为双向模式
P17_Input_Mode;//编码器A设定为输入
P30_Input_Mode;//编码器B设定为输入
LED=0;//初始化LED端口
set_EA; //开启总中断
set_EPI; //开启管脚中断(位于拓展中断中)
clr_PIPS1;
set_PIPS0;//选择P1.7为中断输入源
//Enable_BIT7_HighLevel_Trig; //高电平
//Enable_BIT7_FallEdge_Trig; //下降沿
Enable_BIT7_RasingEdge_Trig;//上升沿
//Enable_BIT7_LowLevel_Trig; //低电平
while(1)
{
}
}
//-------管脚中断中断服务程序---------
void PinInterrupt (void) interrupt 7
{
if(PIF==0x80&&P17)//P11位于一通道
{
Timer0_Delay1ms(1);//消抖
if(P17)
{
if(P30)temp++;//顺时针
else{temp--;}//逆时针
}
}
PIF=0;//清除外部中断标志
LED=~LED;
}
5、实际运行
先逆时针转10下、复位后在顺时针转动10下


本文详细介绍了如何使用N76E003单片机配合EC11旋转编码器进行信号分析和程序设计。通过电路图展示连接方式,并利用编码器A相上升沿触发中断,判断顺逆时针旋转。程序代码展示了N76E003的中断功能应用,最终实现了实际运行中逆时针和顺时针旋转的计数。
1万+

被折叠的 条评论
为什么被折叠?



