导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→一个极简单的用C实现的LCD菜单显示例子[wjb444]

 *第34536篇: 一个极简单的用C实现的LCD菜单显示例子

  
楼 主:wjb444 2005年9月19日23:18
 一个极简单的用C实现的LCD菜单显示例子
我是一个初学者,这个菜单在我的板子上能正常使用,很直观,很简单,适合初学者,但可能存在隐患,因为函数递归调用,有可能会耗尽RAM资源,希望各位大大指正
LCD:12232
MCU:SST89C52RC                            QQ:36835984
//////////////////////////////////////////////////////////////////////////////////////////////
/*****************************************************


      //--菜单11
    --设置时间--
      //--菜单12
                    --时间日期--   
      --菜单21
    --设置闹钟--
      --菜单22
主界面---
      --菜单31
    --菜单3--
      --菜单32
    --主菜单2--
      --菜单41
    --菜单4--
      --菜单42

******************************************************/


#include   <reg52.h>  
#define uchar unsigned char 
extern uchar code jiantou_shang[];      //上
extern uchar code jiantou_zhong[];      //中
extern uchar code jiantou_xia[];  //下
extern uchar code xiegang[];   ///
extern uchar code henggang[];   //-
extern uchar code maohao[];    //:
extern uchar code zhu[];    //主
extern uchar code cai[];    //菜
extern uchar code dan[];    //单
extern uchar code yan[];    //演 
extern uchar code si[];     //示
extern uchar code cheng[];    //程
extern uchar code xu[];     //序
extern uchar code shi[];    //时
extern uchar code jian[];    //间
extern uchar code ri[];     //日
extern uchar code qi[];     //期
extern uchar code she[];    //设
extern uchar code zi[];     //置
extern uchar code nao[];    //闹
extern uchar code zhong[];    //钟
extern uchar code pic0[];    //图片
extern uchar code num0[];    //0
extern uchar code num1[];    //1
extern uchar code num2[];    //2
extern uchar code num3[];    //3
extern uchar code num4[];    //4
extern uchar code num5[];    //5
extern uchar code num6[];    //6
extern uchar code num7[];    //7
extern uchar code num8[];    //8
extern uchar code num9[];    //9


extern void Get1302(uchar ucCurtime[]);
extern void Set1302(uchar *pClock);
extern void settime_year(void);
extern void start(void);

extern unsigned char key_scan_once();
extern unsigned char key_scan_cyc();
extern void Set1302(uchar *pClock);
extern void Get1302(uchar ucCurtime[]);
extern void init_lcd (void);
extern void delay (unsigned int us);  
extern void delay1 (unsigned int ms);
extern void disphz (uchar code *chn,uchar page,uchar line);
extern void dispzf (uchar code *eng,uchar page,uchar line);
extern void dispjt (uchar code *jiantou,uchar page);
extern void disptu (uchar code *img);
extern void wrlattice (uchar data1,uchar data2);
                        //00 //32 //23  //19 //12 //07 //05
            //秒  //分 //时 //日  //月  //星期//年
uchar  time_set[7]=      {0x00,0x32,0x15,0x18,0x12,0x07,0x05};
uchar  time_get[7];

//////////////////////////////////////////////////////////////
void zhujiemian(void);
void zhu_menu1(void);
void zhu_menu2(void);
void menu1(void);
void menu2(void);
void menu3(void);
void menu4(void);
void menu1_1(void);
void menu1_2(void);
void menu2_1(void);
void menu2_2(void);
void menu3_1(void);
void menu3_2(void);
void menu4_1(void);
void menu4_2(void);
void disptime(void);
uchar gewei(uchar zhi);
uchar shiwei(uchar zhi);

