void oled_update_temp() { #define OFFSET1 16 short temp = get_temperature(); OLED_ShowNum(OFFSET1, 0, temp/10, 2, 32); OLED_ShowChar(OFFSET1+8*2, 0, '.', 32, 1); OLED_ShowNum(OFFSET1+8*3, 0, temp%10, 1, 32); OLED_Refresh_Gram(); }
void Loop_50Hz() //20ms执行一次 { time++; if(time >= 50) { time = 0; Time++; OLED_ShowNum(0,0,Time/3600,2,16,0); // OLED_ShowString(16,0,":"); OLED_ShowNum(24,0,Time%3600/60,2,16,0); // OLED_ShowString(40,0,":"); OLED_ShowNum(48,0,Time%60,2,16,0); } }
void menu_Showsen() { OLED_ShowNum(16,0,sen.high,3,16,1); OLED_ShowFloat(16,2,sen.angle.pitch,3); OLED_ShowFloat(16,4,sen.angle.roll,3); OLED_ShowFloat(16,6,sen.angle.yaw,3); }
void mode3_Display(u8 angle) { OLED_ShowStr(0,4," ",2); OLED_ShowStr(0,4,"angle: du",2); OLED_ShowNum(angle); }
void HeartRateCal(void) { if(InitFlag == 1) { MAX = Dataout; MIN = Dataout; heartrate = 0; beats = 0; counter = 0; duration = 0; InitFlag = 0; }else if(Dataout > MAX) { MAX = Dataout; } else if(Dataout < MIN) { MIN = Dataout; } THR =(((long)(3 * MAX + MIN))>>2); counter++; duration++; if (Dataout > THR) // ãÐÖµ¼ì²â { counter = 0; } if (counter == 500/8) // ÑÓʱfs/8Ïû¶¶ { beats = 0; heartrate = (30000/duration); OLED_ShowNum(32,0,heartrate,16); duration = 0; } if(duration > 500*3) { heartrate = 0; OLED_ShowNum(32,0,heartrate,16); duration = 0; MIN = Dataout; MAX = Dataout; } }
void osd_test(void) { u8 t; OLED_Init(); //3?¨º??¡¥OLED OLED_Clear() ; t=' '; OLED_ShowCHinese(0,0,0);//?D OLED_ShowCHinese(18,0,1);//?¡ã OLED_ShowCHinese(36,0,2);//?¡ã OLED_ShowCHinese(54,0,3);//¦Ì? OLED_ShowCHinese(72,0,4);//¡Á¨® OLED_ShowCHinese(90,0,5);//?? OLED_ShowCHinese(108,0,6);//?? while(1) { OLED_Clear(); OLED_ShowCHinese(0,0,0);//?D OLED_ShowCHinese(18,0,1);//?¡ã OLED_ShowCHinese(36,0,2);//?¡ã OLED_ShowCHinese(54,0,3);//¦Ì? OLED_ShowCHinese(72,0,4);//¡Á¨® OLED_ShowCHinese(90,0,5);//?? OLED_ShowCHinese(108,0,6);//?? OLED_ShowString(6,3,"0.96' OLED TEST",16); OLED_ShowString(6,4,"0.96' OLED TEST",16); OLED_ShowString(0,5,"0.96' OLED TEST",16); OLED_ShowString(0,6,"0.96' OLED TEST",16); OLED_ShowString(1,7,"0.96' OLED TEST",16); OLED_ShowString(6,3,"0.96' OLED TEST",16); //OLED_ShowString(8,2,"ZHONGJINGYUAN"); // OLED_ShowString(20,4,"2014/05/01"); OLED_ShowString(0,6,"ASCII:",16); OLED_ShowString(63,6,"CODE:",16); OLED_ShowChar(48,6,t,16);//??¨º?ASCII¡Á?¡¤? t++; if(t>'~')t=' '; OLED_ShowNum(103,6,t,3,16);//??¨º?ASCII¡Á?¡¤?¦Ì????¦Ì rt_thread_delay(1000*3); OLED_DrawBMP(0,0,128,8,BMP1); //¨ª?????¨º?(¨ª?????¨º?¨¦¡Â¨®?¡ê?¨¦¨²3¨¦¦Ì?¡Á?¡À¨ª??¡ä¨®¡ê??¨¢??¨®????¨¤????¡ê?FLASH????8K¨°???¨¦¡Â¨®?) rt_thread_delay(1000*3); OLED_DrawBMP(0,0,128,8,BMP1); rt_thread_delay(1000*3); } }
void receive_handle( uint8_t* data) { uint8_t i = 0; uint8_t re_data[20]; uint8_t command = data[0]; uint8_t data_len = data[1]&GET_DATA_LEN; uint8_t last_byte = data[data_len+2]; if(last_byte ==0x55) //表示全部字节接收完成,否则丢弃 { for(i=0;i<data_len;i++) re_data[i] = data[i+2]; if(command==SET_DEVICE_TIME) { timer.w_year = re_data[0]<<8 | re_data[1]; timer.w_month = re_data[2]; timer.w_date = re_data[3]; timer.hour = re_data[4]; timer.min = re_data[5]; timer.sec = re_data[6]; OLED_ShowNum(0,32,(uint32_t)timer.w_year,4,16); OLED_ShowNum(40,32,(uint32_t)timer.w_month,2,16); OLED_ShowNum(64,32,(uint32_t)timer.w_date,2,16); OLED_ShowNum(88,32,(uint32_t)timer.hour,2,16); OLED_ShowNum(112,32,(uint32_t)timer.min,2,16); OLED_Refresh_Gram(); } if(command==BOND_COMMAND) { for(i=0;i<data_len;i++) { user_profile.boundphone[i] = re_data[i]; } user_profile.boundphone[PHONE_LEN -1] = 0 ; printf("boundphone:%s\r\n",(char*)user_profile.boundphone); } } }
void menu_Run() { switch(menu_Mode) { case show_time_1: OLED_Clear(0,0,127,7); OLED_ShowString(16,0,":"); OLED_ShowString(40,0,":"); menu_Showtime(); menu_Mode = show_time; break; case show_time : menu_Showtime(); break; case show_sen_1: OLED_Clear(0,0,127,7); OLED_ShowString(16+24,0,"cm"); OLED_ShowString(0,0,"H:"); OLED_ShowString(0,2,"P:"); OLED_ShowString(0,4,"R:"); OLED_ShowString(0,6,"Y:"); menu_Showsen(); menu_Mode = show_sen; break; case show_sen : menu_Showsen(); break; case set_sen_1: OLED_ShowString(0,0,"S_Height:"); OLED_ShowString(0,2,"P_offset:"); OLED_ShowString(0,4,"R_offset:"); OLED_ShowString(0,6,"Y_offset:"); OLED_ShowNum(72,0,Expect.hight,3,18,0); OLED_ShowFloat(72,2,sen.angle_test_offset.pitch - 10.00f,2); OLED_ShowFloat(72,4,sen.angle_test_offset.roll - 10.00f,2); OLED_ShowFloat(72,6,sen.angle_test_offset.yaw - 10.00f,2); OLED_ShowChar(120,0,'S'); menu_Mode = set_sen; break; case set_sen: menu_Setsen(); menu_Mode = show_time_1; break; default: break; } }
void menu_Showtime() { OLED_ShowNum(0,0,Time/3600,2,16,0); // OLED_ShowString(16,0,":"); OLED_ShowNum(24,0,Time%3600/60,2,16,0); // OLED_ShowString(40,0,":"); OLED_ShowNum(48,0,Time%60,2,16,0); OLED_ShowNum(0,2,img.CerPtx,3,16,1); OLED_ShowNum(56,2,img.CerPty,3,16,1); OLED_ShowNum(0,4,img.CerR,5,16,1); OLED_ShowNum(60,4,img.rate,5,16,1); }
void oled_update_step_count(void) { static bool flag = false; OLED_Clear(); if(flag) { OLED_ShowImg(0, 0, PEDO_IMAGE_1, 1); flag = false; } else { OLED_ShowImg(0, 0, PEDO_IMAGE_2, 1); flag = true; } OLED_ShowNum(7, 0, get_the_step_count(), 6, 32); OLED_Refresh_Gram(); }
void oled_test(void) { //Reset_IC(); Init_IC(); Clear_Screen(); All_Screen(); OLED_Clear(); OLED_ShowNum(0, 0, 2567890134, 10, 12); OLED_ShowString(0, 12, "abcdefghijk"); while(1) { OLED_Refresh_Gram(); nrf_delay_ms(1500); Clear_Screen(); } }
void oled_default_mode() { #define OFFSET 0 static bool flag = false; calendar temp_time = get_standard_time(); OLED_ShowNum(OFFSET, 0, temp_time.hour, 2, 32); if(temp_time.hour < 10) OLED_ShowNum(OFFSET, 0, 0, 1, 32); OLED_ShowChar(OFFSET+8*2, 0, ':', 32, 1); OLED_ShowNum(OFFSET+8*3, 0, temp_time.minute, 2, 32); if(temp_time.minute < 10) OLED_ShowNum(OFFSET+8*3, 0, 0, 1, 32); OLED_ShowChar(OFFSET+8*5, 0, ':', 32, 1); OLED_ShowNum(OFFSET+8*6, 0, temp_time.second, 2, 32); if(temp_time.second < 10) OLED_ShowNum(OFFSET+8*6, 0, 0, 1, 32); if(get_time_mode() == MINUTE_MODE) { if(flag) { OLED_ShowChar(OFFSET+8*5, 0, ' ', 32, 1); flag = false; } else { OLED_ShowChar(OFFSET+8*5, 0, ':', 32, 1); flag = true; } } if(get_time_mode() == HOUR_MODE) { if(flag) { OLED_ShowChar(OFFSET+8*2, 0, ' ', 32, 1); flag = false; } else { OLED_ShowChar(OFFSET+8*2, 0, ':', 32, 1); flag = true; } } OLED_Refresh_Gram(); }
/**************按键外部中断触发**************/ void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line15)!=RESET) { //GetKeynum=GetKey(); printf("/r/nkeyget"); OLED_ShowString(0,0,"getkey"); OLED_ShowNum(50,0,keynum,2,16); keynum++; if(keynum%2) { IDrive_Down(); GP_Down(); Blooth_Down(); } else { IDrive_ON(); GP_ON(); Blooth_ON(); } } EXTI_ClearITPendingBit(EXTI_Line15); }
void osd_id_disp(u8 data) { OLED_ShowString(OSD_ID_START_ADDR,OSD_BAUDRATE_ID_Y_POS,"ID:",16); if(data<10) { OLED_ShowNum(OSD_ID_NUM_START_ADDR,OSD_BAUDRATE_ID_Y_POS,0,1,16); OLED_ShowNum(OSD_ID_NUM_START_ADDR+8,OSD_BAUDRATE_ID_Y_POS,0,1,16); OLED_ShowNum(OSD_ID_NUM_START_ADDR+8+8,OSD_BAUDRATE_ID_Y_POS,data,1,16); } else if(data < 100) { OLED_ShowNum(OSD_ID_NUM_START_ADDR,OSD_BAUDRATE_ID_Y_POS,0,1,16); OLED_ShowNum(OSD_ID_NUM_START_ADDR+8,OSD_BAUDRATE_ID_Y_POS,data,2,16); } else { OLED_ShowNum(OSD_ID_NUM_START_ADDR,OSD_BAUDRATE_ID_Y_POS,data,3,16); } }
void menu_Showtime() { OLED_ShowNum(0,0,Time/3600,2,16,0); // OLED_ShowString(16,0,":"); OLED_ShowNum(24,0,Time%3600/60,2,16,0); // OLED_ShowString(40,0,":"); OLED_ShowNum(48,0,Time%60,2,16,0); OLED_ShowNum(0,2,img.CerPtx,3,16,1); OLED_ShowNum(32,2,img.CerPty,3,16,1); OLED_ShowNum(64,2,img.CerR,3,16,1); OLED_ShowNum(98,2,img.rate,3,16,1); OLED_ShowNum(0,4,img.Line[0].pt1x,3,16,1); OLED_ShowNum(32,4,img.Line[0].pt1y,3,16,1); OLED_ShowNum(64,4,img.Line[0].pt2x,3,16,1); OLED_ShowNum(98,4,img.Line[0].pt2y,3,16,1); switch(FLYMODE) { case CTRLP: OLED_ShowString(50,6,"CTRLP"); break; case _A_B_: OLED_ShowString(50,6,"_A_B_"); break; } }
void mode5_Display(u8 r) { OLED_ShowStr(0,4," cm",2); OLED_ShowStr(0,4,"R:",2); OLED_ShowNum(r); }
int main(void) { u8 len=0; u8 temp[100]; u8 t=0; u8 flag=0; char mode='O'; long value=0; u8 counter=0; //char val2str[]="50"; char SelfCheck='O'; int D_val=0; u8 SelfCheckCounter=0; /////////////////////以上变量定义/////////////////////////// delay_init(72); USART1_Init(19200);//与地面站传递命令 USART2_Init(115200);//与X86板子传递命令 USART3_Init(115200);//调试用 HCSR04_Init(); ResetOLED(); OLED_Init(); Key_Init(); ///////////////以上初始化/////////////////////// OLED_ShowString(35,20,"READY",24); OLED_Refresh_Gram(); delay_ms(1000); OLED_Clear(); /////////////////////////////欢迎界面,提示准备工作///////////////////////////////// while(KEY==1) { OLED_ShowString(0,0,"Self checking now...",12); OLED_Refresh_Gram(); if(USART_RX2_STA&0x8000) { len=USART_RX2_STA&0x3fff;//得到此次接收到的数据长度 for(t=0;t<len;t++) { temp[t]=Rx2Buf[t]; while((USART2->SR&0X40)==0);//等待发送结束 } flag=1; USART_RX2_STA=0; }//接受来自X86的命令,用于自检。 if(flag==1) { SelfCheck=TempOrPressure(temp); { if(SelfCheck=='C') { value=ValueOfMea(temp); if(value==1) { OLED_ShowString(0,15,"Environment ok",12); SelfCheckCounter++; } if(value==2) { OLED_ShowString(0,30,"The data chain ok",12); } if(value==0) { OLED_ShowString(0,42,"Checking fail...",12); } } } memset(temp,0,sizeof(u8)*100); flag=0; }//先对开发环境进行自检,在VS下下发ok标志即可。 OLED_Refresh_Gram(); if(SelfCheckCounter==1)//如果已经通过了开发环境自检 { while(KEY==1)//不按强制退出就一直自检,直到成功 { if(DataChain_SelfTest()==1)//数据链自检完成 break; else continue; } SelfCheckCounter=0; break;//在不按按键强制退出的情况下,只有自检成功了才能退出。 } } OLED_Clear(); /////////////////////////以上对上位机的自检,按键强制结束////////////////// OLED_ShowString(0,0,"Parameters",16); OLED_ShowString(0,16,"X=",12); OLED_ShowString(0,28,"Y=",12); OLED_ShowString(0,40,"S=",12); OLED_ShowString(0,52,"D=",12); OLED_Refresh_Gram(); flag=0;//复位flag ///////////显示参数//////////////////////////////// //AutoLaunch(); ////////////////////////以上开始起飞///////////////////////////////// while(1) { if(USART_RX2_STA&0x8000) { len=USART_RX2_STA&0x3fff;//得到此次接收到的数据长度 for(t=0;t<len;t++) { temp[t]=Rx2Buf[t]; while((USART2->SR&0X40)==0);//等待发送结束 } flag=1; USART_RX2_STA=0; //printf3("%s\r\n",temp); }//接受来自X86的命令 if(flag==1) { mode=TempOrPressure(temp); if(mode=='S') { value=ValueOfMea(temp); { #ifdef __TRANSPARENT_MODE printf1("\"S\":\"%ld\"\r\n",value); #endif #ifdef __COMMAND_MODE E17_SendMsg(CMD_S_PARAM,value); #endif } OLED_ShowNum(20,40,value,6,12); // counter++; } if(mode=='X') { value=ValueOfMea(temp); { #ifdef __TRANSPARENT_MODE printf1("\"X\":\"%ld\"\r\n",value); #endif #ifdef __COMMAND_MODE E17_SendMsg(CMD_X_PARAM,value); #endif } OLED_ShowNum(20,16,value,6,12); // counter++; } else if(mode=='Y') { value=ValueOfMea(temp); { #ifdef __TRANSPARENT_MODE printf1("\"Y\":\"%ld\"\r\n",value); #endif #ifdef __COMMAND_MODE E17_SendMsg(CMD_Y_PARAM,value); #endif } OLED_ShowNum(20,28,value,6,12); // counter++; } { delay_ms(10);//太小在透传情况下可能出问题? { D_val=HCSR04_GetDistance_Filter(); #ifdef __TRANSPARENT_MODE printf1("\"D\":\"%ld\"\r\n",D_val); #endif #ifdef __COMMAND_MODE E17_SendMsg(CMD_D_PARAM,value); #endif } OLED_ShowNum(20,52,D_val,6,12); // counter=0; }//去掉了判断,每个周期都要做判断,同时进行距离的pid调控。 OLED_Refresh_Gram(); memset(temp,0,sizeof(u8)*100); flag=0; } } }
void mode2_Display(u8 lenth) { OLED_ShowStr(0,4," ",2); OLED_ShowStr(0,4,"lenth: cm",2); OLED_ShowNum(lenth); }
void display_step_count() { OLED_ShowNum(36, 16, get_the_step_count(), 3, 16); OLED_ShowString(0, 16, "SP:"); OLED_Refresh_Gram(); }
void menu_Setsen() { u8 position = 1; while(1) { switch(Key_Scan()) { case 1: OLED_Clear(120,position*2-2,127,position*2-2+1); position++; if(position>4) position = 1; OLED_ShowChar(120,position*2-2,'S'); break; case 2: OLED_Clear(120,position*2-2,127,position*2-2+1); position--; if(position<1) position = 4; OLED_ShowChar(120,position*2-2,'S'); break; case 3: if(position==1) { Expect.hight++; } else if(position==2) { sen.angle_test_offset.pitch+=0.01f; } else if(position==3) { sen.angle_test_offset.roll+=0.01f; } else if(position==4) { sen.angle_test_offset.yaw+=0.01f; } break; case 4: if(position==1) { Expect.hight--; } else if(position==2) { sen.angle_test_offset.pitch-=0.01f; } else if(position==3) { sen.angle_test_offset.roll-=0.01f; } else if(position==4) { sen.angle_test_offset.yaw-=0.01f; } break; case 5: break; case 6: goto ret; break; default: break; } OLED_ShowNum(72,0,Expect.hight,3,18,0); OLED_ShowFloat(72,2,sen.angle_test_offset.pitch - 10.00f,2); OLED_ShowFloat(72,4,sen.angle_test_offset.roll - 10.00f,2); OLED_ShowFloat(72,6,sen.angle_test_offset.yaw - 10.00f,2); } ret: ; }
/** * @brief 串口打印输出 * @param None * @retval None */ int main(void) { uint8_t data[64],BrailleDots[40],InPacket[2]; uint32_t i=0,ret=0,voltemp; /************************系统初始化函数*****************************/ Set_System();//系统时钟初始化 power_initial(); //电源控制管脚初始化 USART_Configuration();//串口1初始化 GP_initial(); //MCU串口初始化 blooth_initial(); //蓝牙串口初始化 delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 OLED_Init(); //初始化OLED ADC1_Init(); //初始化ADC1 //USB初始化 USB_Interrupts_Config(); Set_USBClock(); USB_Init(); /*******************************************************************/ Board_ON();//板载自锁供电 Blooth_Down(); //初始化关闭蓝牙 GP_Down(); //初始化关闭51单片机 IDrive_Down(); //初始化关闭恒流源 OLED_Clear(); //刷新 // OLED_ShowString(0,0, "DAISY IS HOT"); //字符串显示 OLED_ShowString(0,0, "Welcome to BD"); OLED_ShowString(0,2, "Starting..."); delay_ms(1000); EXTI_PD2_Config(); //KEY外部中断检测 EXTI_PD3_Config(); //关机检测 //printf("\x0c\0");printf("\x0c\0");//超级终端清屏 //printf("\033[1;40;32m");//设置超级终端背景为黑色,字符为绿色 //开机测试 printf("\r\n*******************************************************************************"); printf("\r\n************************ Copyright 2009-2012, ViewTool ************************"); printf("\r\n*************************** http://www.viewtool.com ***************************"); printf("\r\n***************************** All Rights Reserved *****************************"); printf("\r\n*******************************************************************************"); printf("\r\n"); /*****************OLED显示*******************/ delay_ms(3000); OLED_Clear(); //刷新 OLED_ShowString(0,0,"DISCHARGING..."); delay_ms(3000); //OLED_DrawBMP(0,0,128,8,gImage_daisy); //delay_ms(3000); // blooth_printf(USART2,"blooth is OK"); //GP_printf OLED_Clear(); /***********************************************/ // GPIO_SetBits(GPIOE,GPIO_Pin_3); while(1) { /******************USB消息轮询*********************/ USBDataGet(data,BrailleDots,InPacket); /****************************************************/ if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_12)) OLED_ShowString(0,0,"DISCHARGING"); else OLED_ShowString(0,0,"CHARGING"); /***************电池电压检测******************/ ADC_ConvertedValueLocal =(float) ADC_ConvertedValue[1]/2048*3.3*1.07; // 读取转换的AD值、 printf("\r\n The PC4 current AD value = 0x%04X \r\n", ADC_ConvertedValue); printf("\r\n The PC4 current AD value = %f V \r\n",ADC_ConvertedValueLocal); OLED_ShowString(0,4,"ICPOWER="); voltemp=ADC_ConvertedValueLocal*1000; OLED_ShowNum(64,4,voltemp,4,16); OLED_ShowString(100,4,"mv"); ADC_ConvertedValueLocal =(float) ADC_ConvertedValue[0]/2048*3.3*1.08;// 读取转换的AD值、 printf("\r\n The PC5 current AD value = 0x%04X \r\n", ADC_ConvertedValue); printf("\r\n The PC5 current AD value = %f V \r\n",ADC_ConvertedValueLocal); OLED_ShowString(0,6,"SYSPOWER="); voltemp=ADC_ConvertedValueLocal*1000; OLED_ShowNum(72,6,voltemp,4,16); OLED_ShowString(108,6,"mv"); /****************************************************************/ /**********************蓝牙打印测试***********************/ blooth_printf(USART2,"\r\nblooth is ok!\r\n"); GP_printf(USART3,"\r\nMCU Connect\r\n"); /****************************************************************/ // IDrive_ON(); // printf("\r\nIC on"); Delay(0x0FFFEF); Delay(0x0FFFEF); Delay(0x0FFFEF); Delay(0x0FFFEF); Delay(0x0FFFEF); Delay(0x0FFFEF); // IDrive_Down(); // printf("\r\nIC down"); Delay(0x0FFFEF); Delay(0x0FFFEF); Delay(0x0FFFEF); Delay(0x0FFFEF); Delay(0x0FFFEF); Delay(0x0FFFEF); //GPIO_ResetBits(GPIOB,GPIO_Pin_13); /*****************复位*********************/ } }