找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2044|回复: 0
收起左侧

单片机旋转编码器程序

[复制链接]
ID:613400 发表于 2019-9-20 13:52 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>  
  2. sbit     bA_Key01_IoStatus    = P1^0;
  3. sbit     bB_Key02_IoStatus    = P1^1;



  4. /*************************************************************
  5. 1us延时子函数

  6. **************************************************************/
  7. void Delay1us(uint32 dly)
  8. {
  9.         uint32 i;

  10.         for(; dly>0; dly--)
  11.                 for(i=20; --i;)        ;
  12. }
  13. /*
  14. 扫描编码器子函数  
  15. 在编码器引脚A为低电平期间:  
  16. 编码器引脚B从0到1为正转,编码器引脚B从1到0为反转。
  17. */
  18. void PWM_key(void)
  19. {
  20.         uint8    Curr_encoder_b;  //定义一个变量来储存当前B信号     
  21.     uint8    Last_encoder_b;  //定义一个变量来储存上次B脚信号  
  22.    
  23.      if( bA_Key01_IoStatus && bB_Key02_IoStatus)           //编码器无转动退出   
  24.      {           
  25.         return;   
  26.      }  
  27.         //-----------------------------------
  28.          if(!bB_Key02_IoStatus)
  29.      {
  30.         Last_encoder_b = bA_Key01_IoStatus;       //记录B信号  
  31.         Delay1us(1000);                                                  //延时约 1ms     
  32.         Curr_encoder_b = bA_Key01_IoStatus;     //记录等待期间的B信号(指当前B信号)
  33.         
  34.         if( (Last_encoder_b == 0)&&(Curr_encoder_b== 1) ) //B从0到1为正转      
  35.         {                 
  36.             
  37.         }      
  38.         else if( (Last_encoder_b == 1)&&(Curr_encoder_b == 0) ) //B从1到0为反转      
  39.         {                                
  40.             
  41.         }                                 
  42.      }        
  43. }

复制代码


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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