找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 37563|回复: 62
打印 上一主题 下一主题
收起左侧

51单片机旋转编码器模块KY-040调试程序+仿真 LCD1602显示

  [复制链接]
跳转到指定楼层
楼主
给大家分享一个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的电平进行判断即可知道旋转编码器
的旋转方向。

仿真原理图如下(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. ……………………

  105. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


所有资料51hei附件下载,注意仿真是用Proteus7.5画的,高版本可能无法打开,请安装7.5或7.8版本,扩展名为dsn的那个:
旋转编码器.zip (369.52 KB, 下载次数: 1105)

评分

参与人数 5黑币 +104 收起 理由
残...月 + 6 很给力!
euxbjfjfjcn + 30
stkh + 8 赞一个!
zkele + 10 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏66 分享淘帖 顶15 踩
回复

使用道具 举报

沙发
ID:164988 发表于 2017-9-7 17:34 | 只看该作者
好资料,一定要分享学习
回复

使用道具 举报

板凳
ID:276790 发表于 2018-1-16 23:20 | 只看该作者
看看,不知道如何?
回复

使用道具 举报

地板
ID:283686 发表于 2018-2-27 09:09 | 只看该作者
好东西  正是需要的
回复

使用道具 举报

5#
ID:290052 发表于 2018-3-10 14:59 | 只看该作者
找了一圈没有旋转编码器,原来要这么搞
回复

使用道具 举报

6#
ID:289947 发表于 2018-3-16 20:42 | 只看该作者
Hwinnie 发表于 2018-3-10 14:59
找了一圈没有旋转编码器,原来要这么搞

可以分享下 吗  
还没赚够黑币
回复

使用道具 举报

7#
ID:146874 发表于 2018-4-30 11:10 | 只看该作者
谢谢分享,正在用这个编码器,很好的参考资料
回复

使用道具 举报

8#
ID:313702 发表于 2018-5-10 13:45 | 只看该作者
谢谢分享
回复

使用道具 举报

9#
ID:231918 发表于 2018-5-24 20:45 | 只看该作者
真好  我正在找,就看到了
回复

使用道具 举报

10#
ID:370819 发表于 2018-7-13 12:15 | 只看该作者
正需要谢谢楼主
回复

使用道具 举报

11#
ID:67312 发表于 2018-7-18 15:09 | 只看该作者
谢谢,楼主好人,我学了很久都看不明白,你这是雪中送炭啊
回复

使用道具 举报

12#
ID:353063 发表于 2018-9-3 16:17 | 只看该作者
好资料,一定要学习学习
回复

使用道具 举报

13#
ID:393920 发表于 2018-9-5 15:32 | 只看该作者
很棒的思路
回复

使用道具 举报

14#
ID:331575 发表于 2018-10-21 19:02 来自手机 | 只看该作者
谢谢。值得学习
回复

使用道具 举报

15#
ID:307643 发表于 2018-11-11 19:22 | 只看该作者
很详细,赞一个
回复

使用道具 举报

16#
ID:424642 发表于 2018-11-11 19:45 | 只看该作者

谢谢分享,正在用这个编码器,很好的参考资料
回复

使用道具 举报

17#
ID:466509 发表于 2019-1-11 15:28 | 只看该作者
谢谢,很好,很实用
回复

使用道具 举报

18#
ID:396487 发表于 2019-1-12 01:17 来自手机 | 只看该作者
正好需要
回复

使用道具 举报

19#
ID:467304 发表于 2019-1-13 16:57 | 只看该作者
感谢楼主大佬啊,简洁明了!
回复

使用道具 举报

20#
ID:483488 发表于 2019-3-2 23:18 | 只看该作者
get!非常棒!
回复

使用道具 举报

21#
ID:239855 发表于 2019-4-7 00:08 来自手机 | 只看该作者
好东西!!!
回复

使用道具 举报

22#
ID:516413 发表于 2019-6-27 08:59 | 只看该作者
楼主,我试了你的仿真。点击SW2的时候编码器的值并没有减小,没反应,是程序有BUG吗?还是什么地方没操作对?
回复

使用道具 举报

23#
ID:579065 发表于 2019-7-6 18:11 | 只看该作者
感谢楼主分享,很受用
回复

使用道具 举报

24#
ID:241416 发表于 2019-7-8 17:24 | 只看该作者
学习一下好东西
回复

使用道具 举报

25#
ID:582247 发表于 2019-7-11 19:33 | 只看该作者
厉害,必须赞一个
回复

使用道具 举报

26#
ID:606488 发表于 2019-9-2 17:03 | 只看该作者
点赞。。。。
回复

使用道具 举报

27#
ID:521117 发表于 2019-10-6 21:31 | 只看该作者
编码器看似很简单的一个器件,其时一点都不简单。学习下,感谢
回复

使用道具 举报

28#
ID:34298 发表于 2019-10-7 13:51 | 只看该作者
ElecC 发表于 2019-6-27 08:59
楼主,我试了你的仿真。点击SW2的时候编码器的值并没有减小,没反应,是程序有BUG吗?还是什么地方没操作对 ...

就是 我也试了 值不会减 ,只会增加  不会减少,程序可能有问题。
回复

使用道具 举报

29#
ID:171036 发表于 2019-12-8 11:00 | 只看该作者
如何下载
回复

使用道具 举报

30#
ID:171036 发表于 2019-12-8 11:00 | 只看该作者
如何下载
回复

使用道具 举报

31#
ID:221051 发表于 2020-1-16 21:56 | 只看该作者
谢谢楼主的分享。
回复

使用道具 举报

32#
ID:440637 发表于 2020-2-18 16:11 | 只看该作者

好资料,一定要分享学习
回复

使用道具 举报

33#
ID:626079 发表于 2020-2-18 17:24 | 只看该作者
想不到这儿有这个资料, 之前看了这个东东,不知道原理,也没敢下手买。 先标记下,空了好好学习学习。
回复

使用道具 举报

34#
ID:298008 发表于 2020-2-19 15:44 | 只看该作者
谢谢楼主分享!!!!
回复

使用道具 举报

35#
ID:145036 发表于 2020-4-12 21:51 | 只看该作者
好资料,一定要分享学习
回复

使用道具 举报

36#
ID:747767 发表于 2020-5-9 16:35 | 只看该作者
谢谢!!正好需要
回复

使用道具 举报

37#
ID:261560 发表于 2020-6-20 16:33 | 只看该作者
这个是测角度的吗
回复

使用道具 举报

38#
ID:785326 发表于 2020-6-20 22:21 | 只看该作者
很好用,很详细
回复

使用道具 举报

39#
ID:688460 发表于 2020-7-2 07:05 | 只看该作者
好东西,好好学习,天天向上!感谢楼主的无私奉献!
回复

使用道具 举报

40#
ID:757976 发表于 2020-7-2 08:56 | 只看该作者
编码器,io口捕捉脉冲,很好的资料,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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