#include<reg51.h>
#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);//延時等待
}
}
}
}
|