#include "display.h" #include "gd32e230_libopt.h" #include "SysTick.h" //voltage #define V_COM1 GPIO_PIN_0 #define V_COM2 GPIO_PIN_1 #define V_COM3 GPIO_PIN_2 #define V_COM4 GPIO_PIN_10 #define I_COM5 GPIO_PIN_14 #define I_COM6 GPIO_PIN_13 #define I_COM7 GPIO_PIN_12 #define I_COM8 GPIO_PIN_11 #define D_A GPIO_PIN_15 #define D_B GPIO_PIN_7 #define D_C GPIO_PIN_9 #define D_D GPIO_PIN_11 #define D_E GPIO_PIN_12 #define D_F GPIO_PIN_15 #define D_G GPIO_PIN_8 #define D_DP GPIO_PIN_10 #define V_C_1_H gpio_bit_set(GPIOB,V_COM1); #define V_C_2_H gpio_bit_set(GPIOB,V_COM2); #define V_C_3_H gpio_bit_set(GPIOB,V_COM3); #define V_C_4_H gpio_bit_set(GPIOB,V_COM4); #define I_C_5_H gpio_bit_set(GPIOB,I_COM5); #define I_C_6_H gpio_bit_set(GPIOB,I_COM6); #define I_C_7_H gpio_bit_set(GPIOB,I_COM7); #define I_C_8_H gpio_bit_set(GPIOB,I_COM8); #define V_C_1_L gpio_bit_reset(GPIOB,V_COM1); #define V_C_2_L gpio_bit_reset(GPIOB,V_COM2); #define V_C_3_L gpio_bit_reset(GPIOB,V_COM3); #define V_C_4_L gpio_bit_reset(GPIOB,V_COM4); #define I_C_5_L gpio_bit_reset(GPIOB,I_COM5); #define I_C_6_L gpio_bit_reset(GPIOB,I_COM6); #define I_C_7_L gpio_bit_reset(GPIOB,I_COM7); #define I_C_8_L gpio_bit_reset(GPIOB,I_COM8); #define D_A_H gpio_bit_set(GPIOB,D_A); #define D_B_H gpio_bit_set(GPIOA,D_B); #define D_C_H gpio_bit_set(GPIOA,D_C); #define D_D_H gpio_bit_set(GPIOA,D_D); #define D_E_H gpio_bit_set(GPIOA,D_E); #define D_F_H gpio_bit_set(GPIOA,D_F); #define D_G_H gpio_bit_set(GPIOA,D_G); #define D_DP_H gpio_bit_set(GPIOA,D_DP); #define D_A_L gpio_bit_reset(GPIOB,D_A); #define D_B_L gpio_bit_reset(GPIOA,D_B); #define D_C_L gpio_bit_reset(GPIOA,D_C); #define D_D_L gpio_bit_reset(GPIOA,D_D); #define D_E_L gpio_bit_reset(GPIOA,D_E); #define D_F_L gpio_bit_reset(GPIOA,D_F); #define D_G_L gpio_bit_reset(GPIOA,D_G); #define D_DP_L gpio_bit_reset(GPIOA,D_DP); enum{ CHANNEL_1 = 0, CHANNEL_2, CHANNEL_3, CHANNEL_4, CHANNEL_5, CHANNEL_6, CHANNEL_7, CHANNEL_8 }; uint8_t table[20][8]={ {1,1,1,1,1,1,0,0}, // 0 {0,1,1,0,0,0,0,0}, // 1 {1,1,0,1,1,0,1,0}, // 2 {1,1,1,1,0,0,1,0}, // 3 {0,1,1,0,0,1,1,0}, // 4 {1,0,1,1,0,1,1,0}, // 5 {1,0,1,1,1,1,1,0}, // 6 {1,1,1,0,0,0,0,0}, // 7 {1,1,1,1,1,1,1,0}, // 8 {1,1,1,1,0,1,1,0}, // 9 {1,1,1,1,1,1,0,1}, // 0 {0,1,1,0,0,0,0,1}, // 1. {1,1,0,1,1,0,1,1}, // 2. {1,1,1,1,0,0,1,1}, // 3. {0,1,1,0,0,1,1,1}, // 4. {1,0,1,1,0,1,1,1}, // 5. {1,0,1,1,1,1,1,1}, // 6. {1,1,1,0,0,0,0,1}, // 7. {1,1,1,1,1,1,1,1}, // 8. {1,1,1,1,0,1,1,1}, // 9. }; void DisplayInit(void) { rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOA); gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,V_COM1| V_COM2 | V_COM3 | V_COM4 | I_COM5 | I_COM6 | I_COM7 | I_COM8 | D_A); gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, V_COM1| V_COM2 | V_COM3 | V_COM4 | I_COM5 | I_COM6 | I_COM7 | I_COM8 | D_A); gpio_bit_reset(GPIOB, V_COM1| V_COM2 | V_COM3 | V_COM4 | I_COM5 | I_COM6 | I_COM7 | I_COM8); gpio_bit_set(GPIOB, D_A); gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,D_B| D_C | D_D | D_E | D_F | D_G | D_DP); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, D_B| D_C | D_D | D_E | D_F | D_DP); gpio_bit_set(GPIOA, D_B| D_C | D_D | D_E | D_F |D_G| D_DP); } static show_num(uint16_t _com,int num) { //clear chong ying V_C_1_H V_C_2_H V_C_3_H V_C_4_H I_C_5_H I_C_6_H I_C_7_H I_C_8_H // D_A_L D_B_L D_C_L D_D_L D_E_L D_F_L D_G_L D_DP_L // switch(_com) { case CHANNEL_1: V_C_1_L break; case CHANNEL_2: V_C_2_L break; case CHANNEL_3: V_C_3_L break; case CHANNEL_4: V_C_4_L break; case CHANNEL_5: I_C_5_L break; case CHANNEL_6: I_C_6_L break; case CHANNEL_7: I_C_7_L break; case CHANNEL_8: I_C_8_L break; default: break; } // for(int i = 0; i < 8; i ++) { if(table[num][i] > 0) { switch(i) { case 0: D_A_H break; case 1: D_B_H break; case 2: D_C_H break; case 3: D_D_H break; case 4: D_E_H break; case 5: D_F_H break; case 6: D_G_H break; case 7: D_DP_H; break; default: break; } }else { switch(i) { case 0: D_A_L break; case 1: D_B_L break; case 2: D_C_L break; case 3: D_D_L break; case 4: D_E_L break; case 5: D_F_L break; case 6: D_G_L break; case 7: D_DP_L break; default: break; } } } } void num_list(uint8_t *list,uint32_t num) { int i,temp = 0; for(i =0;i <4;i++) { temp = num % 10; num = num / 10; list[4-i-1] = temp; } } void display_num_list(uint8_t *list,float num) { uint32_t n,i; if(0 <= num && num <100) { n = num *100; num_list(list,n); list[1] += 10; }else if(100 <=num < 1000) { n = num * 10; num_list(list,n); list[2] += 10; }else if(1000 <= num && num < 10000) { n = num; num_list(list,n); }else { for(i = 0; i < 4;i++) list[i] = 9; } } void display_voltage(float num_f,float num_i) { int i, t; uint8_t num[9] = {0}; uint8_t channel[9] = {0}; display_num_list(num,num_i); display_num_list(&num[4],num_f); for(i = 0; i < 4;i++) { if(num[i] == 0) { channel[i] = 1; if(num[i+1] == 0) { continue; }else { break; } }else { break; } } for(i = 4; i < 8;i++) { if(num[i] == 0) { channel[i] = 1; if(num[i+1] == 0) { continue; }else { break; } }else { break; } } // for(t=0;t < 10;t++) // { for(i = 0; i < 9;i++) { if(channel[i] == 0) show_num(i,num[i]); for(int j = 0; j <1000;j++); } // } } void display_current(float num_f) { int i, t; uint8_t num[4] = {0}; uint8_t channel[4] = {0}; display_num_list(num,num_f); for(i = 0; i < 4;i++) { if(num[i] == 0) { channel[i] = 1; if(num[i+1] == 0) { continue; }else break; } } for(t=0;t < 10000;t++) { for(i = 0; i < 4;i++) { if(channel[i] == 0) show_num(i,num[i]); } } }