(转)LCD编程框架

来源:互联网 发布:c语言 ip地址 合法性 编辑:程序博客网 时间:2024/06/10 00:49

Menu.h 
------------------------------- 

#ifndef        __MENU_h__ 
#define        __MENU_h__ 
#include "Functions.h" 
 

 
struct MenuItem         

    short MenuCount; 
    char *DisplayString; 
    void (*Subs)(); 
    struct MenuItem *ChildrenMenus; 
    struct MenuItem *ParentMenus; 
}Null; 

void NullSubs(void) 





 


struct MenuItem MainMenu[3]; 
struct MenuItem TimeMenu[4]; 
struct MenuItem VoiceMenu[5]; 
struct MenuItem RobotMenu[5]; 
struct MenuItem FlashMenu[5]; 

 
void MainMenuInit(void); 
void TimeMenuInit(void); 
void VoiceMenuInit(void); 
void RobotMenuInit(void); 
void FlashMenuInit(void); 

 
void FlashMenuInit(void) 

    FlashMenu[0].MenuCount 5; 
    FlashMenu[0].DisplayString  Flash Record  "; 
    FlashMenu[0].Subs FlashRecord; 
    FlashMenu[0].ChildrenMenus &Null; 
    FlashMenu[0].ParentMenus MainMenu; 
     
    FlashMenu[1].MenuCount 5; 
    FlashMenu[1].DisplayString      Play      "; 
    FlashMenu[1].Subs FlashPlay; 
    FlashMenu[1].ChildrenMenus &Null; 
    FlashMenu[1].ParentMenus MainMenu; 
     
    FlashMenu[2].MenuCount 5; 
    FlashMenu[2].DisplayString      Pause     "; 
    FlashMenu[2].Subs FlashPause; 
    FlashMenu[2].ChildrenMenus &Null; 
    FlashMenu[2].ParentMenus MainMenu; 
     
    FlashMenu[3].MenuCount 5; 
    FlashMenu[3].DisplayString  Flash Delete  "; 
    FlashMenu[3].Subs FlashDelete; 
    FlashMenu[3].ChildrenMenus &Null; 
    FlashMenu[3].ParentMenus MainMenu; 
     
    FlashMenu[4].MenuCount 5; 
    FlashMenu[4].DisplayString      Back      "; 
    FlashMenu[4].Subs NullSubs; 
    FlashMenu[4].ChildrenMenus MainMenu; 
    FlashMenu[4].ParentMenus MainMenu; 


 
void RobotMenuInit(void) 

    RobotMenu[0].MenuCount 5; 
    RobotMenu[0].DisplayString   Turn  Left   "; 
    RobotMenu[0].Subs RobotTurnLeft; 
    RobotMenu[0].ChildrenMenus &Null; 
    RobotMenu[0].ParentMenus MainMenu; 
     
    RobotMenu[1].MenuCount 5; 
    RobotMenu[1].DisplayString   Turn Right   "; 
    RobotMenu[1].Subs RobotTurnRight; 
    RobotMenu[1].ChildrenMenus &Null; 
    RobotMenu[1].ParentMenus MainMenu; 
     
    RobotMenu[2].MenuCount 5; 
    RobotMenu[2].DisplayString    Go  Ahead   "; 
    RobotMenu[2].Subs RobotGoAhead; 
    RobotMenu[2].ChildrenMenus &Null; 
    RobotMenu[2].ParentMenus MainMenu; 
     
    RobotMenu[3].MenuCount 5; 
    RobotMenu[3].DisplayString     Go Back    "; 
    RobotMenu[3].Subs RobotGoBack; 
    RobotMenu[3].ChildrenMenus &Null; 
    RobotMenu[3].ParentMenus MainMenu; 
     
    RobotMenu[4].MenuCount 5; 
    RobotMenu[4].DisplayString      Back      "; 
    RobotMenu[4].Subs NullSubs; 
    RobotMenu[4].ChildrenMenus MainMenu; 
    RobotMenu[4].ParentMenus MainMenu; 
     


 
void VoiceMenuInit(void) 

    VoiceMenu[0].MenuCount 5; 
    VoiceMenu[0].DisplayString  Voice Record  "; 
    VoiceMenu[0].Subs VoiceRecord; 
    VoiceMenu[0].ChildrenMenus &Null; 
    VoiceMenu[0].ParentMenus MainMenu; 
     
    VoiceMenu[1].MenuCount 5; 
    VoiceMenu[1].DisplayString      Play      "; 
    VoiceMenu[1].Subs Play; 
    VoiceMenu[1].ChildrenMenus &Null; 
    VoiceMenu[1].ParentMenus MainMenu; 
     
    VoiceMenu[2].MenuCount 5; 
    VoiceMenu[2].DisplayString      Pause     "; 
    VoiceMenu[2].Subs Pause; 
    VoiceMenu[2].ChildrenMenus &Null; 
    VoiceMenu[2].ParentMenus MainMenu; 
     
    VoiceMenu[3].MenuCount 5; 
    VoiceMenu[3].DisplayString  Voice Delete  "; 
    VoiceMenu[3].Subs VoiceDelete; 
    VoiceMenu[3].ChildrenMenus &Null; 
    VoiceMenu[3].ParentMenus MainMenu; 
     
    VoiceMenu[4].MenuCount 5; 
    VoiceMenu[4].DisplayString      Back      "; 
    VoiceMenu[4].Subs NullSubs; 
    VoiceMenu[4].ChildrenMenus MainMenu; 
    VoiceMenu[4].ParentMenus MainMenu; 


 
