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

📄 key.c

📁 这是铁路各工区
💻 C
字号:
#include "fun.h"
#include "VAR.h"

void init_t1(void)
{num_t1=0;
 TMOD|=0X10;
 TH1=0X00;
 TL1=0X00;
 PT1=0;
 TR1=1;
 ET1=1;
 EA=1;
}

void interrupt_t1(void) interrupt 3  using 3
{TR1=0;
 TH1=0X00;
 TL1=0X00;
 TF1=0;
 num_t1++;
 TR1=1;
}

void init_t0(void)
{flag_frame=FALSE;
 frame.lf=0;
 TMOD|=0X01;
 TH0=0XFE;   //450US
 TL0=0XD0;
 TR0=1;
 TF0=0;
 //PT0=1;
 ET0=1;
 EA=1;
}

void interrupt_t0(void) interrupt 1  using 1
{static uchar i=0;
 TH0 =0XFC;
 TL0 =0XD0;
 TF0=0;
 frame.lf=frame.lf<<1|(ulong)D;
 if(++i>27)
 {TR0=0;
  ET0=0;
  i=0;
  flag_frame=TRUE;
 }
}

void keyin(void)
{if(flag_key)return;
 flag_key=TRUE;
 dispall();
 hp=0;lp=0;
 dispflicker(hp,lp);
 init_t1();
}

void keyout(void)
{if(!flag_key)return;
 keychange();
 dispstop(hp,lp);
 flag_key=FALSE;
 dispall();
 ET1=0;
 TR1=0;
 //EX0=1;
}

void keychange(void)
{if(flag_change)
 {if(hp==0)
  {bcd2_binary_time();
   binary_bcd1_time();
   wr_date();
  }
  else if(hp==1||hp==2)
  {bcd_binary();
   binary_24wcxx.year =binary_realtime.year;
   binary_24wcxx.month=binary_realtime.month;
   binary_24wcxx.day  =binary_realtime.day;
   if(binary_realtime.hour<18)yesterday(&binary_24wcxx);
   wr_24wcxx(addrtab[hp]);
  }
  else if(hp<29)
  {bcd_binary();
   wr_24wcxx(addrtab[hp]);
  }
  flag_change=FALSE;
 }
}

void keynum(uchar value)
{uchar *p;
 if(!flag_key)return;
 if(hp==0)
 {p=(uchar*)&bcd2_realtime;
  p+=lp;
  if(*p!=value)
  {*p=value;
   flag_change=TRUE;
   bcd2_binary_time();
   timejudge();
   binary_bcd2_time();
   disp2(0);
   dispstop(0,lp);
  }
  else dispone(hp,lp,value);
  if(++lp>=12)
  {if(flag_change)
   {binary_bcd1_time();
    wr_date();
   }
   flag_change=FALSE;
   hp++;
   lp=8;       //去除一个数码管
   rd_24wcxx(addrtab[hp]);
   binary_bcd();
  }
  dispflicker(hp,lp);
 }
 else if(hp==1||hp==2)
 {p=(uchar *)&bcd_24wcxx;
  p+=(lp-1);
  if(*p!=value)
  {*p=value;
   flag_change=TRUE;
  }
  dispone(hp,lp,value);
  if(++lp>=12)
  {if(flag_change)
   {bcd_binary();
    binary_24wcxx.year =binary_realtime.year;
    binary_24wcxx.month=binary_realtime.month;
    binary_24wcxx.day  =binary_realtime.day;
    if(binary_realtime.hour<18)yesterday(&binary_24wcxx);
    wr_24wcxx(addrtab[hp]);
   }
   flag_change=FALSE;
   if(++hp>2)lp=1;
   else lp=7;
   rd_24wcxx(addrtab[hp]);
   binary_bcd();
  }
  dispflicker(hp,lp);
 }
 else if(hp<29)
 {p=(uchar *)&bcd_24wcxx;
  p+=(lp-1);
  if(*p!=value)
  {*p=value;
   flag_change=TRUE;
   bcd_binary();
   datejudge();
   binary_bcd();
  }
  disp2(hp);
  dispstop(hp,lp);
  if(++lp>=12)
  {if(flag_change)
   {bcd_binary();
    wr_24wcxx(addrtab[hp]);
   }
   flag_change=FALSE;
   if(++hp>=29){hp=28;lp=11;}
   else lp=1;
   rd_24wcxx(addrtab[hp]);
   binary_bcd();
  }
  dispflicker(hp,lp);
 }
}

