⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2402test.c

📁 时钟是用微控制器
💻 C
📖 第 1 页 / 共 4 页
字号:
 LCM2402_Init();    //LCM2402初始化
 Init_1302();       //检测时钟芯片是否未被初始化
 CgramWrite();
 print(0x81,"Sun-2402C eClock V0.01");
 print(0xc3,"MSN: 5isun@live.cn");
 DelayS(5000);
 LCM2402_Init();   //LCM2402初始化
 beep_y();
 while(1)          //主线程
 {
//------------------0 主显示-----------------------------------------------------------
  if(menu==0)
  {
   RealTime_Display();     //在第一行显示时间部分
   print(0xc7," !AL");
   print2(0xcb,AT24C02_Read1Byte(0x03)+0x30);
   print(0xcc," Used:");
   print2(0xd2,alarm_con/16+0x30);
   print2(0xd3,alarm_con%16+0x30);
   print(0xd4,"/25 ");
   printTemperature();     //显示温度
   search_time();          //定时值校对&处理函数
   if (DT!=0xff)
   {
    if(DT>=0x00&&DT<0x0a)
    {
     uint16 i;
     uint8 n=0,x=0xff,y=0xff;
     LCM2402_Init();      //LCM2402初始化
     for(i=0;i<500;i++)
     {
      print(0x83,"{ Controller NO. }");
      print(0xc3,"{------ ");
      print(0xcd," ------}");
      if(DT>=0x00&&DT<0x0a)
      {
       switch(n)
       {
        case 0: x=DT;
                n++;
                i=0;
                break;
        case 1: y=DT;
                n--;
                i=0;
                break;
       }
       print2(0xcb,x%16+0x30);
       print2(0xcc,y%16+0x30);
       beep_k();
       DelayS250();
       DT=0xff;
      }
      if(DT==0x4C)
      {
       print(0xca,"OK");
       //ALARMing(i);      //** 闹钟和无线遥控的键值处理 **
       DelayS250();
       beep_y();
       DT=0xff;
      }
     }
    }
    if(DT>0x12&&DT<0x17)  //当按定时加减查看的几个键时会进入定时查看菜单
    {
     beep_y();
     menu=2;
    }
    switch(DT)            //定时动作选择:0 全关 1 只开闹钟 2 只开控制动作 3 全开
    {
     uint8 alarm_bit;
     case 0x1c: beep_y();
                menu=1;
                break;
     case 0x2F: beep_y();
                menu=99;
                break;
     case 0x19: {
                 alarm_bit++;
                 if(alarm_bit>3)
                 {
                  alarm_bit=0;
                 };
                 AT24C02_Write1Byte(0x03,alarm_bit);
                 DelayS(500);
                 beep_y();
                 break;
                }
     default:DT=0xff;
             break;
    }
    LCM2402_Init();     //LCM2402初始化
    DT=0xff;
   }
  }
//------------------1 是否调时?-----------------------------------------------------------
  if(menu==1)
  {
   print(0x82,"Set The Real Time");
   print(0xc2,"PP: Set  AV: Exit");
   if(DT!=0xff)
   {
    switch(DT)
    {
     case 0x1D: beep_n();
                menu = 0;
                break;
     case 0x1B: beep_y();
                menu=11;
                break;
     default:DT=0xff;
             break;
    }
    LCM2402_Init();             //LCM2402初始化
    DT=0xff;
   }
  }
//------------------2 定时查看-----------------------------------------------------------
  if(menu == 2)
  {
   alarm_Display(); 			//在第一行显示定时部分
   print(0xc3,"Alarm NO.");
   print2(0xcc,0x30+rom/10);
   print2(0xcd,0x30+rom%10);
   print(0xcf,"STORE:Set");
   if(DT!=0xff)
   {
    switch(DT)
    {
     case 0x18: beep_y();
                menu=12;
                break;
     case 0x13: beep_k();
                rom++;
                break;
     case 0x14: beep_k();
                rom--;
                break;
     case 0x15: beep_k();
                rom=rom+5;
                break;
     case 0x16: beep_k();
                rom=rom-5;
                break;
     case 0x1D: beep_n();
                menu=0;
                break;
     default:DT=0xff;
             break;
    }
    if(rom>24&&rom<100)
    {
     rom=0;
    }
    if(rom>200)
    {
     rom=24;
    }
    LCM2402_Init();                //LCM2402初始化
    DT=0xff;
   }
  }
//------------------99 帮助菜单-----------------------------------------------------------
  if(menu==99)
  {
   uint8 i;
   if (DT!=0xff)
   {
    if(DT==0x2F)
    {
     i++;
     if(i>9)
     {
      i=0;
     }
     DelayS(500);
     beep_k();
    }
    if(DT==0x1D)
    {
     i=0;
     beep_n();
     menu=0;
    }
    LCM2402_Init();           //LCM2402初始化
    DT=0xff;
   }
   switch(i)
   {
    case 0: print(0x80,"MUTE: Help & Next Page");
            print(0xc0," AV : Exit Help");
            break;
    case 1: print(0x80,"SLEEP: Set The Real Time");
            print(0xc0,"  PP : Set Time");
            break;
    case 2: print(0x80,"F.T.+/-: Set The Alarm");
            print(0xc0," STORE : Set Alarm");
            break;
    case 3: print(0x80," PR.+/-: Alarm No. +/-1");
            print(0xc0,"F.T.+/-: Alarm No. +/-5");
            break;
    case 4: print(0x80,"VOL+/-: Right/Left Move");
            print(0xc0," -/-- : Right Jumping");
            break;
    case 5: print(0x80,"SEARCH: Alarm Set to ??");
            print(0xc0," 00~99: Controller NO.");
            break;
    case 6: print(0x80,"  AV  : Exit & Confirm");
            print(0xc0,"RECALL: !AL0 ~ !AL3");
            break;
    case 7: print(0x80,"!AL0: Beep & Alarm OFF");
            print(0xc0,"!AL1: Only Beep ON");
            break;
    case 8: print(0x80,"!AL2: Only Alarm ON");
            print(0xc0,"!AL3: Beep & Alarm ON");
            break;
    case 9: print(0x81,"Sun-2402C eClock V0.01");
            print(0xc0,"5isun@live.cn 2008-06-08");
            break;
    default:break;
   }
  }
//------------------11 调时输入-----------------------------------------------------------
  if(menu==11)
  {
   static unsigned char i=0;
   bit k;                   //定义静态
   RealTime_Display();      //在第一行显示时间部分
   for(i=1;i<8;)            //8个时钟数据的循环加位
   {
    switch(i)               //显示设置项的说明
    {
     case 7:print(0xc0,"AV:Exit Second 00~59 ^^");
            break;
     case 6:print(0xc5,"Minute 00~59 ^^");
            break;
     case 5:print(0xc4,"Hour 00~23 ^^");
            break;
     case 4:print(0xc3,"AV:Exit  ^ Week 1~7");
            break;
     case 3:print(0xc8,"^^ Date 01~31");
            break;
     case 2:print(0xc5,"^^ Month 01~12");
            break;
     case 1:print(0xc2,"^^ Year 00~99  AV:Exit");
            break;
    }
    print(0x80,"20");
    if(DT>=0x00&&DT<0x0a)	//DT办数据键码时动作
    {
     if(i==4)                 //如果是星期设置则不必输入“十位”数据
     {
      k=1;
     }
     Set_time(i,k);             //在这里调用写时间的程序项
     if(k==0)                   //第一次按键输入到“十位”
     {
      k=1;
     }
     else                       //否则是第二次按键,输入到“个位”
     {
      k=0;
      i++;
     }
     LRDD();                   //清屏+刷新显示+延时+清空DT 一体函数
     beep_k();
    }
    if(DT==0x11||DT==0x17)
    {
     i++;
     LRDD();
     beep_y();
    }
    if(DT==0x1A)
    {
     i--;
	 if(i<1)
	 {
	  i=7;
	 };
     LRDD();
     beep_y();
    }
    if(DT==0x1D)	  //按 AV 键退回到主界面
    {
     LRDD();
     beep_n();
     menu=0;
     i=9;               //用于退出上一级的for循环
    }
   }
  }
//------------------12 定时值输入-----------------------------------------------------------
  if(menu==12)
  {
   static unsigned char i=0;
   bit k;                        //定义静态
   alarm_Display();              //在第一行显示时间部分
   for(i=1;i<9;)                 //8个时钟数据的循环加位
   {
    switch (i)                   //显示设置项的说明
    {
     case 8:print(0xc3,"<< Controller 00~99");
            break;
     case 7:print(0xc8,"Second 00~59 ^^");
            break;
     case 6:print(0xc5,"Minute 00~59 ^^");
            break;
     case 5:print(0xc4,"Hour 00~23 ^^");
            break;
     case 4:print(0xc4,"AV:Exit ^ Week 1~7");
            break;
     case 3:print(0xc8,"^^ Date 01~31");
            break;
     case 2:print(0xc5,"^^ Month 01~12");
            break;
     case 1:print(0xc2,"^^ Year 00~99 AV:Exit");
            break;
    }
    print(0x97,"!");
    if(DT>=0x00&&DT<0x0a||DT==0x12)  //DT办数据键码时动作
    {
     if(i==4||DT==0x12)    //如果是星期设置则不必输入“十位”数据
     {
      k=1;
     }
     Set_alarm(rom,i,k);        //在这里调用写时间的程序项
     if(k==0)			//第一次按键输入到“十位”
     {
      k=1;
     }
     else			   //否则是第二次按键,输入到“个位”
     {
      k=0;
      i++;
     }
     LADD();               //清屏+刷新显示+延时+清空DT 一体函数
     beep_k();
    }
    switch (DT)		   //显示设置项的说明
    {
     case 0x11:	//i++;LADD();break;    // -/-- VOL+ SEARCH 则跳到下一项
     case 0x12:	//i++;LADD();break;    // -/-- VOL+ SEARCH 则跳到下一项
     case 0x17:	beep_y();      // -/-- VOL+ SEARCH 则跳到下一项
                i++;
                LADD();
                break;
     case 0x1A:	beep_y();     //VOL- 跳回上一项 循环设备
                i--;
                if(i<1)
                {
                 i=8;
                };
                LADD();
                break;
     case 0x1D:	beep_n();     //按 AV 键退回到主界面 i = 9;用于退出上一级的for循环
                LADD();
                menu=0;
                i=19;
                break;
    }
   }
  }
  LED1=1;                    //关LED1
 }
}
/********************************************************************************************    
日志
2007-5-8   这时已经基本完成了除24C02的IC驱动,完成主时间的显示和调整。
2007-5-10  加入菜单帮助项目
2007-5-11  加入了25路定时器设置(全部项目),红外遥控器上的所有按键定义完成。
2007-5-13  V1.0版本完成,整理并存档。
/********************************************************************************************/    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -