久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 40622|回復: 62
收起左側

51單片機旋轉編碼器模塊KY-040調試程序+仿真 LCD1602顯示

  [復制鏈接]
ID:163705 發表于 2017-9-7 14:26 | 顯示全部樓層 |閱讀模式
給大家分享一個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的電平進行判斷即可知道旋轉編碼器
的旋轉方向。
圖片1.png 圖片3.png 圖片4.png
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
圖片2.png

單片機源程序如下:

  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.gif
0.png
所有資料51hei附件下載,注意仿真是用Proteus7.5畫的,高版本可能無法打開,請安裝7.5或7.8版本,擴展名為dsn的那個:
旋轉編碼器.zip (369.52 KB, 下載次數: 1105)

評分

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

查看全部評分

回復

使用道具 舉報

ID:164988 發表于 2017-9-7 17:34 | 顯示全部樓層
好資料,一定要分享學習
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

可以分享下 嗎  
還沒賺夠黑幣
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:353063 發表于 2018-9-3 16:17 | 顯示全部樓層
好資料,一定要學習學習
回復

使用道具 舉報

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

使用道具 舉報

ID:331575 發表于 2018-10-21 19:02 來自觸屏版 | 顯示全部樓層
謝謝。值得學習
回復

使用道具 舉報

ID:307643 發表于 2018-11-11 19:22 | 顯示全部樓層
很詳細,贊一個
回復

使用道具 舉報

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

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

使用道具 舉報

ID:466509 發表于 2019-1-11 15:28 | 顯示全部樓層
謝謝,很好,很實用
回復

使用道具 舉報

ID:396487 發表于 2019-1-12 01:17 來自觸屏版 | 顯示全部樓層
正好需要
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:239855 發表于 2019-4-7 00:08 來自觸屏版 | 顯示全部樓層
好東西。!
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:241416 發表于 2019-7-8 17:24 | 顯示全部樓層
學習一下好東西
回復

使用道具 舉報

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

使用道具 舉報

ID:606488 發表于 2019-9-2 17:03 | 顯示全部樓層
點贊。。。。
回復

使用道具 舉報

ID:521117 發表于 2019-10-6 21:31 | 顯示全部樓層
編碼器看似很簡單的一個器件,其時一點都不簡單。學習下,感謝
回復

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

好資料,一定要分享學習
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:145036 發表于 2020-4-12 21:51 | 顯示全部樓層
好資料,一定要分享學習
回復

使用道具 舉報

ID:747767 發表于 2020-5-9 16:35 | 顯示全部樓層
謝謝。≌眯枰
回復

使用道具 舉報

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

使用道具 舉報

ID:785326 發表于 2020-6-20 22:21 | 顯示全部樓層
很好用,很詳細
回復

使用道具 舉報

ID:688460 發表于 2020-7-2 07:05 | 顯示全部樓層
好東西,好好學習,天天向上!感謝樓主的無私奉獻!
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99视频在线免费观看 | 色婷婷激情 | 久久久久久久久久久久一区二区 | 欧美日韩国产一区二区三区 | 古装三级在线播放 | 成人a视频片观看免费 | 在线国产视频 | 精品国产乱码一区二区三区 | 国产在线一区二区 | 成人av免费 | 国产精品不卡一区 | 亚洲精品美女视频 | 日韩欧美在线精品 | 成人一区二区三区在线观看 | 伊人伊人网 | 久久美女视频 | 天天干天天干 | 91最新在线视频 | 综合久久综合久久 | 日韩视频区 | 91麻豆精品国产91久久久更新资源速度超快 | 国产精品亚洲片在线播放 | 日韩欧美一级 | 中文二区| 国产精品我不卡 | 亚洲人人 | 99福利视频 | 精品在线一区二区三区 | 91爱爱·com| 国户精品久久久久久久久久久不卡 | 精品少妇一区二区三区日产乱码 | 在线观看中文字幕 | 视频一区在线观看 | 一区二区日韩 | 在线看亚洲| 亚洲精品久久久久久久久久久久久 | 亚洲欧美国产精品久久 | 国产在线播放一区二区三区 | 欧美黄色片 | 国产精品一区二区久久 | 亚洲导航深夜福利涩涩屋 |