Browse Source

上傳檔案到 'firmware/display_test'

HCCFISH 7 months ago
parent
commit
d64c3b7e7c
1 changed files with 39 additions and 30 deletions
  1. 39 30
      firmware/display_test/display_test.ino

+ 39 - 30
firmware/display_test/display_test.ino

@@ -1,9 +1,11 @@
 #include <SoftI2C.h>
-#include "display_char.h" 
+#include "display_char.h"
 
-// Address of the I2C OLED 
+// Address of the I2C OLED
 #define OLED_I2C_ADDRESS 0x3C
 
+
+
 // Commands for SSD1306
 #define SSD1306_DISPLAYOFF          0xAE
 #define SSD1306_SETDISPLAYCLOCKDIV  0xD5
@@ -22,6 +24,19 @@
 #define SSD1306_NORMALDISPLAY       0xA6
 #define SSD1306_DISPLAYON           0xAF
 
+static uint16_t display_num[10][16] = display16X16_number;
+static uint16_t display_A[16] = display16X16_A;
+static uint16_t display_C[16] = display16X16_C;
+static uint16_t display_V[16] = display16X16_V;
+static uint16_t display_blank[16] = display16X16_blank;
+uint8_t voltage_dec_3;
+uint8_t voltage_dec_2;
+uint8_t voltage_dec_1;
+uint8_t voltage_dec_0;
+uint8_t current_dec_2;
+uint8_t current_dec_1;
+uint8_t current_dec_0;
+uint16_t* display_addr_list[16];
 void I2CWriteCommand(uint8_t command) {
   I2CStart();
   I2CSend(OLED_I2C_ADDRESS << 1); // I2C address + Write bit
@@ -66,7 +81,7 @@ void initializeOLED() {
   I2CWriteCommand(SSD1306_DISPLAYON);
 }
 
-void clearScreen(){
+void clearScreen() {
   for (uint8_t i = 0; i < 8; i++) {
     I2CWriteCommand(0xB0 + i); // Set page address
     I2CWriteCommand(0x00); // Set lower column address
@@ -77,39 +92,33 @@ void clearScreen(){
   }
 }
 
-void nextRow(){
+void nextRow() {
 
 }
 
-void lightScreen(){
+void lightScreen() {
   for (uint8_t i = 0; i < 8; i++) {
     I2CWriteCommand(0xB0 + i); // Set page address
     I2CWriteCommand(0x00); // Set lower column address
     I2CWriteCommand(0x10); // Set higher column address
     for (uint8_t j = 0; j < 128; j++) {
-      if (j%4==0){
+      if (j % 4 == 0) {
         I2CWriteData(0xAA);
-      }else{
+      } else {
         I2CWriteData(0x80);
       }
     }
   }
 }
 
-void PS_Screen(uint16_t voltage_num, uint16_t current_num, bool CC_mode){
-  static uint16_t display_num[10][16] = display16X16_number;
-  static uint16_t display_A[16] = display16X16_A;
-  static uint16_t display_C[16] = display16X16_C;
-  static uint16_t display_V[16] = display16X16_V;
-  static uint16_t display_blank[16] = display16X16_blank;
-  uint8_t voltage_dec_3 = (voltage_num / 1000) % 10;
-  uint8_t voltage_dec_2 = (voltage_num / 100) % 10;
-  uint8_t voltage_dec_1 = (voltage_num / 10) % 10;
-  uint8_t voltage_dec_0 = voltage_num % 10;
-  uint8_t current_dec_2 = (current_num / 100) % 10;
-  uint8_t current_dec_1 = (current_num / 10) % 10;
-  uint8_t current_dec_0 = current_num % 10;
-  uint16_t* display_addr_list[16];
+void PS_Screen(uint16_t voltage_num, uint16_t current_num, bool CC_mode) {
+  voltage_dec_3 = (voltage_num / 1000) % 10;
+  voltage_dec_2 = (voltage_num / 100) % 10;
+  voltage_dec_1 = (voltage_num / 10) % 10;
+  voltage_dec_0 = voltage_num % 10;
+  current_dec_2 = (current_num / 100) % 10;
+  current_dec_1 = (current_num / 10) % 10;
+  current_dec_0 = current_num % 10;
   display_addr_list[0] = (!CC_mode) ? display_C : display_blank;
   display_addr_list[1] = (!CC_mode) ? display_V : display_blank;
   display_addr_list[2] = display_blank;
@@ -126,22 +135,22 @@ void PS_Screen(uint16_t voltage_num, uint16_t current_num, bool CC_mode){
   display_addr_list[13] = display_num[current_dec_1];
   display_addr_list[14] = display_num[current_dec_0];
   display_addr_list[15] = display_A;
-  
+
   for (uint8_t i = 0; i < 8; i++) {
     I2CWriteCommand(0xB0 + i); // Set page address
     I2CWriteCommand(0x00); // Set lower column address
     I2CWriteCommand(0x10); // Set higher column address
     for (uint8_t j = 0; j < 128; j++) {
 
-      if(i%4 == 3 && (j == 79||j==80)){
+      if (i % 4 == 3 && (j == 79 || j == 80)) {
         I2CWriteData(0xA0);
       }
-      else{
+      else {
         uint16_t push_temp = 0;
-        uint8_t sel_col = 15-j%16;
+        uint8_t sel_col = 15 - j % 16;
         for (uint8_t k = 0; k < 4; k++) {
-            uint8_t bit = ((display_addr_list[(j>>4)+(i/4*8)])[((i%4)<<2)+k]>>(sel_col)) & 0x0001;
-            push_temp |= (bit << (2*k+1));
+          uint8_t bit = ((display_addr_list[(j >> 4) + (i / 4 * 8)])[((i % 4) << 2) + k] >> (sel_col)) & 0x0001;
+          push_temp |= (bit << (2 * k + 1));
         }
         I2CWriteData(push_temp);
       }
@@ -162,7 +171,7 @@ void setup() {
 void loop() {
   // Clear the display
   clearScreen();
-  delay(1000);
-  PS_Screen(8888,888,0);
-  delay(1000);
+  delay(500);
+  PS_Screen(8888, 888, 1);
+  delay(500);
 }