模拟EC11系列数字旋转编码器旋转方向改变数值让数码管显示一个数值

#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--;//数码管数值减少
     }
    }
   }
  }
 }

posted @ 2019-12-09 15:09  吃不了就兜着走  阅读(1010)  评论(0编辑  收藏  举报