用TM1637数码管显示EC11编码器调整数字
/*========================================
引脚分别为a,b,c b接地;a,c分别接到P3.3和P3.2口并分别接两个10K上拉
电阻,并且a,c需要分别对地接一个104的电容,否则
因为编码开关的触点抖动会引起轻微误动作。本程序不
使用定时器,不占用中断,不使用延时代码,并对每个
细分步数进行判断,避免一切误动作,性能超级稳定。
我使用的编码器是APLS的EC11可以参照附件的时序图 编码器控制流水灯最能说明问
电路原理图如下:
接线图
(单片机为STC89C52)=================*/
#include <STC89c52.H>
#include "TM1637.h"
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define NULL 0
uchar x,WheelOld;
uchar Led=0;//LED流水灯初始化
/*************************定义接口************************/
/*************************定义接口************************/
sbit PINA=P3^2; //定义编码器连接的IO
sbit PINB=P3^3; //定义编码器连接的IO
/*************************过程返回************************/
uchar WheelLeft()
{
Led++;
return(NULL);
}
/*************************右转一步的操作************************/
uchar WheelRight()
{
Led--;
return(NULL);
}
/*************************编码器过程************************/
uchar EncoderProcess()
{
uchar keytmp,keytmp1,keytmp2,WheelNow;
PINA=1; //PINA至高电平
PINB=1; //PINB至高电平
if(PINA==1) //如果PINA为高电平
{
keytmp1=0x01;
}
else keytmp1=0;
if(PINB==1) //如果PINB为高电平
{
keytmp2=0x02;
}
else keytmp2=0;
WheelNow=keytmp1+keytmp2; //根据两个IO组合成16进制数为0x00|0x01|0x02|0x03
keytmp=WheelNow;
keytmp^=WheelOld; //判断新数据同旧数据
if(keytmp==0) return(NULL); //如果新数据和原来的数据一样 就直接退出
if(WheelOld==0 && WheelNow==0x01)
{
x=WheelNow;
}
if(WheelOld==0 && x==0x01 && WheelNow==0x03)
{
WheelOld=WheelNow;
x=0;
return(WheelLeft()); //左旋转00 01 03
}
if(WheelOld==0x03 && WheelNow==0x02)
{
x=WheelNow;
}
if(WheelOld==0x03 && x==0x02 && WheelNow==0x00)
{
WheelOld=WheelNow;
x=0;
return(WheelLeft()); //左旋转03 02 00
}
if(WheelOld==0 && WheelNow==0x02)
{
x=WheelNow;
}
if(WheelOld==0 && x==0x02 && WheelNow==0x03)
{
WheelOld=WheelNow;
x=0;
return(WheelRight()); //右旋转00 02 03
}
if(WheelOld==0x03 && WheelNow==0x01)
{
x=WheelNow;
}
if(WheelOld==0x03 && x==0x01 && WheelNow==0x00)
{
WheelOld=WheelNow;
x=0;
return(WheelRight()); //右旋转03 01 10
}
}
/*************************主函数************************/
void main()
{
while (1)
{
EncoderProcess();
Fnshu(Led);
}
}
完整程序:
EC11.7z
(26.47 KB, 下载次数: 0)
|