#include<reg51.h>//单片机头文件
#define SMG P0//自定义单片机P0组端口为变量SMG
#define uchar unsigned char//自定义变量uchar为unsigned char
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码显示0~9数字的数组,低电平点亮数码管段码数字0~9。
//uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9。
int num;//共阳数码管段码数组下标数字变量
sbit AA = P1^0;//接编码器A端
sbit BB = P1^1;//接编码器B端
void delay(uchar z)//延时函数
{
uchar i,j;
for(i = 0; i < z; i++)
for(j = 0; j < 120; j++);
}
void main()//主函数
{
while(1)//死循环
{
if(num<0)//判断共阳数码管段码数组下标数字变量是否小于0
{
num=9;//共阳数码管段码数组下标数字变量变为9
}
if(num>9)//判断共阳数码管段码数组下标数字变量是否大于9
{
num=0;//共阳数码管段码数组下标数字变量变为0
}
SMG=table[num];//共阳数码管段码显示0~9数字的数组赋值给变量SMG,相当于赋值给单片机P0组端口,从而让数码管显示出0~ 9数字。
if(AA == 0)//开始检测是否旋转了开关
{
delay(10);//消除抖动
if(AA == 0) //确实是旋转了,进行正反转判断。
{
delay(10);//消除抖动
while(!AA);//等待开关A端复位(断开),防止出现乱加减的现象。
if(BB == 1)//正转,进行正转处理。
{
num++;//数码管数值增加
}
if(BB == 0)//反转,进行反转处理。
{
num--;//数码管数值减少
}
}
}
}
}