/**@brief Signals alert event from Immediate Alert or Link Loss services. * * @param[in] alert_level Requested alert level. */ static void alert_signal(uint8_t alert_level) { switch (alert_level) { case BLE_CHAR_ALERT_LEVEL_NO_ALERT: m_is_link_loss_alerting = false; alert_led_blink_stop(); #if OLED096_Func OLED_ShowString(48,16, (uint8_t*)" "); OLED_Refresh_Gram(); #endif break; case BLE_CHAR_ALERT_LEVEL_MILD_ALERT: alert_led_blink_start(); break; case BLE_CHAR_ALERT_LEVEL_HIGH_ALERT: alert_led_blink_stop(); nrf_gpio_pin_set(ALERT_PIN_NO); #if OLED096_Func OLED_ShowString(48,16, (uint8_t*)"ALT"); OLED_Refresh_Gram(); #endif break; default: break; } }
/** * @brief Clear whole screen @retval None */ void OLED_Clear(void) { unsigned char i, n; for (i = 0; i < 8; i++)for (n = 0; n < 128; n++)OLED_GRAM[n][i] = 0X00; #if OLED_REFRESH_OPTIMIZE_EN if (UpdateOLEDJustNow) OLED_Refresh_Gram();//Upload GRAM to screen #else OLED_Refresh_Gram(); #endif }
//全屏点亮 void OLED_Bright(void) { u8 i,n; for(i=0;i<8;i++) for(n=0;n<128;n++) OLED_GRAM[n][i]=0XFF; OLED_Refresh_Gram();//更新显示 }
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!! void OLED_Clear(void) { u8 i,n; for(i=0;i<8;i++) for(n=0;n<128;n++) OLED_GRAM[n][i]=0X00; OLED_Refresh_Gram();//更新显示 }
void oled_cmps_mode() { uint8_t x, y; y = 15; for(x=23; x<40; ++x) OLED_DrawPoint(x, y, 1); x = 31; for(y=8; y<24; ++y) OLED_DrawPoint(x, y, 1); OLED_Refresh_Gram(); }
//x1,y1,x2,y2 //x1<=x2;y1<=y2 0<=x1<=63 0<=y1<=31 //dot:0,clear;1,fill void OLED_Fill(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint8_t dot) { uint8_t x,y; for(x=x1;x<=x2;x++) { for(y=y1;y<=y2;y++)OLED_DrawPoint(x,y,dot); } OLED_Refresh_Gram(); }
//x1,y1,x2,y2 填充区域的对角坐标 //确保x1<=x2;y1<=y2 0<=x1<=127 0<=y1<=63 //dot:0,清空;1,填充 void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot) { u8 x,y; for(x=x1;x<=x2;x++) { for(y=y1;y<=y2;y++)OLED_DrawPoint(x,y,dot); } OLED_Refresh_Gram();//更新显示 }
void OLED_Init(void) { Init_IC(); OLED_Clear(); // All_Screen(); // OLED_ShowNum(0, 0, 2567890134, 10, 16); // update_battery(30); OLED_Refresh_Gram(); // oled_display(image2); }
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 OLED_Equalizer_128(u8 *data) { int x,y; for (x=0;x<128;x++) { //printf("0x%x\n\r", data[x]); for (y=0;y<=data[x];y++) OLED_DrawPoint(128-x,y,1); } OLED_Refresh_Gram(); }
int main() { Xil_Out32(OLED_BASE_ADDR,0xff); OLED_Init(); OLED_ShowString(0,3, "LHC OLED TEST"); OLED_Refresh_Gram(); while(1); return 0; }
////////////////////////////////////////////////////////////////////////// //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!! void OLED_Clear(void) { uint8_t i,n; for(i=0;i<8;i++) { for(n=0;n<128;n++) { OLED_GRAM[n][i]=0X00; // } } OLED_Refresh_Gram();//更新显示 }
void OLED_DisFormat_For_NRFandAGV(void) { OLED_ShowString(0, 0, "AGV Sta:"); OLED_ShowString(0, 16, "L:"); OLED_ShowString(47, 16, "EN:"); OLED_ShowString(87, 16, "FR:"); OLED_ShowString(0, 32, "R:"); OLED_ShowString(47, 32, "EN:"); OLED_ShowString(87, 32, "FR:"); //OLED_ShowString(0, 32, "***************"); OLED_ShowString(0, 48, "NRF:"); OLED_Refresh_Gram(); }
void oled_update_cmps(ak8963_cmps *cmp) { // #define OFFSET 16 // if(cmp->Angle < 0) // { // OLED_ShowChar(OFFSET, 0, '-', 32, 1); // OLED_ShowNum(OFFSET+8, 0, -(cmp->Angle), 3, 32); // } // else // { // OLED_ShowChar(OFFSET, 0, ' ', 32, 1); // OLED_ShowNum(OFFSET+8, 0, (cmp->Angle), 3, 32); // } // OLED_Clear(); oled_drawline(cmp->Angle-90); OLED_Refresh_Gram(); }
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_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 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 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 oled_show(void) { OLED_Display_On(); //显示屏打开 //=============显示滤波器=======================// OLED_ShowString(00,0,"WAY-"); OLED_ShowNumber(30,0, Way_Angle,1,12); if(Way_Angle==1) OLED_ShowString(45,0,"DMP"); else if(Way_Angle==2) OLED_ShowString(45,0,"Kalman"); else if(Way_Angle==3) OLED_ShowString(45,0,"Hubu"); //=============显示温度=======================// OLED_ShowString(00,10,"Wendu"); OLED_ShowNumber(45,10,Temperature/10,2,12); OLED_ShowNumber(68,10,Temperature%10,1,12); OLED_ShowString(58,10,"."); OLED_ShowString(80,10,"`C"); //=============显示编码器1=======================// OLED_ShowString(00,20,"Enco1"); if( Encoder_Left<0) OLED_ShowString(45,20,"-"), OLED_ShowNumber(65,20,-Encoder_Left,5,12); else OLED_ShowString(45,20,"+"), OLED_ShowNumber(65,20, Encoder_Left,5,12); //=============显示编码器2=======================// OLED_ShowString(00,30,"Enco2"); if(Encoder_Right<0) OLED_ShowString(45,30,"-"), OLED_ShowNumber(65,30,-Encoder_Right,5,12); else OLED_ShowString(45,30,"+"), OLED_ShowNumber(65,30,Encoder_Right,5,12); //=============显示电压=======================// OLED_ShowString(00,40,"Volta"); OLED_ShowString(58,40,"."); OLED_ShowString(80,40,"V"); OLED_ShowNumber(45,40,Voltage/100,2,12); OLED_ShowNumber(68,40,Voltage%100,2,12); if(Voltage%100<10) OLED_ShowNumber(62,40,0,2,12); //=============显示角度=======================// OLED_ShowString(0,50,"Angle"); if(Angle_Balance<0) OLED_ShowNumber(45,50,Angle_Balance+360,3,12); else OLED_ShowNumber(45,50,Angle_Balance,3,12); //=============刷新=======================// OLED_Refresh_Gram(); }
/** * @brief Show small dialogue * @param string: Passage time: Time of the dialoue that lasts occupyThread:Will ShowSmallDialogue() occupies thread until time is up */ void ShowSmallDialogue(const char string[], u16 time, bool occupyThread) { u8 startAddr, endAddr; u8 stringLength; stringLength = GetStringGraphicalLength(string); startAddr = 63 - stringLength * 4; endAddr = startAddr + stringLength * 8; xSemaphoreTake(OLEDRelatedMutex, portMAX_DELAY); OLED_Clear(); OLED_DrawRect(startAddr - 4, 20, endAddr + 4, 44, DRAW); OLED_ShowAnyString(startAddr, 24, string, NotOnSelect, 16); OLED_Refresh_Gram(); if (occupyThread) { vTaskDelay(time / portTICK_RATE_MS); } xSemaphoreGive(OLEDRelatedMutex); if (occupyThread) { xSemaphoreTake(OLEDRelatedMutex, portMAX_DELAY); OLED_Clear(); xSemaphoreGive(OLEDRelatedMutex); } }
void UI_ListView_Handler(void *pvParameters) { ListView_Param_Struct* listView_Params = pvParameters; Key_Message_Struct key_Message; u16 pos[5]; char tempString[29]; int currentPos; int currentRelativePos; u16 itemStringLengths[4]; u16 lastSelected = listView_Params->DefaultPos; u16 lengthTemp; u16 posTemp; u16 i, p, m; u8 displayLineNumInSinglePage = listView_Params->ListLength > 5 ? 5 : listView_Params->ListLength; // u16* dataNumPointer; float * dataPointers[4]; bool updateNumTab = true; bool firstDraw = true; bool currentPosChanged = false; xSemaphoreTake(OLEDRelatedMutex, portMAX_DELAY); OLED_Clear(); OLED_DrawRect(0, 0, 127, 23 + 10 * (displayLineNumInSinglePage - 1), DRAW); OLED_DrawHorizonalLine(13, 0, 127, 1); xSemaphoreGive(OLEDRelatedMutex); SetKeyBeatRate(listView_Params->FastSpeed); /*Get the lengths of the itemNames*/ for (i = 0; i < listView_Params->ItemNum; i++) { itemStringLengths[i] = GetStringGraphicalLength(listView_Params->ItemNames[i]); } pos[0] = listView_Params->ItemPositions[0]; /*Make the positions of the itemStrings centural between two grids*/ for (i = 0; i < listView_Params->ItemNum; i++) { pos[i] = GetCentralPosition(listView_Params->ItemPositions[i], listView_Params->ItemPositions[i + 1], itemStringLengths[i]) - 1; } for (i = 0; i < listView_Params->ItemNum; i++) { OLED_ShowAnyString(pos[i], 1, listView_Params->ItemNames[i], NotOnSelect, 12); } /*Draw vertical grids*/ for (i = 0; i < listView_Params->ItemNum; i++) { OLED_DrawVerticalLine(listView_Params->ItemPositions[i] - 2, 0, 23 + 10 * (displayLineNumInSinglePage - 1), 1); } /*Draw horizonal grids*/ for (i = 0; i < displayLineNumInSinglePage; i++) { OLED_DrawHorizonalLine(23 + 10 * i, 0, 127, 1); } if (listView_Params->Item1AutoNum == true) { for (i = 0; i < listView_Params->ItemNum - 1; i++) { dataPointers[i + 1] = listView_Params->DataPointers[i]; } // dataNumPointer = listView_Params->DataAutoNumPointer; // for (i = 0; i < listView_Params->ListLength; i++) // { // dataNumPointer[i] = listView_Params->Item1AutoNumStart + i*listView_Params->Item1AutoNumStep; // } } else { for (i = 0; i < listView_Params->ItemNum; i++) { dataPointers[i] = listView_Params->DataPointers[i]; } } currentPos = listView_Params->DefaultPos; currentRelativePos = 0; ClearKeyEvent(); for (;;) { xSemaphoreTake(OLEDRelatedMutex, portMAX_DELAY); if (listView_Params->Item1AutoNum == true) p = 1; else p = 0; for (i = 0; i < listView_Params->ItemNum - p; i++) { for (m = 0; m < displayLineNumInSinglePage; m++) { sprintf(tempString, listView_Params->sprintfCommandStrings[i], dataPointers[i + p][currentPos + m]); lengthTemp = GetStringGraphicalLength(tempString); posTemp = GetCentralPosition(listView_Params->ItemPositions[i + p], listView_Params->ItemPositions[i + p + 1], lengthTemp); OLED_ShowAnyString(posTemp - 1, 15 + 10 * m, tempString, NotOnSelect, 8); } } if (listView_Params->Item1AutoNum == true) { if (currentPosChanged == true) { currentPosChanged = false; for (i = 0; i < displayLineNumInSinglePage; i++) OLED_FillRect(listView_Params->ItemPositions[0], 15 + 10 * i, listView_Params->ItemPositions[1] - 4, 22 + 10 * i, 0); firstDraw = true; updateNumTab = true; } for (i = 0; i < displayLineNumInSinglePage; i++) { sprintf(tempString, "%d", listView_Params->Item1AutoNumStart + (currentPos + i)*listView_Params->Item1AutoNumStep); lengthTemp = GetStringGraphicalLength(tempString); posTemp = GetCentralPosition(listView_Params->ItemPositions[0], listView_Params->ItemPositions[1], lengthTemp); if (currentRelativePos != i&&lastSelected != i) OLED_ShowAnyString(posTemp - 1, 15 + 10 * i, tempString, NotOnSelect, 8); if (currentRelativePos == i&&updateNumTab == true) { if (firstDraw == false) OLED_InvertRect(listView_Params->ItemPositions[0], 15 + 10 * lastSelected, listView_Params->ItemPositions[1] - 4, 22 + 10 * lastSelected); else firstDraw = false; OLED_ShowAnyString(posTemp - 1, 15 + 10 * i, tempString, NotOnSelect, 8); OLED_InvertRect(listView_Params->ItemPositions[0], 15 + 10 * i, listView_Params->ItemPositions[1] - 4, 22 + 10 * i); lastSelected = currentRelativePos; updateNumTab = false; } } } OLED_Refresh_Gram(); xSemaphoreGive(OLEDRelatedMutex); xQueueReceive(Key_Message, &key_Message, portMAX_DELAY); if (key_Message.KeyEvent == RightClick || key_Message.AdvancedKeyEvent == RightContinous) { currentRelativePos++; updateNumTab = true; if (currentRelativePos >= displayLineNumInSinglePage) { currentPosChanged = true; currentPos++; if (currentPos + displayLineNumInSinglePage > listView_Params->ListLength) { currentPos = listView_Params->ListLength - displayLineNumInSinglePage; currentPosChanged = false; updateNumTab = false; } currentRelativePos = displayLineNumInSinglePage - 1; } } else if (key_Message.KeyEvent == LeftClick || key_Message.AdvancedKeyEvent == LeftContinous) { currentRelativePos--; updateNumTab = true; if (currentRelativePos < 0) { currentPosChanged = true; currentPos--; if (currentPos < 0) { currentPos = 0; currentPosChanged = false; updateNumTab = false; } currentRelativePos = 0; } } else if (key_Message.KeyEvent == MidDouble) { currentPos = 32767; xQueueSend(UI_ListViewMsg, ¤tPos, portMAX_DELAY); for(;;) vTaskDelay(portMAX_DELAY); } else if (key_Message.KeyEvent == MidClick) { xQueueSend(UI_ListViewMsg, ¤tPos, portMAX_DELAY); for(;;) vTaskDelay(portMAX_DELAY); } } }
void My_Change_To_TX_Mode_Fast(void) { NRF24L01OptsPtr->TxMode_Fast(); OLED_ShowString(0,48,"NRF: "); OLED_Refresh_Gram(); }
u16 APP_ProcessEvent( u8 task_id, u16 events ) { loraMAC_msg_t* pMsgSend = NULL; loraMAC_msg_t* pMsgRecieve = NULL; u8 tmp_buf[64]; u8 len = 0 ; //system event if(events & SYS_EVENT_MSG) { //receive msg loop while(NULL != (pMsgRecieve = (loraMAC_msg_t*)osal_msg_receive(APP_taskID))) { //pMsgRecieve[0] is system event type switch(pMsgRecieve->msgID) { //tx done case TXDONE : //调度下一次发送 //RedLED(ON); HalLedSet (HAL_LED_1, HAL_LED_MODE_ON); if(Txpacket_count > 0) { Txpacket_count--; HAL_UART_SendBytes(uart1_rxBuf,uart1_Rxcount); pMsgSend = (loraMAC_msg_t*)osal_msg_allocate(72); if(pMsgSend != NULL) { osal_memset(pMsgSend,0,72);//需要全部置0,要不然会出现发完串口数据包后不再进入TXDONE pMsgSend->msgID = TXREQUEST; pMsgSend->msgLen = uart1_Rxcount+2; osal_memcpy(pMsgSend->msgData,uart1_rxBuf,uart1_Rxcount); osal_msg_send(LoraMAC_taskID,(u8*)pMsgSend); osal_msg_deallocate((u8*)pMsgSend); } } else { //send a packet to LoRaMac osal (then can be send by the radio) pMsgSend = (loraMAC_msg_t*)osal_msg_allocate(72); if(pMsgSend != NULL) { osal_memset(pMsgSend,0,72); pMsgSend->msgID = TXREQUEST; pMsgSend->msgLen = 70; for(u8 dataCount = 0; dataCount < 70; dataCount++) { pMsgSend->msgData[dataCount] = dataCount; } osal_msg_send(LoraMAC_taskID,(u8*)pMsgSend); osal_msg_deallocate((u8*)pMsgSend); HAL_UART_SendBytes("app send\n", osal_strlen("app send\n")); } } //RedLED(OFF); HalLedSet (HAL_LED_1, HAL_LED_MODE_OFF); break; //rx done case RXDONE: HalLedSet (HAL_LED_2, HAL_LED_MODE_ON); OLED_Clear_Half();//先把屏幕下一半清空 APP_ShowMoteID(g_appData.devAddr); len = 0 ; g_number++ ; memset(Rx_buf , 0 ,sizeof(Rx_buf)); osal_memcpy(Rx_buf,pMsgRecieve->msgData,pMsgRecieve->msgLen); len = pMsgRecieve->msgLen; Rx_buf[len] = 0; OLED_ShowString( 0,36, (u8*)Rx_buf,12 ); OLED_Refresh_Gram(); HAL_UART_SendBytes("\n",1); HAL_UART_SendBytes((uint8_t *)Rx_buf,strlen(Rx_buf)); HalLedSet (HAL_LED_2, HAL_LED_MODE_OFF); break; case TXERR_STATUS: { //TODO MOTE send packet error deal memset( tmp_buf ,0 ,sizeof(tmp_buf) ); sprintf( (char *)tmp_buf,"send err ret=%d,no=%d",pMsgRecieve->msgData[0], pMsgRecieve->msgData[1]+( pMsgRecieve->msgData[2]<<8 ) ); OLED_ShowString( 0,36,tmp_buf,12 ); OLED_Refresh_Gram(); break; } default: break; } osal_msg_deallocate((u8*)pMsgRecieve); } return (events ^ SYS_EVENT_MSG); } //send a packet event if(events & APP_PERIOD_SEND) { //RedLED(OFF); HalLedSet (HAL_LED_1, HAL_LED_MODE_OFF); //send a packet to LoRaMac osal (then can be send by the radio) pMsgSend = (loraMAC_msg_t*)osal_msg_allocate(72); if(pMsgSend != NULL) { osal_memset(pMsgSend,0,72); pMsgSend->msgID = TXREQUEST; pMsgSend->msgLen = 70; for(u8 dataCount = 0; dataCount < 70; dataCount++) { pMsgSend->msgData[dataCount] = dataCount; } osal_msg_send(LoraMAC_taskID,(u8*)pMsgSend); } //osal_start_timerEx(APP_taskID, APP_PERIOD_SEND,1000);//延时继续发送 return (events ^ APP_PERIOD_SEND); } //uart test event if(events & APP_TEST_UART) { Txpacket_count = 1;//串口收到一个数据包,就发一遍无线包出去add by hxz //HAL_UART_SendBytes("hello,world!", 10); //osal_start_timerEx(APP_taskID, APP_TEST_UART,1000);//延时继续发送 return (events ^ APP_TEST_UART); } return 0 ; }
// 以下1-9每100毫秒执行一次 static void Pollint100mSec(void) { switch(r_pollint._10msCount) { case 0: Pollint1Sec(); break; case 1: break; case 2: if ((r_pollint._500msCount++) >= 5) { r_pollint._500msCount = 0; if (1 == systemState.lowBatteryFlag) { static uint8_t bmpFlash = 0; if (bmpFlash) { bmpFlash = 0; OLED_showBatteryBmp(0, 88, 8); } else { bmpFlash = 1; OLED_showBatteryBmp(0, 88, 6); } } OLED_Refresh_Gram();//更新显示 } break; case 3: //OLED_Refresh_Gram();//更新显示 break; case 4: if (3 == systemState.keyUpFlag) { if (systemState.delayCnt-- == 0) { systemState.keyUpFlag = 0; { // 关闭广播 uint8_t initialAdvertEnable = FALSE; GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initialAdvertEnable); } Util_stopClock(&periodicClock_10ms); } } break; case 5: break; case 6: break; case 7: break; case 8: break; default: break; } }
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; } } }
/** * @brief Init hardware of RTC * @param none * @retval None */ u8 RTC_Hardware_Init(void) { u16 countDown = 1000; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); PWR_BackupAccessCmd(ENABLE); //BKP_DeInit(); if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5) //从指定的后备寄存器中读出数据,判断是否为第一次配置 { BKP_DeInit(); //将外设BKP的全部寄存器重设为缺省值 RCC_LSEConfig(RCC_LSE_ON); //使能外部低速时钟 32.768KHz while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) //检查指定的RCC标志位设置与否,等待低速晶振就绪 { vTaskDelay(2 / portTICK_RATE_MS); countDown--; if (countDown == 0) { ShowDialogue("Hardware Error", "LSE crystal", "not ready!", false, true); OLED_Refresh_Gram(); while (1); } } RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟 RCC_RTCCLKCmd(ENABLE); //使能RTC时钟 RTC_WaitForSynchro(); //等待RTC寄存器(RTC_CNT,RTC_ALR和RTC_PRL)与RTC APB时钟同步 RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中断 RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 RTC_SetPrescaler(32767); //设置RTC预分频的值 RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 Time_Set(); //时间设置 BKP_WriteBackupRegister(BKP_DR1, 0xA5A5); //向指定的后备寄存器中写入用户程序数据0X5555做判断标志 } else //不是第一次配置 继续计时 { if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) //检查指定的RCC标志位设置与否:POR/PDR复位 { ; } else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET) //检查指定的RCC标志位设置与否:管脚复位 { ; } RCC_ClearFlag(); // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //先占优先级1位,从优先级3位 // NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn; //RTC全局中断 // NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级1位,从优先级3位 // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //先占优先级0位,从优先级4位 // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能该通道中断 // NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 RTC_WaitForSynchro(); //等待最近一次对RTC寄存器的写操作完成 // RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中断 RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 } //Time_Get(); //更新时间 RCC_ClearFlag(); //清除RCC的复位标志位 return 0; //ok }
void oled_temp_mode() { OLED_ShowImg(0, 0, TEMP_IMAGE, 1); OLED_Refresh_Gram(); }
void joystickScan_View(void) { uint16_t AdcValue; float Voltage; uint8_t key; static uint8_t ciri = 0, cirj = 0; key = (JoyStick_Scan(0)); if(key) { ciri = 0; AdcValue = Get_Adc_Average(ADC1, ADC_Channel_0); //读取摇杆的ADC值 OLED_ShowxNum(32, 16, AdcValue, 3, 16, 0x03); //显示ADC的值 Voltage = (float)AdcValue * (3.3 / 4096); AdcValue = Voltage; OLED_ShowxNum(64, 16, AdcValue, 1, 16, 0x01); //显示电压值 Voltage -= AdcValue; Voltage *= 1000; OLED_ShowxNum(80, 16, Voltage, 3, 16, 0x81); switch(key) { case KEY_CENTER: OLED_ShowString(0, 32, "KEY_CENTER"); break; case KEY_UP: OLED_ShowString(0, 32, "KEY_UP "); break; case KEY_LEFT: OLED_ShowString(0, 32, "KEY_LEFT "); break; case KEY_DOWN: OLED_ShowString(0, 32, "KEY_DOWN "); break; case KEY_RIGHT: OLED_ShowString(0, 32, "KEY_RIGHT "); break; case KEY_NONE: break; default: break; } } OLED_Refresh_Gram(); delay_ms(10); ciri++; if(ciri > 25) { cirj++; if(!key && cirj > 4) { cirj = 0; AdcValue = Get_Adc_Average(ADC1, ADC_Channel_0); //读取摇杆的ADC值 OLED_ShowxNum(32, 16, AdcValue, 3, 16, 0x03); //显示ADC的值 Voltage = (float)AdcValue * (3.3 / 4096); AdcValue = Voltage; OLED_ShowxNum(64, 16, AdcValue, 1, 16, 0x01); //显示电压值 Voltage -= AdcValue; Voltage *= 1000; OLED_ShowxNum(80, 16, Voltage, 3, 16, 0x81); OLED_ShowString(0, 32, "KEY_NONE "); } ciri = 0; } }
int main(void) { short real[N], image[N]; float datacpx[N]; int outLED[N]; int i,j,window; int timeL; print("FFT start\n"); Xil_Out32(OLED_BASE_ADDR,0xff); OLED_Init(); OLED_ShowString(0,0, "Hello FFT!"); OLED_Refresh_Gram(); //srand(time(0)); while(1){ init_timer(timer_ctrl, timer_counter_l, timer_counter_h); start_timer(timer_ctrl); OLED_Clear(); for (i = 0; i < N; i++) outLED[i] = 0; for(window = 0; window<WINDOW; ++window) { //Generate input data for (i = 0; i < N; i++) { #ifdef FIX_POINT real[i] = ((rand()%128-64)/128.0f)*(1<<14); image[i] = 0; #else //datacpx[2*i]=(cos(2 * M_PI * 4 * i / N)); datacpx[2*i]=(rand()%128-64)/128.0f; datacpx[2*i+1] = 0; #endif } timeL = *timer_counter_l; //FFT #ifdef FIX_POINT fix_fft(real, image, POW_N); #else fft(datacpx,N,1); #endif printf("FFT: %d us\n",(*timer_counter_l - timeL)/333); timeL = *timer_counter_l; //Conj for (i = 0; i < N; i++) { #ifdef FIX_POINT //printf("real[%d]= %d image[%d]= %d\n",i,real[i],i,image[i]); int conj_pdt_out =sqrt((real[i]*real[i]) + (image[i]*image[i])); #else int conj_pdt_out =sqrt((datacpx[2*i]*datacpx[2*i]) + (datacpx[2*i+1]*datacpx[2*i+1])); #endif //conj_pdt_out=conj_pdt_out/2; outLED[i]+=conj_pdt_out; } printf("Conj: %d us\n",(*timer_counter_l - timeL)/333); } timeL = *timer_counter_l; //Averaging for(i=0;i<N;++i) { #ifdef FIX_POINT outLED[i]=outLED[i]>>10; #else outLED[i]=outLED[i]/8; #endif } printf("Averaging: %d us\n",(*timer_counter_l - timeL)/333); stop_timer(timer_ctrl); //Display for(i=0;i<N;++i) { //printf("real[%d]= %d image[%d]= %d\n",i,real[i],i,image[i]); for(j=0; j< outLED[i]; ++j) OLED_DrawPoint(i,63-j,1); } OLED_Refresh_Gram(); } return 0; }
/**@brief Application's BLE Stack event handler. * * @param[in] p_ble_evt Bluetooth stack event. */ void on_ble_evt(ble_evt_t * p_ble_evt) { uint32_t err_code = NRF_SUCCESS; static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID; switch (p_ble_evt->header.evt_id) { case BLE_GAP_EVT_CONNECTED: adv_led_blink_stop(); if (m_is_link_loss_alerting) { alert_led_blink_stop(); } m_advertising_mode = BLE_NO_ADV; m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle; // Start handling button presses err_code = app_button_enable(); // enable the button #if OLED096_Func OLED_ShowString(0,16, (uint8_t*)"BT:CON"); OLED_Refresh_Gram(); #endif break; case BLE_GAP_EVT_DISCONNECTED: if (!m_is_link_loss_alerting) { alert_led_blink_stop(); } m_conn_handle = BLE_CONN_HANDLE_INVALID; // Since we are not in a connection and have not started advertising, store bonds err_code = ble_bondmngr_bonded_masters_store(); APP_ERROR_CHECK(err_code); advertising_start(); #if OLED096_Func OLED_ShowString(0,16, (uint8_t*)"BT:DIS"); OLED_Refresh_Gram(); #endif break; case BLE_GAP_EVT_SEC_PARAMS_REQUEST: err_code = sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_SUCCESS, &m_sec_params); break; case BLE_GAP_EVT_TIMEOUT: if (p_ble_evt->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT) { if (m_advertising_mode == BLE_SLEEP) { m_advertising_mode = BLE_NO_ADV; adv_led_blink_stop(); alert_led_blink_stop(); GPIO_WAKEUP_BUTTON_CONFIG(SIGNAL_ALERT_BUTTON); GPIO_WAKEUP_BUTTON_CONFIG(BONDMNGR_DELETE_BUTTON_PIN_NO); // Go to system-off mode // (this function will not return; wakeup will cause a reset) #if 0 err_code = sd_power_system_off(); #endif #if OLED096_Func OLED_ShowString(0,16, (uint8_t*)"BT:Tout"); OLED_Refresh_Gram(); #endif } else { advertising_start(); } } break; case BLE_GATTC_EVT_TIMEOUT: case BLE_GATTS_EVT_TIMEOUT: // Disconnect on GATT Server and Client timeout events. err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); break; default: break; } APP_ERROR_CHECK(err_code); }