void TimeMenuInit(void) 

    TimeMenu[0].MenuCount 4; 
    TimeMenu[0].DisplayString    Time Set    "; 
    TimeMenu[0].Subs TimeSet; 
    TimeMenu[0].ChildrenMenus &Null; 
    TimeMenu[0].ParentMenus MainMenu; 
     
    TimeMenu[1].MenuCount 4; 
    TimeMenu[1].DisplayString    Date Set    "; 
    TimeMenu[1].Subs DateSet; 
    TimeMenu[1].ChildrenMenus &Null; 
    TimeMenu[1].ParentMenus MainMenu; 
     
    TimeMenu[2].MenuCount 4; 
    TimeMenu[2].DisplayString    AlertSet    "; 
    TimeMenu[2].Subs AlertSet; 
    TimeMenu[2].ChildrenMenus &Null; 
    TimeMenu[2].ParentMenus MainMenu; 
     
    TimeMenu[3].MenuCount 4; 
    TimeMenu[3].DisplayString      Back      "; 
    TimeMenu[3].Subs NullSubs; 
    TimeMenu[3].ChildrenMenus MainMenu; 
    TimeMenu[3].ParentMenus MainMenu; 
     


 
void MainMenuInit(void) 

     MainMenu[0].MenuCount 3; 
     MainMenu[0].DisplayString    Time Set    "; 
     MainMenu[0].Subs NullSubs; 
     MainMenu[0].ChildrenMenus TimeMenu; 
     MainMenu[0].ParentMenus &Null; 

     MainMenu[1].MenuCount 3; 
     MainMenu[1].DisplayString  Voice Center  "; 
     MainMenu[1].Subs NullSubs; 
     MainMenu[1].ChildrenMenus VoiceMenu; 
     MainMenu[1].ParentMenus &Null; 
      
     MainMenu[2].MenuCount 3; 
     MainMenu[2].DisplayString  Flash Option  "; 
     MainMenu[2].Subs NullSubs; 
     MainMenu[2].ChildrenMenus FlashMenu;      
     MainMenu[2].ParentMenus &Null; 



#endif 

Function.h 
------------------------------ 

#ifndef        __FUNCTIONS_h__ 
#define        __FUNCTIONS_h__ 
 
    #include "TimeSet.h" 
    #include "VoiceCenter.h" 
    #include "RobotControl.h" 
    #include "FlashOption.h" 

 
#endif 


main.c 
----------------------------- 

#include "GRAPH_Command.h" 
#include "Functions.h" 
#include "Menu.h" 

 
define UP        
define Down      
define Enter     
define Esc       
define Reset     

 

     
    struct MenuItem (*MenuPoint) MainMenu; 
    short DisplayStart 0; 
    short UserChoose 0; 
    short DisplayPoint 0; 
    short MaxItems;     


 

 
extern void ClearWatchDog(); 
void MenuInitialation(void); 
void SystemInitialation(void); 
void ShowMenu(void); 
short GetKeyNum(void); 

 
void SystemInitialation(void) 

        Init_sys();           
        Enable_LCD();                          //初始化字库      函数定义在 
        MenuInitialation();               //初始化菜单 
        GRAPH                             //图形初始化 


 
void MenuInitialation(void) 

    MainMenuInit(); 
    TimeMenuInit(); 
    VoiceMenuInit(); 
    RobotMenuInit(); 
    FlashMenuInit(); 


 
