| 第八讲:单片机驱动12864多级菜单设计(二)——主程序设计
 
 
 /******************************************************
 **作品:LCD12864多级菜单设计
 **申明:转载请标明作品来源 知识产权归作者本人所有!
 ** 功能描述:  LCD12864多级菜单设计
 ** 液晶:Proteus元件库—AMPIRE128X64(无字库)
 ** 作 者:    吴鉴鹰
 ** 日 期:     14.06.12
 **作者所属单位:鉴鹰电子工作室
 **交流QQ群: 第一群:198387118   第二群: 239316959   联系QQ:1811728618
 ** 更多内容可以关注微信公众号:单片机精讲吴鉴鹰  微信号:wujianying_danpianji
 **申明:转载请标明作品来源 知识产权归作者吴鉴鹰所有!
 
 #include"inc/ComCtrol.h"
#include"inc/Uart_Function.h"
#include"inc/Short_variabledefine.h"
#include"inc/WjMath_Fun.h"
#include<reg51.h>
#include"inc/Menu_Function_Display.h"
#include"inc/Key_Function.h"
#include"inc/Com_Diaplay_Function.h"
#include"inc/Menufun_Array.h"
#include"inc/Lcd_12864_Function.h"
#include "inc/1302.h"
//#include"inc/main.h"
extern uFlag Menu_SysFlag;
extern U8 KeyVal;
extern U8 MenuIndexSaved;
extern sMenuItem *pMenuSelect;
extern code sMenuItem MenuRoot_L1[4];
extern code sMenuItem Homepage[4];
extern U8 code ascii[][32];
extern char datastring[13];   ////存放时间的数组
extern sMenuItem *pMenuSelect;//定义了一个结构体数组指针
extern U8 code Hour[];
extern U8 Chao_Flag;
U8  Display_Time_Flag;
U8  Cun_Sec_B;
systemtime realtime;
#define _DEBUG
#ifdef _DEBUG
/*************************************************************
** 函数名称:void main()
** 功能描述: 主函数        
** 输 入:   
** 输 出:  
**         
** 全局变量:
** 调用模块: 
**备注: 
** 作 者:    吴鉴鹰
** 日 期:     14.06.12
**************************************************************/
void main()
{
        Menu_Init();
        Lcd_Clear_Screen(2);
        Lcd_Init_Fun(); 
        Display_Time_Flag = 0;
        Cun_Sec_B = datastring[11]+1;
        Chao_Flag = 0;
        /*while(1)
        {
                        Get_Time_Function(&realtime);
                        
                        Lcd_12864_Function_SendString(1,0, 0, ascii[datastring[0]]);
                        Lcd_12864_Function_SendString(1,0, 1, ascii[datastring[1]]);
                        Lcd_12864_Function_SendString(1,1, 2, ascii[datastring[2]]);
                        Lcd_12864_Function_SendString(1,1, 3, ascii[datastring[3]]);
                        Lcd_12864_Function_SendString(1,2, 4, ascii[datastring[4]]);
                        Lcd_12864_Function_SendString(1,2, 5, ascii[datastring[5]]);
                        Lcd_12864_Function_SendString(1,3, 6, ascii[datastring[6]]);
                        Lcd_12864_Function_SendString(1,3, 7, ascii[datastring[7]]);
         }*/
        //更新屏幕内容
        Menu_SysFlag.Bits.is_ScreenChanged = 1;        
        while (1)
        {
                Key_Get_Value();
                Get_Time_Function(&realtime);
                
                if(((pMenuSelect->MenuTittle) == Hour)&&(Cun_Sec_B != datastring[11]))
                {
                    Display_Time_Flag = 1;
                    Cun_Sec_B = datastring[11];
                }
                else
                {
                    Display_Time_Flag = 0;
                }
                //处于配置菜单模式
                if (Menu_SysFlag.Bits.is_InConfig)
                {
                     Delay_1ms_Function(10);
                
                         Menu_Main();
                }
                //设置进入配置模式标志
                else if ((!Menu_SysFlag.Bits.is_InConfig)&&(Menu_SysFlag.Bits.is_KeyPressed)&&(KeyVal == KEY_ENTER))
                {
                        Menu_SysFlag.Bits.is_InConfig = 1;
                        KeyVal = 0x00;
                        MenuIndexSaved = 0x00;
                        pMenuSelect = MenuRoot_L1;//把结构体数组的首地址传输给指针
                }
                //处于显示模式,根据标志刷新显示内容
                else if ((!Menu_SysFlag.Bits.is_InConfig)&Menu_SysFlag.Bits.is_ScreenChanged)
                { 
                    //Menu_SysFlag.Bits.is_ScreenChanged = 0;
                    //Lcd_Clear_Screen(2);
                    //etOnOff(0);                //关显示
                        ShowHomepage();
                    Lcd_SetOnOff(1);
                 }
        }
        while (1);                
}
#endif
 
 |