void draw_menu(void) { struct m_item* mi_child; uint8_t index_temp = 0; uint8_t i = 0; Disp_Clear(); if(menu_type) { XY_Str(2,0,(*mi_entry).text); mi_child = (*mi_entry).child; XY_Str(1,1,(*mi_child).text); mi_child = (*mi_child).next; XY_Str(8,1,(*mi_child).text); if(arrow_Pos_H == 0) XY_Char(0,1,m_arrow); else XY_Char(7,1,m_arrow); } else { Locate_xy(0,0); Disp_Str((*mi_entry).text); Locate_xy(4,0); Disp_Char('.'); Disp_Char('|'); if(arrow_Pos_V == 0) { index_temp = mi_index; Disp_Char(m_arrow); } else { index_temp = mi_index - 1; XY_Char(6,1,m_arrow); } Locate_xy(5,1); Disp_Char('|'); mi_child = (*mi_entry).child; for(i=0;i<2;i++) { while((*mi_child).index != index_temp + i) mi_child = (*mi_child).next; XY_Str(7,i,(*mi_child).text); if((*mi_child).child == 0) XY_Char(15,i,'|'); else XY_Char(15,i,'>'); } } }
/************************************************************** * 函数说明:目录显示函数 * **************************************************************/ void ShowMenu(void) { unsigned char n = 0; MaxItems = MenuPoint[0].MenuCount; DisplayPoint = DisplayStart; for(n = 0;n<MaxItems;n++) { Disp_Str(n,0,MenuPoint[DisplayPoint++].DisplayString); } Set_Cursor(1,1); }
/************************************************************** * 函数说明:电机参数设置函数 * **************************************************************/ void SetMotor(void) { uint8 esc_flag = 0; uint8 count = 0; Disp_Str_eeprom(1,3,str_speed); Disp_Str_eeprom(2,3,divid); if(run_type == Horizon) { Disp_Str(3,3,"水平"); } else { Disp_Str(3,3,"垂直"); } UserChooseR = 1; UserChooseC = 4; Set_Cursor(UserChooseR,UserChooseC); while(!esc_flag) { if(time_10ms) //10ms定时扫描键盘 { time_10ms = 0; *pRockValue=No_rock; rocker_type = Read_Rocker(pRockValue); if(rocker_type & keyPressed) { switch(*pRockValue) { case Down: UserChooseR ++; if(UserChooseR == 4) { UserChooseR = 1; } break; case Left: UserChooseC --; if(UserChooseC == 2) { UserChooseC = 4; } break; } Set_Cursor(UserChooseR,UserChooseC); } key_value= Read_keyboard(); if(key_value != No_key) { switch(key_value) { case Esc: if(MenuPoint[UserChooseR].ParentMenus != NULL) { MenuPoint = MenuPoint[UserChooseR].ParentMenus; UserChooseR = 0; UserChooseC = 0; //DisplayStart = 0; } esc_flag = 1; break; case OK: //Set_Mode(); break; default: switch(UserChooseR) { case 1: if(UserChooseC==3) { if(count==0) str_speed[0] = key_value + 0x30; else str_speed[1] = key_value + 0x30; } if(UserChooseC==4) { if(count==0) str_speed[2] = key_value + 0x30; else str_speed[3] = key_value + 0x30; } Disp_Str_eeprom(0,3,str_speed); int_speed = Str2Int(str_speed); break; case 2: if(UserChooseC==3) { if(count==0) divid[0] = key_value + 0x30; else divid[1] = key_value + 0x30; } if(UserChooseC==4) { if(count==0) divid[2] = key_value + 0x30; else divid[3] = key_value + 0x30; } Disp_Str_eeprom(2,3,divid); subdiv = Str2Int(divid); break; case 3: //待添加功能 break; } } count = count + 1; if(count==2) count = 0; } } } moto_set(int_speed,subdiv); Clear_Scr(); ShowMenu(); }
/************************************************************** * 函数说明:光传感器设置函数 * **************************************************************/ void SetSensor(void) { char *str_AV = (char *) malloc(5); char *str_TV = (char *) malloc(8); char *str_ISO = (char *) malloc(5); char *str_coef = (char *) malloc(5); char *str_HDR = (char *) malloc(2); char *str_ND = (char *) malloc(3); uint8 AV_NO = 1; uint8 esc_flag = 0; uint8 time_cnt = 0; float coef,AV; uint32 int_TV; uint16 ISO; uint8 HDR,ND; Set_Mode(OFF); ISO = 100 << e_ISO; itoa(ISO,str_ISO); Disp_Str1(0,5,str_ISO); AV = e_AV; ftoa(AV,1,str_AV); Disp_Str1(0,1,str_AV); coef = e_coef; ftoa(coef,2,str_coef); Disp_Str1(2,5,str_coef); HDR = e_HDR; itoa(HDR,str_HDR); Disp_Str1(3,3,str_HDR); ND = e_ND; itoa(ND,str_ND); Disp_Str1(3,6,str_ND); while(!esc_flag) { if(time_10ms) //10ms定时扫描键盘 { time_10ms = 0; key_value= Read_keyboard(); if(key_value != No_key) { switch(key_value) { case Esc: if(MenuPoint[UserChooseR].ParentMenus != NULL) { MenuPoint = MenuPoint[UserChooseR].ParentMenus; UserChooseR = 1; UserChooseC = 0; //DisplayStart = 0; } esc_flag = 1; break; case OK: //Set_Mode(); break; case 1: AV_NO++; if(AV_NO==8) { AV_NO = 1; } break; case 3: e_ISO++; if(e_ISO == 6) {e_ISO = 0;} ISO = 100 << e_ISO; break; case 4: coef -= 0.05; break; case 6: coef += 0.05; break; case 7: HDR++; if(HDR == 7) { HDR = 0; } break; case 9: ND++; if(ND == 11) { ND = 0; } default: break; } switch(AV_NO) { case 1: AV = 2.8; break; case 2: AV = 4.0; break; case 3: AV = 5.6; break; case 4: AV = 8.0; break; case 5: AV = 11; break; case 6: AV = 16; break; case 7: AV = 22; break; default: break; } e_AV = AV; ftoa(AV,1,str_AV); Disp_Str(0,1," "); Disp_Str1(0,1,str_AV); e_coef = coef; ftoa(coef,2,str_coef); Disp_Str1(2,5,str_coef); itoa(ISO,str_ISO); Disp_Str(0,5," "); Disp_Str1(0,5,str_ISO); e_HDR = HDR; itoa(HDR,str_HDR); Disp_Str1(3,3,str_HDR); e_ND = ND; itoa(ND,str_ND); Disp_Str(3,6," "); Disp_Str1(3,6,str_ND); } if(++time_cnt == 100) { time_cnt = 0; //get_lux(); //Disp_Str1(0,4,lux_value); int_TV = Get_TV(); ltoa(int_TV,str_TV); Disp_Str(1,3," "); Disp_Str1(1,3,str_TV); } } } free(str_AV); free(str_TV); free(str_ISO); free(str_coef); free(str_HDR); free(str_ND); Set_Mode(ON); Clear_Scr(); ShowMenu(); }
/************************************************************** * 函数说明:状态显示函数 * **************************************************************/ void ShowState(void) { char *s_taken = (char *) malloc(5); char *s_left = (char *) malloc(5); char *s_dist = (char *) malloc(5); uint8 time_cnt = 0; uint8 esc_flag = 0; //UserChooseR = 0; //Set_Cursor(0,0); itoa(photo_taken,s_taken); Disp_Str1(0,2,s_taken); itoa(photo_left,s_left); Disp_Str1(0,6,s_left); itoa(now_dist,s_dist); Disp_Str1(1,5,s_dist); Set_Mode(OFF); while(!esc_flag) { if(time_10ms) //10ms定时扫描键盘 { time_10ms = 0; key_value= Read_keyboard(); if(key_value == Esc) { Set_Mode(ON); if(MenuPoint[UserChooseR].ParentMenus != NULL) { MenuPoint = MenuPoint[UserChooseR].ParentMenus; UserChooseR = 1; UserChooseC = 1; } esc_flag = 1; } if(++time_cnt == 100) { time_cnt = 0; //s_taken = Int2Str(photo_taken); itoa(photo_taken,s_taken); Disp_Str(0,2," "); Disp_Str1(0,2,s_taken); //s_left = Int2Str(photo_left); itoa(photo_left,s_left); Disp_Str(0,6," "); Disp_Str1(0,6,s_left); //dist_str = Int2Str(now_dist); itoa(now_dist,s_dist); Disp_Str(1,5," "); Disp_Str1(1,5,s_dist); //delay_ms(50); } } } free(s_taken); free(s_left); free(s_dist); Clear_Scr(); ShowMenu(); }
/************************************************************** * 函数说明:自定义快门设置函数 * **************************************************************/ void SetShutter(void) { uint8 esc_flag = 0; uint8 count = 0; Disp_Str_eeprom(0,5,TV); UserChooseR = 0; UserChooseC = 5; Set_Cursor(UserChooseR,UserChooseC); while(!esc_flag) { if(time_10ms) //10ms定时扫描键盘 { time_10ms = 0; *pRockValue=No_rock; rocker_type = Read_Rocker(pRockValue); if(rocker_type & keyPressed) { switch(*pRockValue) { case Down: UserChooseR ++; if(UserChooseR == 3) { UserChooseR = 0; } break; case Left: UserChooseC --; if(UserChooseC == 4) { UserChooseC = 6; } break; } Set_Cursor(UserChooseR,UserChooseC); } key_value= Read_keyboard(); if(key_value != No_key) { switch(key_value) { case Esc: if(MenuPoint[UserChooseR].ParentMenus != NULL) { MenuPoint = MenuPoint[UserChooseR].ParentMenus; UserChooseR = 1; UserChooseC = 0; //DisplayStart = 0; } esc_flag = 1; break; case OK: Disp_Str(0,7," S"); break; default: switch(UserChooseR) { case 0: if(UserChooseC==5) { if(count==0) TV[0] = key_value + 0x30; else TV[1] = key_value + 0x30; } if(UserChooseC==6) { if(count==0) TV[2] = key_value + 0x30; else TV[3] = key_value + 0x30; } Disp_Str_eeprom(0,5,TV); break; case 1: // break; case 2: // break; } } count = count + 1; if(count==2) count = 0; } } } //expos_value = Str2Int(TV); Clear_Scr(); ShowMenu(); }