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

[复制链接]
889|0
 楼主| 中国电子网会员 发表于 2020-3-1 10:28 | 显示全部楼层 |阅读模式
  1. #include<reg51.h>//单片机头文件
  2. #define SMG P0//自定义单片机P0组端口为变量SMG
  3. #define uchar unsigned char//自定义变量uchar为unsigned char
  4. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码显示0~9数字的数组,低电平点亮数码管段码数字0~9。
  5. //uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9。
  6. int num;//共阳数码管段码数组下标数字变量
  7. sbit AA = P1^0;//接编码器A端
  8. sbit BB = P1^1;//接编码器B端
  9.   void delay(uchar z)//延时函数
  10. {
  11.    uchar i,j;
  12.    for(i = 0; i < z; i++)
  13.     for(j = 0; j < 120; j++);
  14. }
  15.   void main()//主函数
  16. {
  17.    while(1)//死循环
  18.   {  
  19.     if(num<0)//判断共阳数码管段码数组下标数字变量是否小于0
  20.    {
  21.          num=9;//共阳数码管段码数组下标数字变量变为9
  22.         }
  23.     if(num>9)//判断共阳数码管段码数组下标数字变量是否大于9
  24.    {
  25.      num=0;//共阳数码管段码数组下标数字变量变为0
  26.         }
  27.    SMG=table[num];//共阳数码管段码显示0~9数字的数组赋值给变量SMG,相当于赋值给单片机P0组端口,从而让数码管显示出0~ 9数字。            
  28.    if(AA == 0)//开始检测是否旋转了开关
  29.   {
  30.     delay(10);//消除抖动
  31.     if(AA == 0) //确实是旋转了,进行正反转判断。
  32.    {
  33.      delay(10);//消除抖动
  34.          while(!AA);//等待开关A端复位(断开),防止出现乱加减的现象。
  35.          if(BB == 1)//正转,进行正转处理。
  36.     {
  37.       num++;//数码管数值增加
  38.      }
  39.      if(BB == 0)//反转,进行反转处理。
  40.     {
  41.       num--;//数码管数值减少
  42.      }
  43.     }
  44.    }
  45.   }
  46. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部