找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 40054|回復(fù): 62
收起左側(cè)

51單片機(jī)旋轉(zhuǎn)編碼器模塊KY-040調(diào)試程序+仿真 LCD1602顯示

  [復(fù)制鏈接]
ID:163705 發(fā)表于 2017-9-7 14:26 | 顯示全部樓層 |閱讀模式
給大家分享一個51單片機(jī)+1602液晶屏顯示 KY-040旋轉(zhuǎn)編碼器模塊的程序和仿真

程序功能:旋轉(zhuǎn)編碼器順時針旋轉(zhuǎn),顯示數(shù)值增加
               旋轉(zhuǎn)編碼器逆時針旋轉(zhuǎn),顯示數(shù)值減小
               旋轉(zhuǎn)編碼器按下,切換顯示ON/OFF

根據(jù)旋轉(zhuǎn)編碼器KY-040模塊資料可知:


在下降觸發(fā)模式下,AB進(jìn)行電平比較:
A觸發(fā)的中斷:同加異減
B觸發(fā)的中斷:同減異加
反之亦然

那么可以通過手動模擬外部中斷觸發(fā)瞬間的電平狀態(tài)來進(jìn)行仿真,
                      CLK(A) ---- P3^2
                      DT(B)  ---- P3^3
                      SW(Z)  ---- P3^4
外部中斷0下降沿觸發(fā)后,對B的電平進(jìn)行判斷即可知道旋轉(zhuǎn)編碼器
的旋轉(zhuǎn)方向。
圖片1.png 圖片3.png 圖片4.png
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
圖片2.png

單片機(jī)源程序如下:

  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. * 函 數(shù) 名       : main
  14. * 函數(shù)功能                 : 主函數(shù)
  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. * 函 數(shù) 名         : IntConfiguration()
  56. * 函數(shù)功能                   : 設(shè)置外部中斷
  57. * 輸    入         : 無
  58. * 輸    出         : 無
  59. *******************************************************************************/
  60. void IntConfiguration()
  61. {
  62.         //設(shè)置INT0
  63.         IT0=1;//跳變沿出發(fā)方式(下降沿)
  64.         EX0=1;//打開INT0的中斷允許。
  65.         
  66.         EA=1;//打開總中斷        
  67. }
  68. /*******************************************************************************
  69. * 函 數(shù) 名         : Delay(unsigned int n)
  70. * 函數(shù)功能                   : 延時
  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. * 函 數(shù) 名         : Int0()        interrupt 0
  85. * 函數(shù)功能                   : 外部中斷0的中斷函數(shù)
  86. * 輸    入         : 無
  87. * 輸    出         : 無
  88. *******************************************************************************/

  89. void Int0()        interrupt 0                //外部中斷0的中斷函數(shù)
  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黑下載附件…………
復(fù)制代碼
51hei.gif
0.png
所有資料51hei附件下載,注意仿真是用Proteus7.5畫的,高版本可能無法打開,請安裝7.5或7.8版本,擴(kuò)展名為dsn的那個:
旋轉(zhuǎn)編碼器.zip (369.52 KB, 下載次數(shù): 1105)

評分

參與人數(shù) 5黑幣 +104 收起 理由
殘...月 + 6 很給力!
euxbjfjfjcn + 30
stkh + 8 贊一個!
zkele + 10 共享資料的黑幣獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:164988 發(fā)表于 2017-9-7 17:34 | 顯示全部樓層
好資料,一定要分享學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:276790 發(fā)表于 2018-1-16 23:20 | 顯示全部樓層
看看,不知道如何?
回復(fù)

使用道具 舉報(bào)

ID:283686 發(fā)表于 2018-2-27 09:09 | 顯示全部樓層
好東西  正是需要的
回復(fù)

使用道具 舉報(bào)

ID:290052 發(fā)表于 2018-3-10 14:59 | 顯示全部樓層
找了一圈沒有旋轉(zhuǎn)編碼器,原來要這么搞
回復(fù)

使用道具 舉報(bào)

ID:289947 發(fā)表于 2018-3-16 20:42 | 顯示全部樓層
Hwinnie 發(fā)表于 2018-3-10 14:59
找了一圈沒有旋轉(zhuǎn)編碼器,原來要這么搞

可以分享下 嗎  
還沒賺夠黑幣
回復(fù)

使用道具 舉報(bào)

ID:146874 發(fā)表于 2018-4-30 11:10 | 顯示全部樓層
謝謝分享,正在用這個編碼器,很好的參考資料
回復(fù)

使用道具 舉報(bào)

ID:313702 發(fā)表于 2018-5-10 13:45 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:231918 發(fā)表于 2018-5-24 20:45 | 顯示全部樓層
真好  我正在找,就看到了
回復(fù)

使用道具 舉報(bào)

ID:370819 發(fā)表于 2018-7-13 12:15 | 顯示全部樓層
正需要謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:67312 發(fā)表于 2018-7-18 15:09 | 顯示全部樓層
謝謝,樓主好人,我學(xué)了很久都看不明白,你這是雪中送炭啊
回復(fù)

使用道具 舉報(bào)

ID:353063 發(fā)表于 2018-9-3 16:17 | 顯示全部樓層
好資料,一定要學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:393920 發(fā)表于 2018-9-5 15:32 | 顯示全部樓層
很棒的思路
回復(fù)

