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

[复制链接]
 楼主| 中国电子网会员 发表于 2020-3-2 20:26 | 显示全部楼层 |阅读模式
  1. #include<reg52.h>//包含52单片机内部寄存器头文件
  2. #define uchar unsigned char // 自定义uchar为unsigned char(即无符号字符型数据,数据范围:0到255。)
  3. #define int int//自定义int为int(即有符号整数型数据,数据范围:-32768到32767。)
  4. sbit K1=P1^0;//位定义EC11旋转编码器A端引脚K1
  5. sbit K2=P1^1;//位定义EC11旋转编码器B端引脚K2
  6. sbit K3=P3^4;//位定义EC11旋转编码器C端引脚K3
  7. int KeyValue;//声明数值变量
  8. int ge ,shi,bai,qian;//声明数值变量个位变量、数值变量十位变量、数值变量百位变量、数值变量千位变量、
  9. //uchar qitingflag;
  10. //unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码数字0~9字码表,低电平点亮数码管段码数字0~9。
  11. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9。
  12.   void Delay(int z)//延时程序
  13. {
  14.    int x,y;
  15.    for(x=z;x>0;x--)
  16.         for(y=110;y>0;y--);
  17. }
  18.   void ShuMaGuanDisplayKeyValue(int KeyValue)//数码管显示数值函数
  19. {  
  20.    qian=KeyValue/1000;//数值变量个位变量值
  21.    bai=KeyValue%1000/100;//数值变量十位变量值
  22.    shi=KeyValue%100/10;//数值变量百位变量值
  23.    ge=KeyValue%10;//数值变量千位变量值
  24.   
  25.    P2=0xfe;//数码管千位显示位
  26.    P0=table[qian];//数码管千位数值显示
  27.    Delay(5);//延时

  28.    P2=0xfd;//数码管百位显示位
  29.    P0=table[bai];//数码管百位数值显示
  30.    Delay(5);//延时

  31.    P2=0xfb;//数码管十位显示位
  32.    P0=table[shi];//数码管十位数值显示
  33.    Delay(5);//延时

  34.      
  35.    P2=0xf7;//数码管个位显示位
  36.    P0=table[ge];//数码管个位数值显示
  37.    Delay(5);//延时
  38. }
  39.   void KeyScan()//按键扫描函数
  40. {
  41.    if(K1==0)//开始检测是否旋转了开关
  42.   {
  43. //    delay(10);//消除抖动
  44.     ShuMaGuanDisplayKeyValue(KeyValue);//延时
  45.     if(K1==0) //确实是旋转了,进行正反转判断。
  46.    {
  47. //     delay(10);//消除抖动
  48.      while(!K1)//等待开关A端复位(断开),防止出现乱加减的现象。
  49.          ShuMaGuanDisplayKeyValue(KeyValue);//延时
  50.          if(K2==1)//正转,进行正转处理。
  51.     {
  52.       KeyValue=KeyValue+5;//数码管数值每次增加5
  53.      }
  54.      if(K2==0)//反转,进行反转处理。
  55.     {
  56.       KeyValue=KeyValue-5;//数码管数值每次减少5
  57.      }
  58.     }
  59.    }
  60.   }
  61.   void main()//主函数
  62. {       
  63.    while(1)//死循环
  64.   {
  65.         KeyScan();//按键扫描函数
  66. //        if(qitingflag==1)
  67.     ShuMaGuanDisplayKeyValue(KeyValue);//数码管显示数值函数
  68.         if(KeyValue<0)//判断数值变量是否小于0
  69.    {
  70.          KeyValue=0;//数值变量置0
  71.         }
  72.     if(KeyValue>9999)//判断数值变量是否大于9999
  73.    {
  74.      KeyValue=0;//数值变量置0
  75.         }
  76.    }
  77.    
  78. //    if(qitingflag==0)//判断启停标志位变量是否为0
  79. //   {
  80. //     P2=0Xff;//
  81. //         P0=0x00;//
  82. //         KeyValue=0;
  83. //        }
  84.   }


本帖子中包含更多资源

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

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

本版积分规则

2

主题

3

帖子

0

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