打印

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

[复制链接]
655|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#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--;//数码管数值减少
     }
    }
   }
  }
}


165105ctj6uhymv8zh8i1v.png (547.27 KB )

165105ctj6uhymv8zh8i1v.png

165236yiwnzkn75w8q85ut.gif (268.77 KB )

165236yiwnzkn75w8q85ut.gif

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