使用道具 舉報(bào)

ID:331575 發(fā)表于 2018-10-21 19:02 來自手機(jī) | 顯示全部樓層
謝謝。值得學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:307643 發(fā)表于 2018-11-11 19:22 | 顯示全部樓層
很詳細(xì),贊一個
回復(fù)

使用道具 舉報(bào)

ID:424642 發(fā)表于 2018-11-11 19:45 | 顯示全部樓層

謝謝分享,正在用這個編碼器,很好的參考資料
回復(fù)

使用道具 舉報(bào)

ID:466509 發(fā)表于 2019-1-11 15:28 | 顯示全部樓層
謝謝,很好,很實(shí)用
回復(fù)

使用道具 舉報(bào)

ID:396487 發(fā)表于 2019-1-12 01:17 來自手機(jī) | 顯示全部樓層
正好需要
回復(fù)

使用道具 舉報(bào)

ID:467304 發(fā)表于 2019-1-13 16:57 | 顯示全部樓層
感謝樓主大佬啊,簡潔明了!
回復(fù)

使用道具 舉報(bào)

ID:483488 發(fā)表于 2019-3-2 23:18 | 顯示全部樓層
get!非常棒!
回復(fù)

使用道具 舉報(bào)

ID:239855 發(fā)表于 2019-4-7 00:08 來自手機(jī) | 顯示全部樓層
好東西。!
回復(fù)

使用道具 舉報(bào)

ID:516413 發(fā)表于 2019-6-27 08:59 | 顯示全部樓層
樓主,我試了你的仿真。點(diǎn)擊SW2的時候編碼器的值并沒有減小,沒反應(yīng),是程序有BUG嗎?還是什么地方?jīng)]操作對?
回復(fù)

使用道具 舉報(bào)

ID:579065 發(fā)表于 2019-7-6 18:11 | 顯示全部樓層
感謝樓主分享,很受用
回復(fù)

使用道具 舉報(bào)

ID:241416 發(fā)表于 2019-7-8 17:24 | 顯示全部樓層
學(xué)習(xí)一下好東西
回復(fù)

使用道具 舉報(bào)

ID:582247 發(fā)表于 2019-7-11 19:33 | 顯示全部樓層
厲害,必須贊一個
回復(fù)

使用道具 舉報(bào)

ID:606488 發(fā)表于 2019-9-2 17:03 | 顯示全部樓層
點(diǎn)贊。。。。
回復(fù)

使用道具 舉報(bào)

ID:521117 發(fā)表于 2019-10-6 21:31 | 顯示全部樓層
編碼器看似很簡單的一個器件,其時一點(diǎn)都不簡單。學(xué)習(xí)下,感謝
回復(fù)

使用道具 舉報(bào)

ID:34298 發(fā)表于 2019-10-7 13:51 | 顯示全部樓層
ElecC 發(fā)表于 2019-6-27 08:59
樓主,我試了你的仿真。點(diǎn)擊SW2的時候編碼器的值并沒有減小,沒反應(yīng),是程序有BUG嗎?還是什么地方?jīng)]操作對 ...

就是 我也試了 值不會減 ,只會增加  不會減少,程序可能有問題。
回復(fù)

使用道具 舉報(bào)

ID:171036 發(fā)表于 2019-12-8 11:00 | 顯示全部樓層
如何下載
回復(fù)

使用道具 舉報(bào)

ID:171036 發(fā)表于 2019-12-8 11:00 | 顯示全部樓層
如何下載
回復(fù)

使用道具 舉報(bào)

ID:221051 發(fā)表于 2020-1-16 21:56 | 顯示全部樓層
謝謝樓主的分享。
回復(fù)

使用道具 舉報(bào)

ID:440637 發(fā)表于 2020-2-18 16:11 | 顯示全部樓層

好資料,一定要分享學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:626079 發(fā)表于 2020-2-18 17:24 | 顯示全部樓層
想不到這兒有這個資料, 之前看了這個東東,不知道原理,也沒敢下手買。 先標(biāo)記下,空了好好學(xué)習(xí)學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

ID:298008 發(fā)表于 2020-2-19 15:44 | 顯示全部樓層
謝謝樓主分享。。!
回復(fù)

使用道具 舉報(bào)

ID:145036 發(fā)表于 2020-4-12 21:51 | 顯示全部樓層
好資料,一定要分享學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:747767 發(fā)表于 2020-5-9 16:35 | 顯示全部樓層
謝謝!正好需要
回復(fù)

使用道具 舉報(bào)

ID:261560 發(fā)表于 2020-6-20 16:33 | 顯示全部樓層
這個是測角度的嗎
回復(fù)

使用道具 舉報(bào)

ID:785326 發(fā)表于 2020-6-20 22:21 | 顯示全部樓層
很好用,很詳細(xì)
回復(fù)

使用道具 舉報(bào)

ID:688460 發(fā)表于 2020-7-2 07:05 | 顯示全部樓層
好東西,好好學(xué)習(xí),天天向上!感謝樓主的無私奉獻(xiàn)!
回復(fù)

使用道具 舉報(bào)

ID:757976 發(fā)表于 2020-7-2 08:56 | 顯示全部樓層
編碼器,io口捕捉脈沖,很好的資料,謝謝
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表