//OLED_Write_Char(0,15,'a'); 0234行,0~15列 void OLED_Write_Char(unsigned char x,unsigned char y,signed char Asc) { signed char Temp_String[2]; y=y*8; Temp_String[0]=Asc; Temp_String[1]='\0'; //字母占一个字节 OLED_Write_String(x,y,Temp_String); //显示字母 }
void NMI_Handler(void)//?????? { OLED_Clear(); FTM_PWM_ChangeDuty(FTM0_CH3_PA6,0); FTM_PWM_ChangeDuty(FTM0_CH4_PA7,0); // FTM_PWM_ChangeDuty(FTM1_CH0_PA8,0); // FTM_PWM_ChangeDuty(FTM1_CH1_PA9,0); OLED_Write_String(0,0,(uint8_t *)"The Chip"); OLED_Write_String(0,2,(uint8_t *)"have big"); OLED_Write_String(0,4,(uint8_t *)"error"); #if(CHIP_DEBUG==ON) wait(); #endif while(1); }
void HardFault_Handler(void)//????????? { OLED_Clear(); FTM_PWM_ChangeDuty(FTM0_CH3_PA6,0); FTM_PWM_ChangeDuty(FTM0_CH4_PA7,0); // FTM_PWM_ChangeDuty(FTM1_CH0_PA8,0); // FTM_PWM_ChangeDuty(FTM1_CH1_PA9,0); OLED_Write_String(0,0,(uint8_t *)"The memory"); OLED_Write_String(0,2,(uint8_t *)"or Stacks"); OLED_Write_String(0,4,(uint8_t *)"overflows"); #if(CHIP_DEBUG==ON) wait(); #endif while(1); }
/******************************主界面显示********************************/ void Menu_Init(void) { OLED_Write_Char(0, yiwei(i,i), 43); OLED_Write_String(2,yiwei(0,i),"AI "); OLED_Write_String(2,yiwei(2,i),"BI "); OLED_Write_String(2,yiwei(4,i),"CI "); OLED_Write_String(2,yiwei(6,i),"DI "); OLED_Write_String(2,yiwei(8,i),"EI "); OLED_Write_String(2,yiwei(10,i),"F1 "); OLED_Write_String(2,yiwei(12,i),"F2 "); OLED_Write_String(2,yiwei(14,i),"SD "); OLED_Write_Num2(7,yiwei(0,i),a1); OLED_Write_Num2(7,yiwei(2,i),a2); OLED_Write_Num2(7,yiwei(4,i),a3); OLED_Write_Num2(7,yiwei(6,i),a4); OLED_Write_Num2(7,yiwei(8,i),a5); OLED_Write_Num4(7,yiwei(10,i),FTMDuty_1); OLED_Write_Num4(7,yiwei(12,i),FTMDuty_2); OLED_Write_String(7,yiwei(14,i)," "); OLED_Write_String(9,yiwei(8,i)," "); OLED_Write_String(9,yiwei(6,i)," "); OLED_Write_String(9,yiwei(4,i)," "); OLED_Write_String(9,yiwei(2,i)," "); //上移 if(Key_up == 0) { DelayMs(100); if(Key_up == 0) { OLED_Write_Char(0,yiwei(i,i), ' '); i -= 2; if(i == -2) i = 14; } } //下移 if(Key_down == 0) { DelayMs(100); if(Key_down == 0) { OLED_Write_Char(0,yiwei(i,i), ' '); i += 2; if(i == 16) i = 0; } } //a1 if(yiwei(i,i) == yiwei(0,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { a1++; if(a1 >= 30) a1 = 0; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { a1--; if(a1 <= 0) a1 = 30; } } } //a2 if(yiwei(i,i) == yiwei(2,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { a3++; if(a3 >= 50) a3 = 0; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { a3--; if(a3 <= 0) a3 = 50; } } } //a4 if(yiwei(i,i) == yiwei(6,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { a4++; if(a4 >= 50) a4 = 0; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { a4--; if(a4 <= 0) a4 = 50; } } } //a5 if(yiwei(i,i) == yiwei(8,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { a5++; if(a5 >= 50) a5 = 0; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { a5--; if(a5 <= 0) a5 = 50; } } } //FTMDuty_1 if(yiwei(i,i) == yiwei(10,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { FTMDuty_1 += 50; if(FTMDuty_1 >= 3000) FTMDuty_1 = 3000; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { FTMDuty_1 -= 50; if(FTMDuty_1 <= 0) FTMDuty_1 = 0; } } } //FTMDuty_2 if(yiwei(i,i) == yiwei(12,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { FTMDuty_2 += 50; if(FTMDuty_2 >= 3000) FTMDuty_2 = 3000; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { FTMDuty_2 -= 50; if(FTMDuty_2 <= 0) FTMDuty_2 = 0; } } } //SD if(yiwei(i,i) == yiwei(14,i)) { if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { OLED_Clear(); OLED_Write_String(0,0,"SD reading"); SD_D = 0; //扇区 SD_Flag = 1; } } } //打开ccd测试 if(Key_2 == 0) { DelayMs(100); if(Key_2 == 0) { OLED_Clear(); CCD_Flag = 1; SD_X = 0; PIT_Start(PIT1); } } //发车 if(Key_1 == 0) { DelayMs(50); if(Key_1 == 0) { OLED_Clear(); Run_Flag = 1; PIT_Start(PIT1); } } }
/******************************主界面显示********************************/ void Menu_Init(void) { OLED_Write_Char(0, yiwei(i,i), 43); OLED_Write_String(2,yiwei(0,i),"AI "); OLED_Write_String(2,yiwei(2,i),"BI "); OLED_Write_String(2,yiwei(4,i),"CI "); OLED_Write_String(2,yiwei(6,i),"DI "); OLED_Write_String(2,yiwei(8,i),"F1 "); OLED_Write_String(2,yiwei(10,i),"F2 "); OLED_Write_String(2,yiwei(12,i),"SD "); OLED_Write_Num2(7,yiwei(0,i),a1); OLED_Write_String(9,yiwei(0,i)," "); OLED_Write_Num2(7,yiwei(2,i),a2); OLED_Write_String(9,yiwei(2,i)," "); OLED_Write_Num2(7,yiwei(4,i),a3); OLED_Write_String(9,yiwei(4,i)," "); OLED_Write_Num2(7,yiwei(6,i),a4); OLED_Write_String(9,yiwei(6,i)," "); OLED_Write_Num4(7,yiwei(8,i),FTMDuty_1); OLED_Write_Num4(7,yiwei(10,i),FTMDuty_2); OLED_Write_String(7,yiwei(12,i)," "); //上移 if(Key_up == 0) { DelayMs(100); if(Key_up == 0) { OLED_Write_Char(0,yiwei(i,i), ' '); i = i - 2; if(i == -2) i = 12; } } //下移 if(Key_down == 0) { DelayMs(100); if(Key_down == 0) { OLED_Write_Char(0,yiwei(i,i), ' '); i = i + 2; if(i == 14) i = 0; } } //a1 if(yiwei(i,i) == yiwei(0,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { a1++; if(a1 >= 50) a1 = 0; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { a1--; if(a1 <= 0) a1 = 50; } } } //a2 if(yiwei(i,i) == yiwei(2,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { a2++; if(a2 >= 50) a2 = 0; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { a2--; if(a2 <= 0) a2 = 50; } } } //a3 if(yiwei(i,i) == yiwei(4,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { a3++; if(a3 >= 50) a3 = 0; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { a3--; if(a3 <= 0) a3 = 50; } } } //a4 if(yiwei(i,i) == yiwei(6,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { a4++; if(a4 >= 50) a4 = 0; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { a4--; if(a4 <= 0) a4 = 50; } } } //FTMDuty_1 if(yiwei(i,i) == yiwei(8,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { FTMDuty_1 += 50; if(FTMDuty_1 >= 3000) FTMDuty_1 = 3000; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { FTMDuty_1 -= 50; if(FTMDuty_1 <= 0) FTMDuty_1 = 0; } } } //FTMDuty_2 if(yiwei(i,i) == yiwei(10,i)) { //加 if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { FTMDuty_2 += 50; if(FTMDuty_2 >= 3000) FTMDuty_2 = 3000; } } //减 if(Key_left == 0) { DelayMs(50); if(Key_left == 0) { FTMDuty_2 -= 50; if(FTMDuty_2 <= 0) FTMDuty_2 = 0; } } } //SD if(yiwei(i,i) == yiwei(12,i)) { if(Key_right == 0) { DelayMs(50); if(Key_right == 0) { OLED_Clear(); SD_D = 0; flag_sd_d = 1; } } } //打开ccd测试 if(Key_2 == 0) { DelayMs(100); if(Key_2 == 0) { OLED_Clear(); flag_test = 1; SD_X = 0; PIT_Start(PIT1); FTM_PWM_ChangeDuty(FTM0_CH3_PA6,FTMDuty_1); } } //发车 if(Key_1 == 0) { DelayMs(50); if(Key_1 == 0) { OLED_Clear(); flag_run = 1; PIT_Start(PIT1); FTM_PWM_ChangeDuty(FTM0_CH3_PA6,FTMDuty_1); } } }
int main(void) { SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); OLED_Init(); Sd_Init(); chuinit_Init(); DataInit(); Data_Uart_Init(); while(1) { Menu_Init(); //ccd测试 while(Flag == 1) { if(TIME1flag_20ms == 1) { TIME1flag_20ms = 0; ImageCapture(P1); // Sd_X(); // Sd_D(); // UART_Send_Con(); oled_collect(); oled_show(); } CCD_HeiXian(); OLED_ZhongXian(); OLED_Write_Num3(4,0,Center); OLED_Write_Num3(0,0,Left); OLED_Write_Num3(9,0,Right); OLED_Write_Num3(0,2,AverageValue); if(Key_1 == 0) //发车 { DelayMs(100); if(Key_1 == 0) { OLED_Clear(); Flag = 2; SD_X = 0; PIT_Start(PIT1); } } if(Key_down == 0) //菜单 { DelayMs(100); if(Key_down == 0) { OLED_Clear(); Flag = 0; PIT_Stop(PIT1); FTM_PWM_ChangeDuty(FTM1_CH0_PB0,0); FTM_PWM_ChangeDuty(FTM1_CH1_PB1,0); } } if(Key_up == 0) //SD 发车 { DelayMs(100); if(Key_up == 0) { SD_Flag = !SD_Flag; if(SD_Flag) OLED_Write_String(2,2,"SD running"); else OLED_Write_String(2,2,"SD stopping"); } } if(Key_right == 0) //上位机 { DelayMs(100); if(Key_right == 0) { while(1) { OLED_Clear(); Sd_D(); UART_Send_Con(); } } } } //发车 while(Flag == 2) { if(TIME1flag_20ms == 1) { TIME1flag_20ms = 0; ImageCapture(P1); Sd_X(); } CCD_HeiXian(); if(leixin == 0) { if (jiasuflag <= jiasu_Num) FTM_PWM_ChangeDuty(FTM1_CH0_PB0,5000); else FTM_PWM_ChangeDuty(FTM1_CH0_PB0,FTMDuty_1); } if(leixin == 1) { if (jiansuflag <= jiansu_Num) { FTM_PWM_ChangeDuty(FTM1_CH0_PB0,0); FTM_PWM_ChangeDuty(FTM1_CH1_PB1,100); } // else if(zhidaoflag_save < 200 && jiansuflag <= a6) // { // FTM_PWM_ChangeDuty(FTM1_CH0_PB0,0); // } else FTM_PWM_ChangeDuty(FTM1_CH0_PB0,FTMDuty_2); } if(Key_down == 0) //菜单 { DelayMs(100); if(Key_down == 0) { OLED_Clear(); Flag = 0; PIT_Stop(PIT1); FTM_PWM_ChangeDuty(FTM1_CH0_PB0,0); FTM_PWM_ChangeDuty(FTM1_CH1_PB1,0); } } } } }
void OLED_Write_Float(unsigned char x,unsigned char y,float Number) { signed char Temp_Buf[17]; (void)Float_To_String(Number,Temp_Buf); OLED_Write_String(x,y,Temp_Buf); }
void OLED_Write_Int(unsigned char x,unsigned char y,signed int Number) { signed char Temp_Buf[17]; (void)Int_To_String(Number,Temp_Buf); OLED_Write_String(x,y,Temp_Buf); }