//显示一个字符号串 void OLED_ShowString(u8 x,u8 y,u8 *chr) { unsigned char j=0; while (chr[j]!='\0') { OLED_ShowChar(x,y,chr[j]); x+=8; if(x>120){x=0;y+=2;} j++; } }
//显示2个数字 //x,y :起点坐标 //len :数字的位数 //size:字体大小 //mode:模式 0,填充模式;1,叠加模式 //num:数值(0~4294967295); void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size) { uint8_t t,temp; uint8_t enshow=0; for(t=0;t<len;t++) { temp=(num/oled_pow(10,len-t-1))%10; if(enshow==0&&t<(len-1)) { if(temp==0) { OLED_ShowChar(x+(size/2)*t,y,' '); continue; }else enshow=1; } OLED_ShowChar(x+(size/2)*t,y,temp+'0'); } }
//显示2个数字 //x,y :起点坐标 //len :数字的位数 //size:字体大小 //mode:模式 0,填充模式;1,叠加模式 //num:数值(0~4294967295); void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2) { u8 t,temp; u8 enshow=0; for(t=0;t<len;t++) { temp=(num/oled_pow(10,len-t-1))%10; if(enshow==0&&t<(len-1)) { if(temp==0) { OLED_ShowChar(x+(size2/2)*t,y,' '); continue; }else enshow=1; } OLED_ShowChar(x+(size2/2)*t,y,temp+'0'); } }
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 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(); }
//显示字符串 //x,y:起点坐标 //*p:字符串起始地址 //用16字体 void OLED_ShowString(u8 x,u8 y,const u8 *p) { #define MAX_CHAR_POSX 122 #define MAX_CHAR_POSY 58 while(*p!='\0') { if(x>MAX_CHAR_POSX){x=0;y+=16;} if(y>MAX_CHAR_POSY){y=x=0;OLED_Clear();} OLED_ShowChar(x,y,*p,16,1); x+=8; p++; } }
/* *@功能:显示一个字符号串 */ void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr) { uint8_t j=0; while (chr[j]!='\0') { OLED_ShowChar(x,y,chr[j]); x+=8; if(x>120) { x=0; y+=2; //表示换到下行 } j++; } }
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; } }
///////////////////////////////////////////////////////////////////// //显示字符串 //x,y:起点坐标 //*p:字符串起始地址 //用16字体 void OLED_ShowString(uint8_t x,uint8_t y, uint8_t *p) { #define MAX_CHAR_POSX 122 //#define MAX_CHAR_POSY 58 #define MAX_CHAR_POSY 64 while(*p!='\0') { if(x>MAX_CHAR_POSX) { x=0;y+=16; } if(y>MAX_CHAR_POSY) { y=x=0;OLED_Clear(); } OLED_ShowChar(x,y,*p,16,1); x+=8; p++; } }
//显示一个字符号串 void OLED_ShowString(u8 x,u8 y,u8 *chr) { unsigned char j=0; while (chr[j]!='\0') { // add for CR/LF if( ('\r' == chr[j]) && ('\n' == chr[j+1]) ){ // user set next line x = 0; y += 2; j += 2; } else{ OLED_ShowChar(x,y,chr[j]); x += 8; if( (x>120) && (('\r' != chr[j+1]) || ('\n' != chr[j+2])) ){ // auto next line x = 0; y += 2; } j++; } } }
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 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: ; }