/////////////////////////////////////////////////////////////
/*********************************************************
 函 数 名:zhu_menu1()
 功    能:显示1级菜单的第一行
 说    明:
 调    用:disphz (uchar code *chn,uchar page,uchar line),
    dispzf (uchar code *eng,uchar page,uchar line);
    dispjt (uchar code *jiantou,uchar page);
 入口参数:无       
 返 回 值:无
 设    计: 汪建斌                    日    期:2005-09-11  
**********************************************************/
void zhu_menu1()                         
{
 wrlattice (0x00,0x00);          //清屏    
// dispjt (jiantou_shang,0);    //箭头上
 dispjt (jiantou_xia,1);  //箭头下
 disphz (jiantou_zhong,0,0); //箭头中(指向该行)
    disphz (shi,0,1);  //菜单标题         //时间日期
 disphz (jian,0,2);  //菜单标题
 disphz (ri,0,3);  //菜单标题
 disphz (qi,0,4);
     //第一行
////////////////////////////
 disphz (zhu,1,1);  //第二行
 disphz (cai,1,2);
 disphz (dan,1,3);
 dispzf (num2,1,10);
 while(1)
  {
   if (key_scan_once()==11) menu1();   //"#"
   if (key_scan_once()==10)
     {
     wrlattice (0x00,0x00);
     start();    //"*"
    }
   if (key_scan_once()==7)  zhu_menu2(); //上
   if (key_scan_once()==9)  zhu_menu2(); //下
  }
}
////////////////////////////////////////////////
/*********************************************************
 函 数 名:zhu_menu2()
 功    能:显示1级菜单的第二行
 说    明:
 调    用:disphz (uchar code *chn,uchar page,uchar line),
    dispzf (uchar code *eng,uchar page,uchar line);
    dispjt (uchar code *jiantou,uchar page);
 入口参数:无       
 返 回 值:无
 设    计: 汪建斌                    日    期:2005-09-11  
**********************************************************/
void zhu_menu2()
{
 wrlattice (0x00,0x00);          //清屏    
 dispjt (jiantou_shang,0);    //箭头上
// dispjt (jiantou_xia,1);  //箭头下
// disphz (jiantou_zhong,0,0); //箭头中(指向该行)
    disphz (shi,0,1);  //菜单标题         //时间日期
 disphz (jian,0,2);  //菜单标题
 disphz (ri,0,3);  //菜单标题
 disphz (qi,0,4);
     //第一行
////////////////////////////
 disphz (jiantou_zhong,1,0);
 disphz (zhu,1,1);  //第二行
 disphz (cai,1,2);
 disphz (dan,1,3);
 dispzf (num2,1,10);
 while(1)
  {
   if (key_scan_once()==11) menu3();   //"#"
   if (key_scan_once()==10)
    {
     wrlattice (0x00,0x00);
      start();    //"*"
    }
   if (key_scan_once()==7)  zhu_menu1(); //上
   if (key_scan_once()==9)  zhu_menu1(); //下
  }
}
/////////////////////////////////////////
/*********************************************************
 函 数 名:menu1()
 功    能:显示2级菜单的第一行
 说    明:
 调    用:disphz (uchar code *chn,uchar page,uchar line),
    dispzf (uchar code *eng,uchar page,uchar line);
    dispjt (uchar code *jiantou,uchar page);
 入口参数:无       
 返 回 值:无
 设    计: 汪建斌                    日    期:2005-09-11  
**********************************************************/
void menu1()          //设置时间
{
 wrlattice (0x00,0x00);
// dispjt (jiantou_shang,0);
 dispjt (jiantou_xia,1);
 disphz (jiantou_zhong,0,0);
 disphz (she,0,1);
 disphz (zi,0,2);
 disphz (shi,0,3);
 disphz (jian,0,4);
//////////////////////
// disphz (jiantou_zhong,1,0);
 disphz (she,1,1);
 disphz (zi ,1,2);
 disphz (nao ,1,3);
 disphz (zhong ,1,4);
 while(1)
  {
   if (key_scan_once()==11) 
    {
     settime_year();
     //Set1302(time_set);
    }
   if (key_scan_once()==10) zhu_menu1();
   if (key_scan_once()==7)  menu2();
   if (key_scan_once()==9)  menu2();
  }
}
///////////////////////////////////////////////
/*********************************************************
 函 数 名:menu2()
 功    能:显示2级菜单的第二行
 说    明:
 调    用:disphz (uchar code *chn,uchar page,uchar line),
    dispzf (uchar code *eng,uchar page,uchar line);
    dispjt (uchar code *jiantou,uchar page);
 入口参数:无       
 返 回 值:无
 设    计: 汪建斌                    日    期:2005-09-11  
**********************************************************/
void menu2()      //设置闹钟
{
 wrlattice (0x00,0x00);
 dispjt (jiantou_shang,0);
// dispjt (jiantou_xia,1);
// disphz (jiantou_zhong,0,0);
 disphz (she,0,1);
 disphz (zi,0,2);
 disphz (shi,0,3);
 disphz (jian,0,4);
//////////////////////
 disphz (jiantou_zhong,1,0);
 disphz (she,1,1);
 disphz (zi ,1,2);
 disphz (nao,1,3);
 disphz (zhong,1,4);
 while(1)
  {
   if (key_scan_once()==11) menu2_1();
   if (key_scan_once()==10) zhu_menu1();
   if (key_scan_once()==7)  menu1();
   if (key_scan_once()==9)  menu1();
  }
}
/*********************************************************
 函 数 名:menu3()
 功    能:显示2级菜单的第三行
 说    明:
 调    用:disphz (uchar code *chn,uchar page,uchar line),
    dispzf (uchar code *eng,uchar page,uchar line);
    dispjt (uchar code *jiantou,uchar page);
 入口参数:无       
 返 回 值:无
 设    计: 汪建斌                    日    期:2005-09-11  
**********************************************************/
void menu3()
{
 wrlattice (0x00,0x00);
// dispjt (jiantou_shang,0);
 dispjt (jiantou_xia,1);
 disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num3,0,8);
