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

📄 dianzibiao.txt

📁 这是用单片机做的电子表
💻 TXT
字号:
#include <absacc.h>
#include <reg51.h>
#define con_8279 XBYTE[0x5fff]
#define data_8279 XBYTE[0x5eff]
#define uchar unsigned char
code uchar table[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88};
sbit beer=p4^0;
sbit dot=P1^0;
static uchar dispbut[5];
uchar settime,timerint1,count1s,endset;
uchar second,minute,hour,setsecond,setminute;
uchar beep_dur,timechange,endchange;
void INTI_TMR1(void)
{ET1=1;
 EA=1;
}
void INTI_TMR1INT(void)
{ TMOD=0x11;
TH1=0x4c;
TL1=0;
TR1=1;
}
void init_variable(void)
{second=0;
minute=0;
hour=0;
settime=0;
setsecond=0xff;
setminute=0xff;
beer=1;
}
void timekeeping(void)
{if(++second>=60)
  {
   second=0;
    if(++minute>=60)
       {
        minute=0;
          if(++hour>=12)
             {
              hour=0
               }
       }
  }
}
void autobeer(void);
void TMR1_INT_SRV(void) interrupt 3 using 1
{
 timerint1=1;
 TH1=0x4c;
 if((setsecnd==second)&&(setmiute==minute))
 beer_dur=10;
 if(++count1s>=20)
 {
count1s=0;
dot=!dot;
timekeeping();
autobeer(); 
 }
}
void autobeer(void)
{
 if(keer_dur!=0)
 {
  beer_dur--;beep=0;
 }
 else beep=1;
}
uchar keysearch(void)
{
 byte k;
 p2=0xf0;
 k=p2;
 k=~k;
 k=k&0x70;
 return k;
}
 void scandisp(void)
{
 uchar posi=0xfe,1,j,temp;
 for(i=0;i<4;i++)
 {
  temp=dispbuf[i];
  temp=table[temp];
  for(j=0;j<200;j++)
 {
  p2=posi;p0=temp;
 }
  posi<<=1;posi|=0x01;
}
}
uchar key(void)
 {
  uchar ta,tc,kr4,keynumb;
  ta=keysearch();
  if(ta==0) return 0x8f;
  ta=keysearch();
  if(ta==0) return 0x8f;
  else
  {
   ta=0xfe;
   for(kr4=0;kr4<4;kr4++)
   {
    p2=ta;
    tc=p2;
    if((tc&0x10)==0) keynumb=kr4+0;
    if((tc&0x20)==0) keynumb=kr4+4;
    if((tc&0x40)==0) keynumb=kr4+8;
   
   }
  }
  do
   {
    ta=keysearch();
     scandisp();
   }while(ta!=0);
   return keynumb;
 }
 void digitin(uchar val)
{
  dispbut[3]=dispbut[2];
  dispbut[2]=dispbut[1];
  dispbut[1]=dispbut[0];
  dispbut[0]=val;
 } 
void clearall(void)
 {
  dispbut[3]=0;
  dispbut[2]=0;
  dispbut[1]=0;
  dispbut[0]=0;
 }
void updatetime(void)
 {
  dispbut[3]=minute/10;
  dispbut[2]=minute%10;
  dispbut[1]=minute/10;
  dispbut[0]=minute%10;
 }
void keybranch(byte k)
{
 switch(k)
 {
  case 0x00:settime=1;break;
  case 0x01:digitin(7);break;
  case 0x02:digitin(4);break;
  case 0x03:digitin(1);break;
  case 0x04:digitin(0);break;
  case 0x05:digitin(8);break;
  case 0x06:digitin(5);break; 
  case 0x07:digitin(2);break;
  case 0x08:
   if(settime==1)
    {
     settime=0;
     endset=1;
    }
   if(timechange==1)
   {
  timechange=0;
  endchange=1;
   }
 break;
  case 0x09:digitin(9);break;
  case 0x0a:digitin(6);break;
  case 0x0b:digitin(3);break;
  default:break;

 }
}
 void main(void)
 {
 uchar k;
 INTI_TMR1();
 INTI_TMR1INT();
 init_variable();
 while(1)
  {
   k=key()
   if(settime==1)
   {
    if(k==0x00)
    {
     timechange=1;
     settime=0;
   else
    {
     red=0;
     green=1;
     setsecond=0xff;
     setminute=0xff;
    }
    }
   if(timechange==1)
     {
      red=1;
     green=0;
     }
   if((settime==1)||(timechange==1)) 
         keybranch(k);
    else {updatetime();}
    if(endset==1)
    {
     endset=0;
     red=1;
     setsecond=dispbuf[1]*10+dispbuf[0];
     setminute=dispbuf[3]*10+dispbuf[2];
    }
   if(endchange==1)
     {
      beer_dur=10;
      green=1;
      endchange=0;
      second=dispbuf[1]*10+dispbuf[0];
      minute=dispbuf[3]*10+dispbuf[2];
     }
      if(k!=0x8f)
      {
       if(k==0x00)
         {
          settime=1;clearflag=1;clearall();
         }
      }
   do 
    {
     k=keysearch();
     scandisp();
    }while(k!=0);
   }
  }
 }


 

⌨️ 快捷键说明

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