• 西北工控自动化网 专业的兰州PCB芯片级无图维修,电路板软硬件开发公司-甘肃先睿工控科技有限公司!欢迎你! 业务咨询电话:0931-8593134 技术支持电话:18609487812

 

先睿工控广告

编程开发
其它的类

首页 》 全屏查看 》


编码开关的通用编程-程序篇

关键词: 编码开关,通用C程序,脉冲开关,编程,信号,先睿工控
描述:

编码开关的通用程序文件 下位机程序


作者:代码灵魂  日期:2017/3/29

 

原创性声明:禁止用于商业用途,

       编码开关在日常的高端应用中,最为常见,主要有,数据相机的滚动转盘,高档小汽车中,音量及切换开关,高档音响中的调节旋钮,高端电源中电压,电流精确调节,伺服驱动中的编码器等等,其原理是发生脉冲,此类开关,非模拟调节开关,几乎无电流通过,其作用是发生一系列脉冲信号,用该信号实现数字处理,来完成精确调节,民间俗称,脉冲开关,

小编为实现 模块化的设计,写出如下编码开关的通用程序,此程序我们会在后序电路设计完成之后 进行调试。

  •  
  • #include <Code_Key.h>
  •  
  • static const uchar code UP=1;
  • static const uchar code DOWN=2;
  • static const uchar code OK=3;
  • static const uchar code NONE=0;
  •  
  • //*----------------输入位变量----------------/      
  • sbit Key_OK=P1^2;
  • sbit Key_A=P1^1;
  • sbit Key_B=P1^0;
  • //------------------------------------------ */
  • /*引用公共变量,bSave,bQuick_flag,bIN_DIR,OUT_DIR*/
  • /*出口参数:Code_RL,fSave,fQuick*/
  • /*要求,所有的输入按键信息,当执行完毕,都清除按键状态。
  • 等待下次再输入,以此提高程序执行效率
  • 当按键有输入时,我们还要给按键延时,50MS,让其不被重复执行,
  • */
  • uchar Get_Code_Key(uchar *pCode_Data)
  • {
  • bit bError=0;  //定义按键错误
  • bit bFlag_KeyDown=0;   //定义按键压下标识
  • uchar i;
  • uchar tStep=0;
  •  
  • if ((Key_A&&Key_B&&Key_OK)==0)
  • {
  • bFlag_KeyDown=1; //若有按键按下,标识有按键按下
  • tStep=1;
  • }
  • if(bFlag_KeyDown==1)
  •  
  • if (Key_OK==0)   //确定键,测试正常!
  • {
  • for (i=0;i<100;i++)
  • {
  • if (Key_OK==1) break;
  •  
  • Delay_ms(10);
  • }
  • *pCode_Data=OK; 
  •  
  • return 0;
  • }
  • if ( Key_A==1 && Key_B==0 && tStep==1)    //第一步检测正反 此事件以状态机形式进行
  • for (i=0;i<250;i++)       
  • {    
  • if ( Key_A==0 && Key_B==0 && tStep==1) //循环等待触发
  • {
  •  
  • tStep=2;
  •  
  • break; 
  • }
  • Delay_ms(2);       
  • }
  • if (i>=250) return 0;
  •  
  • for (i=0;i<250;i++)
  • {      
  • if ( Key_A==0 && Key_B==1 && tStep==2)
  • {
  • *pCode_Data=UP;
  • tStep=3;
  • break;
  •  
  •  
  • Delay_ms(2);
  •  
  • }
  •  
  • return 0;
  • if ( Key_A==0 && Key_B==1 && tStep==1) //第二种情况
  • {  
  • for (i=0;i<250;i++)
  • {      
  • if ( Key_A==0 && Key_B==0 && tStep==1)
  • {
  •  
  • tStep=2;
  • break; 
  • }
  • Delay_ms(2);
  • }
  • if (i>=250) return 0;
  • for (i=0;i<250;i++)
  • if ( Key_A==1 && Key_B==0 && tStep==2)
  • {
  • *pCode_Data=DOWN;
  • tStep=3;
  •  
  • break;
  • }
  • Delay_ms(2);
  •  
  •  
  • }
  •  
  • return 0;
  • }
  • }
  • else
  • *pCode_Data=NONE;
  •  
  • return (uchar)bError;   
  • }
  •  
  •     }
         Delay_ms(2);
         
        
       }
      
        return 0;
      }
     }
     else
        *pCode_Data=NONE;
  • return (uchar)bError;   
    }

本信息由  甘肃先睿工控科技有限责任公司 发表于 西北工控自动化网
注意: 转载或分享 请注明来源:西北工控自动化!

在全屏模式下分享,效果更好!


扫一扫 添加通信录 扫一扫 添加微信号


COPYRIGHT ©2008-2018 XBGHZDH CORPORATION ALL RIGHT RESERVED .
COPYRIGHT ©2008 XBGHZDH ALL RIGHT RESERVED .           

        西北工控自动化 © 版权所有

本网站由:甘肃先睿工控科技有限公司独家赞助


总访问量:343028
当前在线:62