不限ip注册送35体验金-开户送38体验金不限id-进来发财!

全国服务热线

18219276011

2850818308

您当前位置:不限ip注册送35体验金>>不限ip注册送35体验金资讯
不限ip注册送35体验金资讯
公司新闻
企业视频
行业资讯
技术支持
不限ip注册送35体验金
地址:东莞市塘厦镇凤凰岗凤清路39号不限ip注册送35体验金工业园
电话:0769-38833333-881
销售电话:18219276011
传真:0769-87930111
E-mail:sw@soundwell-cn.com
51单片机与旋转编码器模块程序
发布时间:2019-03-01
发布者:不限ip注册送35体验金
浏览次数:104次

小编从网上找到了一个51单片机+1602液晶屏显示 KY-040旋转编码器模块的程序和仿真,分享给大家,有需要的拿走,不谢!

程序功能:旋转编码器顺时针旋转,显示数值增加
               旋转编码器逆时针旋转,显示数值减小
               旋转编码器按下,切换显示ON/OFF

根据旋转编码器KY-040模块资料可知:


在下降触发模式下,AB进行电平比较:
A触发的中断:同加异减
B触发的中断:同减异加
反之亦然


那么可以通过手动模拟外部中断触发瞬间的电平状态来进行仿真,
                      CLK(A) ---- P3^2
                      DT(B)  ---- P3^3
                      SW(Z)  ---- P3^4
外部中断0下降沿触发后,对B的电平进行判断即可知道旋转编码器
的旋转方向。

旋转编码器图片旋转编码器输出波形图图片4.png
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
仿真原理图片

单片机源程序如下:


  1. #include<reg51.h>

  2. #include"lcd.h"

  3. #include<intrins.h>


  4. //外部中断的IO

  5. sbit K1=P3^2;

  6. sbit K2=P3^3;

  7. sbit K3=P3^4;


  8. void IntConfiguration();

  9. void Delay(unsigned int n);

  10. unsigned char KeyValue=0;

  11. unsigned char state=0;

  12. /*******************************************************************************

  13. * 函 数 名       : main

  14. * 函数功能                 : 主函数

  15. * 输    入       : 无

  16. * 输    出       : 无

  17. *******************************************************************************/

  18. void main(void)

  19. {

  20.         LcdInit();

  21.         IntConfiguration();

  22.         LCDWrite_String(2, 0, 10, "Bian ma qi");

  23.         while(1)

  24.         {

  25.                 if(K3==0)

  26.                 {

  27.                         Delay(1);         //延时消抖

  28.                         if(K3==0)

  29.                         {

  30.                                 state=!state;

  31.                                 while(K3==0);

  32.                         }

  33.                 }

  34.                 if(state==1)

  35.                 {

  36.                         LcdWriteCom(0xc0+13);

  37.                         LcdWriteData('O');

  38.                         LcdWriteData('N');

  39.                         LcdWriteData(' ');

  40.                 }

  41.                 else

  42.                 {

  43.                         LcdWriteCom(0xc0+13);

  44.                         LcdWriteData('O');

  45.                         LcdWriteData('F');

  46.                         LcdWriteData('F');

  47.                 }

  48.                 LcdWriteCom(0xC0+4);

  49.                 LcdWriteData('0'+KeyValue/100%10);

  50.                 LcdWriteData('0'+KeyValue/10%10);

  51.                 LcdWriteData('0'+KeyValue%10);

  52.         }       

  53. }


  54. /*******************************************************************************

  55. * 函 数 名         : IntConfiguration()

  56. * 函数功能                   : 设置外部中断

  57. * 输    入         : 无

  58. * 输    出         : 无

  59. *******************************************************************************/

  60. void IntConfiguration()

  61. {

  62.         //设置INT0

  63.         IT0=1;//跳变沿出发方式(下降沿)

  64.         EX0=1;//打开INT0的中断允许。

  65.        

  66.         EA=1;//打开总中断       

  67. }

  68. /*******************************************************************************

  69. * 函 数 名         : Delay(unsigned int n)

  70. * 函数功能                   : 延时

  71. * 输    入         : n

  72. * 输    出         : 无

  73. *******************************************************************************/


  74. void Delay(unsigned int n)   //延时50us误差 0us

  75. {

  76.     unsigned char a,b;

  77.                 for(;n>0;n--)

  78.                 {

  79.             for(b=1;b>0;b--)

  80.         for(a=22;a>0;a--);

  81.                 }

  82. }

  83. /*******************************************************************************

  84. * 函 数 名         : Int0()        interrupt 0

  85. * 函数功能                   : 外部中断0的中断函数

  86. * 输    入         : 无

  87. * 输    出         : 无

  88. *******************************************************************************/


  89. void Int0()        interrupt 0                //外部中断0的中断函数

  90. {

  91.         if(K2==1)

  92.         {

  93.                 KeyValue++;

  94.         }

  95.         if(K2==0)

  96.         {

  97.                 KeyValue--;

  98.         }

  99.         if(KeyValue>200)

  100.         KeyValue=200;

  101.         if(KeyValue<1)

  102.         KeyValue=1;

  103. }



  104. ……………………



广东不限ip注册送35体验金制品是28年老牌编码器厂家,是编码器国家行业标准制定单位,专业生产各种旋转编码器,编码器型号全,可完美替换国内外品牌编码器.实力厂家,厂内有先进的生产设备及检测设备,可完美配合客户定制产品,可根据客户需求定制增量型编码器或绝对型编码器,可定制编码器的精度,脉冲以及编码器的尺寸,找编码器生产厂家就找不限ip注册送35体验金.



编码开关厂家


最新案例
Baidu
sogou