找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3836|回复: 0
收起左侧

arduino_4*4矩阵键盘扫描_oled(i2c)显示_串口显示程序

[复制链接]
ID:517517 发表于 2019-7-18 20:50 | 显示全部楼层 |阅读模式
arduino的4*4矩阵键盘的扫描程序oled(i2c)的简单应用显示

单片机源程序如下:
  1. #include <Wire.h>  //oled SCL——A5 SDA——A4
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_SSD1306.h>
  4. #define OLED_RESET 4
  5. Adafruit_SSD1306 display(OLED_RESET);
  6. #define NUMFLAKES 10
  7. #define XPOS 0
  8. #define YPOS 1
  9. #define DELTAY 2
  10. #define LOGO16_GLCD_HEIGHT 16
  11. #define LOGO16_GLCD_WIDTH  16
  12. #if (SSD1306_LCDHEIGHT != 64)
  13. #error("Height incorrect, please fix Adafruit_SSD1306.h!");
  14. #endif

  15. int R1 = 4;//行引脚  
  16. int R2 = 5;
  17. int R3 = 6;
  18. int R4 = 7;
  19. int C1 = 8;//列引脚
  20. int C2 = 9;
  21. int C3 = 10;
  22. int C4 = 11;
  23. int key_Scan();
  24. void pinHigh();
  25. void setup() {
  26.   pinMode(R1, OUTPUT);
  27.   pinMode(R2, OUTPUT);
  28.   pinMode(R3, OUTPUT);
  29.   pinMode(R4, OUTPUT);
  30.   
  31.   pinMode(C1, INPUT_PULLUP);
  32.   pinMode(C2, INPUT_PULLUP);
  33.   pinMode(C3, INPUT_PULLUP);
  34.   pinMode(C4, INPUT_PULLUP);
  35.   
  36.   Serial.begin(115200);
  37.   delay(100);
  38.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  39.   display.fillScreen(WHITE);
  40.   display.display();
  41.   delay(1000);//全屏显示,检查是否有坏点
  42.   display.fillScreen(BLACK);
  43.   display.display();
  44.   
  45. }
  46. int i;
  47. void loop(){
  48.     i = key_Scan();
  49.     if(i){
  50.       Serial.print("按下第");
  51.       Serial.print(i);
  52.       Serial.println("个按键");
  53.       display.clearDisplay();
  54.       display.setTextSize(2);
  55.       display.setTextColor(WHITE);
  56.       display.setCursor(0,0);
  57.       display.print("NO.key= ");
  58.       display.print(i);
  59.       display.display();  
  60.     }     
  61. }
  62.   
  63. int key_Scan(){
  64.   pinHigh();//扫描第一行
  65.   digitalWrite(R1, LOW);
  66.   if(digitalRead(C1) == LOW){
  67.     while(digitalRead(C1) == LOW);
  68.     return 1;
  69.   }
  70.   if(digitalRead(C2) == LOW){
  71.     while(digitalRead(C2) == LOW);
  72.     return 2;
  73.   }
  74.   if(digitalRead(C3) == LOW){
  75.     while(digitalRead(C3) == LOW);
  76.     return 3;
  77.   }
  78.   if(digitalRead(C4) == LOW){
  79.     while(digitalRead(C4) == LOW);
  80.     return 4;
  81.   }

  82.   pinHigh();//扫描第二行
  83.   digitalWrite(R2, LOW);
  84.   if(digitalRead(C1) == LOW){
  85.     while(digitalRead(C1) == LOW);
  86.     return 5;
  87.   }
  88.   if(digitalRead(C2) == LOW){
  89.     while(digitalRead(C2) == LOW);
  90.     return 6;
  91.   }
  92.   if(digitalRead(C3) == LOW){
  93.     while(digitalRead(C3) == LOW);
  94.     return 7;
  95.   }
  96.   if(digitalRead(C4) == LOW){
  97.     while(digitalRead(C4) == LOW);
  98.     return 8;
  99.   }

  100.   pinHigh();//扫描第三行
  101.   digitalWrite(R3, LOW);
  102.   if(digitalRead(C1) == LOW){
  103.     while(digitalRead(C1) == LOW);
  104.     return 9;
  105.   }
  106.   if(digitalRead(C2) == LOW){
  107.     while(digitalRead(C2) == LOW);
  108.     return 10;
  109.   }
  110.   if(digitalRead(C3) == LOW){
  111.     while(digitalRead(C3) == LOW);
  112.     return 11;
  113.   }
  114.   if(digitalRead(C4) == LOW){
  115.     while(digitalRead(C4) == LOW);
  116.     return 12;
  117.   }

  118.   pinHigh();//扫描第四行
  119.   digitalWrite(R4, LOW);
  120.   if(digitalRead(C1)== LOW){
  121.     while(digitalRead(C1) == LOW);
  122.     return 13;
  123.   }
  124.   if(digitalRead(C2) == LOW){
  125.     while(digitalRead(C2) == LOW);
  126.     return 14;
  127.   }
  128.   if(digitalRead(C3) == LOW){
  129.     while(digitalRead(C3) == LOW);
  130.     return 15;
  131.   }
  132.   if(digitalRead(C4) == LOW){
  133.     while(digitalRead(C4) == LOW);
  134.     return 16;
  135.   }
  136.   return 0;
  137. }

  138. void pinHigh(){
  139.   digitalWrite(R1, HIGH);
  140.   digitalWrite(R2, HIGH);
  141.   digitalWrite(R3, HIGH);
  142.   digitalWrite(R4, HIGH);
  143. }
复制代码

所有资料51hei提供下载:
4x4矩阵键盘.rar (25.6 KB, 下载次数: 37)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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