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

📄 2402test.txt

📁 时钟是用微控制器
💻 TXT
📖 第 1 页 / 共 3 页
字号:
  {
   BEEPing();
  }
  else
  {
   beep_y();
  }
 }
 if(AT24C02_Read1Byte(0x04+(rom*10))==0&&alarm_bit==2||alarm_bit==3)
 {
  //**这里将写入一个或是调用无线遥控键值处理程序**
 }
}
/********************************************************************************************
定时值校对&处理函数
search_time()
********************整个流程必须在1秒里完成,不然将有部分定时值不响应***********************/
void search_time(void)
{
 uint8 timeS,s,i;
 static unsigned char data alarmS[25];
 alarm_con=0;
 s=read_clock(0x81);                               //读取秒数据
 for(i=0;i<25;i++)
 {
  alarmS[i]=AT24C02_Read1Byte(0x0B+i*10);          //一次性将全部项目中的秒数据送入数组中
 }
 for(i=0;i<25;i++)
 {
  if(alarmS[i]!=0xff)                              //不为0xff则表示这项已经设置
  {
   alarm_con++;                                    //定时项目个数寄存位
   if(s==alarmS[i])
   {
    timeS=AT24C02_Read1Byte(0x0a+(i*10));
    if(timeS==read_clock(0x83)||timeS==0xff)       //校验 分钟
    {
     timeS=AT24C02_Read1Byte(0x09+(i*10));
     if(timeS==read_clock(0x85)||timeS==0xff)      //校验 小时
     {
      timeS=AT24C02_Read1Byte(0x08+(i*10));
      if(timeS==read_clock(0x8b)||timeS==0xff)     //校验 星期
      {
       timeS=AT24C02_Read1Byte(0x07+(i*10));
       if(timeS==read_clock(0x87)||timeS==0xff)    //校验 日
       {
        timeS=AT24C02_Read1Byte(0x06+(i*10));
        if(timeS==read_clock(0x89)||timeS==0xff)   //校验 月
        {
         timeS=AT24C02_Read1Byte(0x05+(i*10));
         if(timeS==read_clock(0x8d)||timeS==0xff)  //校验 年
         {
          rom=i;                                   //走到响应的位置
          ALARMing();                              //** 闹钟和无线遥控的键值处理 **
                                                   //**这里将调用一个到时的响应程序alarming();
         }
        }
       }
      }
     }
    }
   }
  }
 }
}
//*******************系统主程序 菜单切换*****************************************************
void main (void)
{
 beep_a();
 keyboard_int ();
 LCM2402_Init();                    //LCM2402初始化
 Init_1302();                       //检测时钟芯片是否未被初始化
 CgramWrite();
 print(0x80,"LCD2402 eClock Ver0.01");
 print(0xc2,"MSN: 5isun@live.cn");
 DelayS(5000);
 LCM2402_Init();                    //LCM2402初始化
 beep_y();
 while(1)                           //主线程
 {
//--------------------------------------------0 主显示
  if(menu==0)
  {
   LCM2402_Init();
   RealTime_Display();              //在第一行显示时间部分
   print(0xc7,"!AL");
   print2(0xca,AT24C02_Read1Byte(0x03)+0x30);
   print(0xcc,"Used:");
   print2(0xd0,alarm_con/16+0x30);
   print2(0xd1,alarm_con%16+0x30);
   print(0xd2,"/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)
    {
     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;
     }                              //定时动作选择:0 全关 1 只开闹钟 2 只开控制动作 3 全开
     default:DT=0xff;
             break;
    }
    LCM2402_Init();                 //LCM2402初始化
    DT=0xff;
   }
  }
//--------------------------------------------1 是否调时?
  if(menu==1)
  {
   LCM2402_Init();
   print(0x80,"Set The Real Time ?");
   print(0xc5,"PP: OK   AV: Esc");
   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)
  {
   LCM2402_Init();
   alarm_Display(); 		   //在第一行显示定时部分
   print(0xc3,"] NO.");
   print2(0xc8,0x30+rom/10);
   print2(0xc9,0x30+rom%10);
   print(0xce,"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,"AV: Exit Help");
            print(0xc0,"MUTE: Next Help Page");
            break;
    case 1: print(0x80,"SLEEP: Set The Real Time");
            print(0xc0,"00~99: Controller NO.");
            break;
    case 2: print(0x80,"POWER: Key ON/OFF");
            print(0xc0,"RECALL: Alarm ON/OFF");
            break;
    case 3: print(0x80,"VOL+/-: Up/Down");
            print(0xc0,"PR.+/-: Alarm +/-1");
            break;
    case 4: print(0x80,"F.T.+/-: Alarm +/-5");
            print(0xc0,"STORE: Set Alarm");
            break;
    case 5: print(0x80,"-/--: Jumping");
            print(0xc0,"SEARCH: Set to ??");
            break;
    case 6: print(0x80,"!AL0: Beep & Alarm Off");
            print(0xc0,"!AL1: Only Beep On");
            break;
    case 7: print(0x80,"!AL2: Only Alarm On");
            print(0xc0,"!AL3: Beep & Alarm On");
            break;
    case 8: print(0x80,"PP: OK!");
            print(0xc0,"AV: Exit/Clean!");
            break;
    case 9: print(0x81,"MSN: 5isun@live.cn | Sun-2402C");
            print(0xc5,"V0.1 2008-4-8  ");
            break;
    default:break;
   }
  }
//--------------------------------------------11 调时输入
  if(menu == 11)
  {
   static unsigned char i=0;
   bit k;                           //定义静态
   RealTime_Display();              //在第一行显示时间部分
   for(i=1;i<8;)
   {                                //8个时钟数据的循环加位
    switch (i)
    {                               //显示设置项的说明
   LCM2402_Init();
     case 7:print(0xc0,"AV:Exit(Second 00-59)^^");
            break;
     case 6:print(0xc4,"(Minute 00-59)^^");
            break;
     case 5:print(0xc3,"(Hour 00-23)^^");
            break;
     case 4:print(0xcc,"^(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办数据键码时动作
     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(0xc7,"(Second 00-59)^^");
            break;
     case 6:print(0xc4,"(Minute 00-59)^^");
            break;
     case 5:print(0xc3,"(Hour 00-23)^^");
            break;
     case 4:print(0xcc,"^(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();
               i++;
               LADD();
               break;                   // -/-- VOL+ SEARCH 则跳到下一项
     case 0x1A:beep_y();
               i--;
               if(i<1)
               {
                i =8;
               };
               LADD();
               break;                   //VOL- 跳回上一项 //循环设备
     case 0x1D:beep_n();
               LADD();
               menu = 0;
               i = 19;
               break;                   //按 AV 键退回到主界面//i = 9;用于退出上一级的for循环
    }
   }
  }
  LED1=1;                               //关LED1
 }
}
/*******************************************************************************************
日志
2008-04-08 仿制 Doyoung.net
*******************************************************************************************/

⌨️ 快捷键说明

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