void ShowMenu(void) 

    short 0; 

    MaxItems MenuPoint[0].MenuCount; 
    DisplayPoint DisplayStart; 
        if (MaxItems >= 4) 
        
             for (n 0;n<4;n++) 
             
                          
                 LOCATE(n+1,1); 
                 PRINT(MenuPoint[DisplayPoint].DisplayString); 
                  
                 if ((DisplayPoint) == UserChoose) 
                     
                         BOX(1,n*16+1,126,(n+1)*16-2,1,1); 
                     
                  
                     DisplayPoint +=1; 
                     if ((DisplayPoint) == (MaxItems)) 
                     
                         DisplayPoint 0; 
                     
             
         
         else 
         
             for (n 0;n
             
                          
                 LOCATE(n+1,1); 
                 PRINT(MenuPoint[DisplayPoint].DisplayString); 
                  
                 if ((DisplayPoint) == UserChoose) 
                     
                         BOX(1,n*16+1,126,(n+1)*16-2,1,1); 
                     
                  
                     DisplayPoint +=1; 
                     if ((DisplayPoint) == (MaxItems)) 
                     
                         DisplayPoint 0; 
                     
                  
             
         
        //BOX(0,0,127,63,2,2); 


 
short GetKeyNum(void) 

    short TempKeyNum 0; 
        TempKeyNum F_Key_Scan();       //获取按键值 
        *P_IOA_Dir 0x01ff; 
        *P_IOA_Attrib 0x01ff;        
        *P_IOA_Data 0x01ff; 
             
        return TempKeyNum; 



 
int main() 
                      
    short KeyNum 0xff; 
     
    SystemInitialation();            //系统初始化 
     
    ShowMenu(); 
        while(1) 
        
            ClearWatchDog();             //喂狗 
            KeyNum GetKeyNum();        //获取按键值 

             
             
             
            if (KeyNum != 0xff) 
            
             ShowMenu(); 
                 switch(KeyNum) 
                 
                     case UP: 
                         UserChoose --; 
                         if (UserChoose 0) 
                         
                             UserChoose MaxItems-1; 
                         
                         break; 
                     case Esc: 
                         if (MenuPoint[0].ParentMenus != &Null) 
                         
                             MenuPoint MenuPoint[0].ParentMenus; 
                             UserChoose 0; 
                             DisplayStart 0; 
                         
                         break; 
                     case Down: 
                         UserChoose ++; 
                         if (UserChoose == MaxItems) 
                         
                             UserChoose 0; 
                         
                          
                         break; 
                     case Enter: 
                         if (MenuPoint[UserChoose].Subs != NullSubs) 
                         
                             (*MenuPoint[UserChoose].Subs)(); 
                         
                         else if (MenuPoint[UserChoose].ChildrenMenus != &Null) 
                         
                             MenuPoint MenuPoint[UserChoose].ChildrenMenus; 
                             UserChoose 0; 
                             DisplayStart 0; 
                         
                         break; 
                     case Reset: 
                         MenuPoint MainMenu; 
                         UserChoose 0; 
                         DisplayStart 0; 
                         break; 
                 
                  
                 if ((UserChoose DisplayStart) || (UserChoose (DisplayStart+3))) 
                 
                    DisplayStart UserChoose; 
                 
                  
                 CLS 
                 ShowMenu(); 
                  
            
             
        
         



补充一个关于作图的库函数 

GRAPH_Command.h 
---------------------------- 

#ifndef        __GRAPH_COMMAND_h__ 
#define        __GRAPH_COMMAND_h__ 
#include "lab_parameter.h" 
 

 
define GRAPH          FG_InitGraphic(); 
define CLS        FG_ClearScreen(DG_CLS_ERASE); 


 
short  Now_Str_X 1; 
short  Now_Str_Y 1; 

 
void BOX(short LT_X,short LT_Y,short RB_X,short RB_Y,short IfEraser,short FillColor); 
void LOCATE(short Str_x,short Str_y); 
void Print(char *Strings); 


 
void BOX(short LT_X,short LT_Y,short RB_X,short RB_Y,short DrawModel,short FillColor) 

    if (LT_X 0)        LT_X 0; 
    if (LT_Y 0)        LT_Y 0; 
    if (RB_X 127)      RB_X 127; 
    if (RB_Y 63)       RB_Y 63; 
     
    LT_X 127 LT_X; 
    LT_Y 64 LT_Y; 
     
    RB_X 127 RB_X; 
    RB_Y 64 RB_Y; 
         
    switch (DrawModel) 
    
        case 0: 
            if(FillColor == 1) 
            
                FG_SetRectStyle(DG_RECT_ERASE); 
            
            else 
            
                FG_SetRectStyle(DG_RECT_COVER); 
            
            FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y); 
            break; 
        case 1: 
            if (FillColor == 1) 
            
                FG_SetRectStyle(DG_RECT_HOLLOW); 
            
            else if(FillColor == 0) 
            
                FG_SetRectStyle(DG_RECT_HOLLOW_ERASE); 
            
            else if(FillColor == 2) 
            
                FG_SetRectStyle(DG_RECT_SOLID_XOR); 
            
            FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y); 
            break; 
        case 2: 
            if (FillColor == 1) 
            
                FG_SetRectStyle(DG_RECT_COVER); 
                FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y); 
            
            else if (FillColor == 0) 
            
                FG_ClearRect(RB_X,RB_Y,LT_X,LT_Y,DG_CLS_ERASE); 
            
            else if (FillColor == 2) 
            
                FG_SetRectStyle(DG_RECT_SOLID_XOR); 
                FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y); 
            
             
            break; 
    



 
void LOCATE(short Str_y,short Str_x) 

    if (Str_x >= && Str_x <=17) 
    
        Now_Str_X Str_x; 
    
    if (Str_y >= && Str_y <=4) 
    
        Now_Str_Y Str_y; 
    


 
void PRINT(char *Strings) 

    short Temp_X =(Now_Str_X-1)<<3; 
    short Temp_Y =(Now_Str_Y-1)<<4; 
    if (Temp_X 0)        Temp_X 0; 
    if (Temp_Y 1)        Temp_Y 1; 
     
    Temp_X 127 Temp_X; 
     
    Temp_Y 63 Temp_Y; 
     
    FG_PutStr(Strings,3,Temp_X,Temp_Y); 


#endif 

0 0
原创粉丝点击