找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3028|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
本帖最后由 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 (79.94 KB, 下载次数: 44)

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

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

模拟EC11系列数字旋转编码器旋转方向改变数值让数码管显示一个数值的Protues仿真电路.gif (268.77 KB, 下载次数: 41)

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

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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表