void keydirection(uchar value)
{if(!flag_key)return;
 switch(value)
 {case UP   :keychange();
             dispstop(hp,lp);
             if(hp==0){hp=28;lp=1;}
             else if(hp==1){hp=0;lp=0;}
             else if(hp==2){hp=1;lp=8;}
             else if(hp==3){hp=2;lp=7;}
             else hp--;
             dispflicker(hp,lp);
             if(hp)
             {rd_24wcxx(addrtab[hp]);
              binary_bcd();
             }
             else
             {rd_date();
              bcd1_binary_time();
              binary_bcd2_time();
             }
             break;
  case DOWN :keychange();
             dispstop(hp,lp);
             if(hp==0){hp=1;lp=8;}
             else if(hp==1){hp=2;lp=7;}
             else if(hp==2){hp=3;lp=1;}
             else if(hp==28){hp=0;lp=0;}
             else hp++;
             dispflicker(hp,lp);
             if(hp)
             {rd_24wcxx(addrtab[hp]);
              binary_bcd();
             }
             else
             {rd_date();
              bcd1_binary_time();
              binary_bcd2_time();
             }
             break;
  case RIGHT:dispstop(hp,lp);
             if(++lp>=12)
             {keychange();
              hp++;
              if(hp==1)lp=8;
              else if(hp==2)lp=7;
              else if(hp>=29){hp=0;lp=0;}
              else lp=1;
              if(hp)
              {rd_24wcxx(addrtab[hp]);
               binary_bcd();
              }
              else
              {rd_date();
               bcd1_binary_time();
               binary_bcd2_time();
              }
             }
             dispflicker(hp,lp);
             break;
  case LEFT :dispstop(hp,lp);
             if((hp==0&&lp==0)||(hp==1&&lp==8)||(hp==2&&lp==7)||(hp>2&&lp==1))
             {keychange();
              if(hp==0&&lp==0){hp=28;lp=11;}
              else if(hp==1&&lp==8){hp=0;lp=11;}
              else if(hp==2&&lp==7){hp=1;lp=11;}
              else if(hp<29&&lp==1){hp--;lp=11;}
              if(hp)
              {rd_24wcxx(addrtab[hp]);
               binary_bcd();
              }
              else
              {rd_date();
               bcd1_binary_time();
               binary_bcd2_time();
              }
             }
             else lp--;
             dispflicker(hp,lp);
             break;
  default:break;
 }
}

void key(void)
{
 if((frame.sf.f1!=last_id)&&(frame.sf.f1==KEY_ID1||frame.sf.f1==KEY_ID2))
 {last_id=frame.sf.f1;
  num_t1=0;
 }
 else return;
 switch(frame.sf.f2)
 {case KEY_1:keynum(1);
             break;
  case KEY_2:keynum(2);
             break;
  case KEY_3:keynum(3);
             break;
  case KEY_4:keynum(4);
             break;
  case KEY_5:keynum(5);
             break;
  case KEY_6:keynum(6);
             break;
  case KEY_7:keynum(7);
             break;
  case KEY_8:keynum(8);
             break;
  case KEY_9:keynum(9);
             break;
  case KEY_0:keynum(0);
             break;
  //case KEY_POINT:break(11);
  //case KEY_SPACE:break(12);
  case KEY_UP  :keydirection(UP);
                break;
  case KEY_DOWN:keydirection(DOWN);
                break;
  case KEY_B1  :keydirection(LEFT);
                break;
  case KEY_B2  :keydirection(RIGHT);
                break;
  case KEY_ADJUST:keyin();
                  break;
  case KEY_FUNCTION:keyout();
                    break;
  default:break;
 }
}



⌨️ 快捷键说明

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