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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4720|回復: 0
收起左側

幾根線做的Arduino液晶屏旋轉編碼器帶你進入數字化編程之旅

[復制鏈接]
ID:358930 發表于 2018-11-24 21:47 | 顯示全部樓層 |閱讀模式
這個板塊沒有51熱鬧,但是編程簡單,可以有更多的精力去創意,其實沒有創意和靈魂的東西永遠不會成為經典。

制作出來的實物圖如下:
20181124_213554.jpg 20181124_213814.jpg 20181124_213840.jpg 20181124_213625.jpg 20181124_213857.jpg

Arduino程序源碼:
  1. #define ENCODER_A_PIN 2
  2. #define ENCODER_B_PIN 3
  3. #define SWITCH_PIN    4
  4. long position;//
  5.       int latchPin = 8;//RS
  6.       int dataPin = 9;//RW
  7.       int clockPin =10;//EN
  8.       unsigned char tabe[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//查表法//0-9數字
  9. void setup()
  10. {
  11.   //setup our pins 初始化我們的需要的引腳
  12.   pinMode(ENCODER_A_PIN, INPUT);
  13.   pinMode(ENCODER_B_PIN, INPUT);
  14.   pinMode(SWITCH_PIN, INPUT);

  15.   attachInterrupt(0, read_quadrature, CHANGE);

  16.         pinMode(latchPin, OUTPUT); //設置引腳為輸出
  17.         pinMode(clockPin, OUTPUT);
  18.         pinMode(dataPin, OUTPUT);  
  19.        Lcdint( );//lcd  

  20. }
  21. ////////////////////////////寫SPI時序,具體參考shiftout 命令使用/////////////////////////////
  22.       void WriteByte(int dat)
  23.       {

  24.           digitalWrite(latchPin, HIGH);         
  25.           shiftOut(dataPin, clockPin, MSBFIRST, dat);
  26.           digitalWrite(latchPin, LOW);
  27.       }
  28.       ///////////////////寫命令/////////////////////////////////////
  29.       void LcdCommandWrite(int value) {  
  30.         int H_data,L_data;
  31.          H_data = value;
  32.          H_data &= 0xf0;           //屏蔽低4位的數據
  33.          L_data = value;             //xxxx0000格式
  34.          L_data &= 0x0f;           //屏蔽高4位的數據
  35.          L_data <<= 4;             //xxxx0000格式
  36.          WriteByte(0xf8);          //RS=0,寫入的是指令;
  37.          WriteByte(H_data);
  38.          WriteByte(L_data);
  39.       }   
  40.       //////////////////////寫數據/////////////////////////////////////
  41.       void LcdDataWrite(int value) {  
  42.         int H_data,L_data;
  43.          H_data = value;
  44.          H_data &= 0xf0;           //屏蔽低4位的數據
  45.          L_data = value;             //xxxx0000格式
  46.          L_data &= 0x0f;           //屏蔽高4位的數據
  47.          L_data <<= 4;             //xxxx0000格式
  48.          WriteByte(0xfa);          //RS=1,寫入的是數據
  49.          WriteByte(H_data);
  50.          WriteByte(L_data);
  51.       }   
  52.     ////////////////////// /////////////////////////////////////
  53.       void Lcdint(void)
  54.       {  
  55.         LcdCommandWrite(0x30);  //  設定為基本指令         
  56.         delay(5);     
  57.         LcdCommandWrite(0x03);  // //允許輸入卷動位址
  58.         delay(5);
  59.         LcdCommandWrite(0x0c);  // //脫離隨眠狀態,顯示打開,關光標,反白關.
  60.         delay(5);
  61.          LcdCommandWrite(0x01);  // 清屏指令.         
  62.         delay(5);     
  63.         LcdCommandWrite(0x06);  // AC自動加一,光標右移,整體顯示不移動  
  64.         delay(5);   
  65.       }
  66.    void LCD_zfc(char *p)//定義一個帶指針的函數?(字符串)
  67. {
  68.         while(*p!=0)//不能用";"
  69.         LcdDataWrite(*p++);
  70. }   
  71. <font style="font-size: 36.9444px"> /************************顯示1 *********************************/                                                           </font>
  72. void display1(void)
  73. {
  74.     int dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;

  75.           long temp ;                        //存放溫度值的10倍=12345678;  

  76.         temp=position;//旋轉
  77.         //temp=12345678;   
  78.         dt1 = temp%10;//1位
  79.         dt2 = temp%100/10;//2位
  80.         dt3 = temp%1000/100;//3位
  81.         dt4 = temp%10000/1000;//4位

  82.         dt5 = temp%100000/10000;//5位
  83.         dt6 = temp%1000000/100000;//6位
  84.         dt7 = temp%10000000/1000000;//7位
  85.         dt8 = temp/10000000;//8位             最高位  
  86.         
  87.     LcdCommandWrite(0x98);//LCD12864_W ((0或1),****)  0寫指令  1寫數據
  88.    // 0xCE,0xC2,0xB6,0xC8

  89.          LcdDataWrite(0xd0 );
  90.          LcdDataWrite(0xfd );
  91.          LcdDataWrite(0xd7 );
  92.          LcdDataWrite(0xaa );
  93.          LcdDataWrite(0x3a);// .

  94.     // LcdDataWrite(tabe[dt8]);//8位
  95.      //LcdDataWrite(tabe[dt7]);//7位
  96.     // LcdDataWrite(tabe[dt6]);//6位
  97.      //LcdDataWrite(tabe[dt5]);//5位   
  98.      LcdDataWrite(tabe[dt4]);//4位
  99.      LcdDataWrite(tabe[dt3]);//3位
  100.      //LcdDataWrite(0x2e);// .....
  101.      LcdDataWrite(tabe[dt2]);//2位
  102.      LcdDataWrite(tabe[dt1]);//1位   
  103.      LCD_zfc(" R");  
  104. }
  105. void read_quadrature()
  106. {  
  107.   if (digitalRead(ENCODER_A_PIN) == LOW)
  108.   {        
  109.       if (digitalRead(ENCODER_B_PIN) == LOW)
  110.       position++;
  111.       if(position>1000)position=1000;
  112.   }  
  113.   else
  114.   {   
  115.      if (digitalRead(ENCODER_B_PIN) == LOW)
  116.       position--;
  117.       if(position<0)position=0;
  118.   }  
  119.    if (digitalRead( SWITCH_PIN ) == LOW)
  120.   {
  121.   position=0;
  122.   }
  123. }
  124. void loop()
  125. {
  126.         display1();//旋轉
  127.         read_quadrature();

  128. }
復制代碼

全部資料51hei下載地址:
128顯旋轉編碼器OK2.zip (2.07 KB, 下載次數: 30)


評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费在线观看 | 本道综合精品 | 成人a在线观看 | 一级国产精品一级国产精品片 | 狠狠干在线 | 精品在线看 | 在线中文字幕视频 | 久久er99热精品一区二区 | 国产精品久久久久久久午夜片 | 天堂av中文在线 | 91看片官网| 日产精品久久久一区二区福利 | 操视频网站 | 一区二区三区免费看 | av免费网址 | 黄色欧美 | 国产美女在线观看 | 日韩精品免费在线观看 | 午夜精品一区 | 69热视频在线观看 | 午夜爱爱毛片xxxx视频免费看 | 久久久久久久久久久久亚洲 | 99久久婷婷 | 久久久久久久久久久久91 | 成人综合视频在线 | 伊人网站视频 | 国产一区二区三区四区三区四 | 一区二区三区四区免费视频 | 日韩免费一级 | 懂色中文一区二区三区在线视频 | 亚洲精品一区二三区不卡 | 久久国内 | 成人免费在线播放视频 | 羞羞的视频在线观看 | jizz视频| www.888www看片| 蜜臀久久99精品久久久久野外 | 日本a∨视频 | 日日欧美 | 国产第一亚洲 | 91九色视频在线 |