全國服務熱線

18219276011

2850818308

您當前位置:首頁>>升威資訊
升威資訊
公司新聞
企業視頻
行業資訊
技術支持
廣東升威電子制品有限公司
地址:東莞市塘廈鎮鳳凰崗鳳清路39號升威工業園
電話:0769-38833333-881
銷售電話:18219276011
傳真:0769-87930111
E-mail:sw@soundwell-cn.com
51單片機與旋轉編碼器模塊程序
發布時間:2019-03-01
發布者:
瀏覽次數:197次

小編從網上找到了一個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. ……………………



廣東升威電子制品是28年老牌編碼器廠家,是編碼器國家行業標準制定單位,專業生產各種旋轉編碼器,編碼器型號全,可完美替換國內外品牌編碼器.實力廠家,廠內有先進的生產設備及檢測設備,可完美配合客戶定制產品,可根據客戶需求定制增量型編碼器或絕對型編碼器,可定制編碼器的精度,脈沖以及編碼器的尺寸,找編碼器生產廠家就找升威電子.



編碼開關廠家


最新案例
蚂蚁彩票|官网登录 聚星彩票|手机app下载 众彩彩票|官网登录 大兴彩票|官网登录 桔子彩票|手机app下载 众彩彩票|手机app下载 66彩票|官网登录 头头彩票|官网登录 盈发彩票|官网登录 聚彩彩票|手机app下载 248彩票|手机app下载 8828彩票|官网登录 天福彩票|官网登录