登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看3355|回0|收藏
楼主 ID:171036 只看他
2019-12-9 14:47
本帖最后由 51黑电子会员 于 2019-12-9 16:52 编辑

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


附件列表
模拟EC11系列数字旋转编码器旋转方向改变数值让数码管显示一个数值的Protues仿真电路图.png (2019-12-9 16:51 上传)

原图尺寸 79.94 KB, 下载次数: 44

模拟EC11系列数字旋转编码器旋转方向改变数值让数码管显示一个数值的Protues仿真电路图

模拟EC11系列数字旋转编码器旋转方向改变数值让数码管显示一个数值的Protues仿真电路图

模拟EC11系列数字旋转编码器旋转方向改变数值让数码管显示一个数值的Protues仿真电路.gif (2019-12-9 16:52 上传)

原图尺寸 268.77 KB, 下载次数: 44

模拟EC11系列数字旋转编码器旋转方向改变数值让数码管显示一个数值的Protues仿真电路图操作动态图

模拟EC11系列数字旋转编码器旋转方向改变数值让数码管显示一个数值的Protues仿真电路图操作动态图

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版