#include
#define GPIO_DIG P0
unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值
int tmp = 1;
#define uchar unsigned char
sbit BB= P1^0;//接编码器A端
sbit AA= P1^1;//接编码器B端
void delayms(uchar count)
{
uchar i,j;
for(i = 0; i < count; i++)
for(j = 0; j < 120; j++);
}
/**********************************
5ms延时函数
**********************************/
void delay(void) //延时5ms
{
uchar a, b;
for(b = 19; b > 0; b--)
for(a = 130; a > 0; a--);
}
void main()
{
while(1)
{ if(tmp<1){tmp=1;}
if(tmp>8){tmp=9;}
GPIO_DIG=~DIG_CODE[tmp];
if(AA == 0)//开始检测是否旋转了开关
{
delayms(10);//消除抖动
if(AA == 0) //确实是旋转了,进行正反转判断
{
if(BB == 0)//正转,进行正转处理
{
tmp++;//为了使LED正向递增
}
if(BB == 1)//反转,进行反转处理
{
tmp--;//为了使LED反向递减
}
}
while(AA == 0)//等待开关A端复位(断开),防止出现乱加减的现象
{
delayms(20);//延时等待
}
}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』