/* * my_code.c * * Created on: Oct 2, 2021 * Author: wuwenfeng */ #include "my_code.h" #include "button.h" #define HC595_DCK(x) HAL_GPIO_WritePin(HC595_DLK_GPIO_Port, HC595_DLK_Pin, x); #define HC595_RCK(x) HAL_GPIO_WritePin(HC595_RLK_GPIO_Port, HC595_RLK_Pin, x); #define HC595_SCK(x) HAL_GPIO_WritePin(HC595_SLK_GPIO_Port, HC595_SLK_Pin, x); #define HC595_SCK2(x) HAL_GPIO_WritePin(HC595_SLK2_GPIO_Port, HC595_SLK2_Pin, x); #define READ_HC595_DCK HAL_GPIO_ReadPin(HC595_DLK_GPIO_Port,HC595_DLK_Pin) extern ADC_HandleTypeDef hadc; struct button key1,key2,key3,key4,overload; const char d_num_data[10]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; #define set_filtering_times 50 struct { //ADC_HandleTypeDef *device; int filtering_times; unsigned long adc_filtering[2]; int adc_value[2]; }ADCC; struct { char d_num[4]; char button_flag[4]; char dot1:1; char dot2:1; char dot3:1; char dot4:1; char led_run:1; char moto1a:1; char moto1b:1; char moto2a:1; char moto2b:1; }dis_buff; struct { uint32_t moto_run; int pwm_run; char moto1a; char moto1b; char moto2a; char moto2b; char moto1a_; char moto1b_; char moto2a_; char moto2b_; }moto; void ds_in_or_out(char a)//change the io function { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = HC595_DLK_Pin; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; if(a==0) { GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; } if(a==1) { GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; } HAL_GPIO_Init(HC595_DLK_GPIO_Port, &GPIO_InitStruct); } uint8_t Read_Ds() { ds_in_or_out(0); if(READ_HC595_DCK){return 0;}else{return 1;} //return READ_HC595_DCK; } void Sand_Byte_to_595(uint8_t h,uint8_t l) { ds_in_or_out(1); HC595_DCK(0); HC595_SCK(0); HC595_RCK(0); for(char a=0;a<8;a++) { if((h<>(a*2); } if(change_buff&&B) { lcd_buff[0]|=0x40>>(a*2); } if(change_buff&&C) { lcd_buff[2]|=0x40>>(a*2); } if(change_buff&&D) { lcd_buff[3]|=0x40>>(a*2); } if(change_buff&&E) { lcd_buff[2]|=0x80>>(a*2); } if(change_buff&&F) { lcd_buff[1]|=0x80>>(a*2); } if(change_buff&&G) { lcd_buff[1]|=0x40>>(a*2); } } //Sand_Byte_to_595(0xff,0xff); //Sand_Byte_to_595(~h,~l); //Sand_Byte_to_595(0,0); //Sand_Byte_to_595(0xff,0xff); for(int a=0;a<4;a++) { l=lcd_buff[a]; //h=((~num_com[a])&0x0F); h=(~d_com[a]&0xf0)|((~num_com[a])&0x0F); Sand_Byte_to_595(h,l); dis_buff.button_flag[a]=Read_Ds(); //Sand_Byte_to_595(~h,~l); } } void hc2_sever() { char h=0; if(dis_buff.led_run==1) { h|=0x01; } if(dis_buff.moto1a==1) { h|=0x02; } if(dis_buff.moto1b==1) { h|=0x04; } if(dis_buff.moto2a==1) { h|=0x08; } if(dis_buff.moto2b==1) { h|=0x10; } Sand_Byte_to_595_2(h); } void moto_server() { if(HAL_GetTick()>moto.moto_run) { moto.moto_run=HAL_GetTick()+10; if(moto.moto1a!=moto.moto1a_) { if(moto.moto1a>moto.moto1a_) { moto.moto1a_++; } if(moto.moto1amoto.moto1b_) { moto.moto1b_++; } if(moto.moto1bmoto.moto2a_) { moto.moto2a_++; } if(moto.moto2amoto.moto2b_) { moto.moto2b_++; } if(moto.moto2bmove) { move=HAL_GetTick()+100; countdown-=100; if(countdown<0) { mode=1; } dis_buff.d_num[0]=((countdown/100)%10); dis_buff.d_num[1]=((countdown/100)%10); dis_buff.d_num[2]=((countdown/100)%10); dis_buff.d_num[3]=((countdown/100)%10); dis_buff.dot1=countdown>>3; dis_buff.dot2=countdown>>4; dis_buff.dot3=countdown>>5; dis_buff.dot4=countdown>>6; } break; case 1: //standby moto.moto1a=0; moto.moto1b=0; moto.moto2a=0; moto.moto2b=0; if(HAL_GetTick()>runtime) { runtime+=1000; if(dis_buff.led_run==1) { dis_buff.led_run=0; }else { dis_buff.led_run=1; } } dis_buff.d_num[0]=0xff; dis_buff.d_num[1]=0xff; dis_buff.d_num[2]=0xff; dis_buff.d_num[3]=0xff; dis_buff.dot1=0; dis_buff.dot2=0; dis_buff.dot3=0; dis_buff.dot4=0; overload_times=0; if(key2.code!=0) { mode=2; countdown=countdown_set; } if(key3.code!=0) { mode=3; countdown=countdown_set; } if(key1.code!=0) { mode=4; countdown=10000; } break; case 2: moto.moto1a=10; moto.moto1b=0; moto.moto2a=10; moto.moto2b=0; if(HAL_GetTick()>move) { move=HAL_GetTick()+100; if(dis_buff.led_run==1) { dis_buff.led_run=0; }else { dis_buff.led_run=1; } countdown-=100; if(countdown<0) { mode=1; } } dis_buff.d_num[3]=(countdown/100)%10; dis_buff.d_num[2]=(countdown/1000)%10; dis_buff.d_num[1]=((countdown/10000)%10); dis_buff.d_num[1]=dis_buff.d_num[1]==0?255:dis_buff.d_num[1]; dis_buff.dot3=1; if(key3.code!=0) { mode=3; countdown=countdown_set-countdown; } if(key4.code!=0) { mode=1; } if(overload.code!=0) { overload_times+=1; } if(overload_times>2) { overload_mode=2; mode=5; } break; case 3: moto.moto1a=0; moto.moto1b=10; moto.moto2a=0; moto.moto2b=10; if(HAL_GetTick()>move) { move=HAL_GetTick()+100; if(dis_buff.led_run==1) { dis_buff.led_run=0; }else { dis_buff.led_run=1; } countdown-=100; if(countdown<0) { mode=1; } } dis_buff.d_num[3]=(countdown/100)%10; dis_buff.d_num[2]=(countdown/1000)%10; dis_buff.d_num[1]=((countdown/10000)%10); dis_buff.d_num[1]=dis_buff.d_num[1]==0?255:dis_buff.d_num[1]; dis_buff.dot3=1; if(key2.code!=0) { mode=2; countdown=countdown_set-countdown; } if(key4.code!=0) { mode=1; } if(overload.code!=0) { overload_times+=1; } if(overload_times>2) { overload_mode=3; mode=5; } break; case 4: //setting mode dis_buff.led_run=0; if(HAL_GetTick()>move) { move=HAL_GetTick()+100; if(dis_buff.dot1==1) { dis_buff.dot1=0; }else { dis_buff.dot1=1; } countdown-=100; if(countdown<0) { mode=1; } if(key2.code<0){countdown_set+=1000;countdown=10000;} if(key3.code<0){countdown_set-=1000;countdown=10000;} } if(key2.code>0){countdown_set+=100;countdown=10000;} if(key3.code>0){countdown_set-=100;countdown=10000;} if(countdown_set<100){countdown_set=100;} if(countdown_set>60000){countdown_set=60000;} if(key1.code!=0){mode=1;} dis_buff.d_num[3]=(countdown_set/100)%10; dis_buff.d_num[2]=(countdown_set/1000)%10; dis_buff.d_num[1]=((countdown_set/10000)%10); dis_buff.d_num[1]=dis_buff.d_num[1]==0?255:dis_buff.d_num[1]; dis_buff.dot3=1; break; case 5: //overload moto.moto1a=0; moto.moto1b=0; moto.moto2a=0; moto.moto2b=0; dis_buff.led_run=1; overload_times=0; dis_buff.d_num[3]=(countdown/100)%10; dis_buff.d_num[2]=(countdown/1000)%10; dis_buff.d_num[1]=((countdown/10000)%10); dis_buff.d_num[1]=dis_buff.d_num[1]==0?255:dis_buff.d_num[1]; dis_buff.dot3=1; if(key4.code!=0){mode=1;} if(key2.code!=0) { mode=2; if(overload_mode==2) { }else { countdown=countdown_set-countdown; } } if(key3.code!=0) { mode=3; if(overload_mode==3) { }else { countdown=countdown_set-countdown; } } break; } if(ADCC.adc_value[0]>600||ADCC.adc_value[1]>600) { GEI_BUTTON_CODE(&overload,1); }else { GEI_BUTTON_CODE(&overload,0); } GEI_BUTTON_CODE(&key1,dis_buff.button_flag[0]); GEI_BUTTON_CODE(&key2,dis_buff.button_flag[1]); GEI_BUTTON_CODE(&key3,dis_buff.button_flag[2]); GEI_BUTTON_CODE(&key4,dis_buff.button_flag[3]); display_and_button_loop(); hc2_sever(); moto_server(); } }