//////////////////////
// disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num4,1,8);
 while(1)
  {
   if (key_scan_once()==11) menu3_1();
   if (key_scan_once()==10) zhu_menu2();
   if (key_scan_once()==7)  menu4();
   if (key_scan_once()==9)  menu4();
  } 
}
/*********************************************************
 函 数 名:menu4()
 功    能:显示2级菜单的第四行
 说    明:
 调    用:disphz (uchar code *chn,uchar page,uchar line),
    dispzf (uchar code *eng,uchar page,uchar line);
    dispjt (uchar code *jiantou,uchar page);
 入口参数:无       
 返 回 值:无
 设    计: 汪建斌                    日    期:2005-09-11  
**********************************************************/
void menu4()
{
 wrlattice (0x00,0x00);
 dispjt (jiantou_shang,0);
// dispjt (jiantou_xia,1);
// disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num3,0,8);
//////////////////////
 disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num4,1,8);
 while(1)
  {
   if (key_scan_once()==11) menu4_1();
   if (key_scan_once()==10) zhu_menu2();
   if (key_scan_once()==7)  menu3();
   if (key_scan_once()==9)  menu3();
  }
}
////////////////////////////////////////////////

void menu1_1()
{
 wrlattice (0x00,0x00);
// dispjt (jiantou_shang,0);
 dispjt (jiantou_xia,1);
 disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num1,0,8);
 dispzf (num1,0,9);
//////////////////////
// disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num1,1,8);
 dispzf (num2,1,9);
 while(1)
  {
   if (key_scan_once()==11) P1=11;
   if (key_scan_once()==10) menu1();
   if (key_scan_once()==7)  menu1_2();
   if (key_scan_once()==9)  menu1_2();
  }
}
///////////////////////////////////////
void menu1_2()
{
 wrlattice (0x00,0x00);
 dispjt (jiantou_shang,0);
// dispjt (jiantou_xia,1);
// disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num1,0,8);
 dispzf (num1,0,9);
//////////////////////
 disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num1,1,8);
 dispzf (num2,1,9);
 while(1)
  {
   if (key_scan_once()==11) P1=12;
   if (key_scan_once()==10) menu1();
   if (key_scan_once()==7)  menu1_1();
   if (key_scan_once()==9)  menu1_1();
  }
}
/////////////////////////////////////////////////
void menu2_1()
{
 wrlattice (0x00,0x00);
// dispjt (jiantou_shang,0);
 dispjt (jiantou_xia,1);
 disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num2,0,8);
 dispzf (num1,0,9);
//////////////////////
// disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num2,1,8);
 dispzf (num2,1,9);
 while(1)
  {
   if (key_scan_once()==11) P1=21;
   if (key_scan_once()==10) menu2();
   if (key_scan_once()==7)  menu2_2();
   if (key_scan_once()==9)  menu2_2();
  }
}
void menu2_2()
{
 wrlattice (0x00,0x00);
 dispjt (jiantou_shang,0);
// dispjt (jiantou_xia,1);
// disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num2,0,8);
 dispzf (num1,0,9);
//////////////////////
 disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num2,1,8);
 dispzf (num2,1,9);
 while(1)
  {
   if (key_scan_once()==11) P1=22;
   if (key_scan_once()==10) menu2();
   if (key_scan_once()==7)  menu2_1();
   if (key_scan_once()==9)  menu2_1();
  }
}
void menu3_1()
{
 wrlattice (0x00,0x00);
// dispjt (jiantou_shang,0);
 dispjt (jiantou_xia,1);
 disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num3,0,8);
 dispzf (num1,0,9);
//////////////////////
// disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num3,1,8);
 dispzf (num2,1,9);
 while(1)
  {
   if (key_scan_once()==11) P1=31;
   if (key_scan_once()==10) menu3();
   if (key_scan_once()==7)  menu3_2();
   if (key_scan_once()==9)  menu3_2();
  }
}
void menu3_2()
{
 wrlattice (0x00,0x00);
 dispjt (jiantou_shang,0);
// dispjt (jiantou_xia,1);
// disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num3,0,8);
 dispzf (num1,0,9);
//////////////////////
 disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num3,1,8);
 dispzf (num2,1,9);
 while(1)
  {
   if (key_scan_once()==11) P1=32;
   if (key_scan_once()==10) menu3();
   if (key_scan_once()==7)  menu3_1();
   if (key_scan_once()==9)  menu3_1();
  }
}
void menu4_1()
{
 wrlattice (0x00,0x00);
// dispjt (jiantou_shang,0);
 dispjt (jiantou_xia,1);
 disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num4,0,8);
 dispzf (num1,0,9);
//////////////////////
// disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num4,1,8);
 dispzf (num2,1,9);
 while(1)
  {
   if (key_scan_once()==11) P1=41;
   if (key_scan_once()==10) menu4();
   if (key_scan_once()==7)  menu4_2();
   if (key_scan_once()==9)  menu4_2();
  }
}
void menu4_2()
{
 wrlattice (0x00,0x00);
 dispjt (jiantou_shang,0);
// dispjt (jiantou_xia,1);
// disphz (jiantou_zhong,0,0);
 disphz (cai,0,1);
 disphz (dan,0,2);
 dispzf (num4,0,8);
 dispzf (num1,0,9);
//////////////////////
 disphz (jiantou_zhong,1,0);
 disphz (cai,1,1);
 disphz (dan,1,2);
 dispzf (num4,1,8);
 dispzf (num2,1,9);
 while(1)
  {
   if (key_scan_once==11) P1=42;
   if (key_scan_once()==10) menu4();
   if (key_scan_once()==7)  menu4_1();
   if (key_scan_once()==9)  menu4_1();
  }
}
/////////////////////////////////////////////////

void zhujiemian()
{
  disptime();
  ///////////////////////////////
//  disphz (cai,0,1);
//  disphz (dan,0,2);
 // disphz (yan,0,3);
//  disphz (si ,0,4);

}


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:sy-5100学习板惊爆价580元

[下一篇主题]:SST29EE020求助!!!!!!