找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7459|回復(fù): 0
收起左側(cè)

定時(shí)器的問(wèn)題

[復(fù)制鏈接]
ID:4834 發(fā)表于 2008-9-9 20:23 | 顯示全部樓層 |閱讀模式

要求定時(shí)器可以實(shí)現(xiàn)三個(gè)時(shí)間的顯示,而且每個(gè)時(shí)間的初始值可以改變,完成硬件電路設(shè)計(jì)和軟件程序設(shè)計(jì),需要完成硬件仿真。(依據(jù)見(jiàn)習(xí)時(shí)間來(lái)決定,實(shí)物可以暫時(shí)不做)

設(shè)計(jì)指標(biāo)參數(shù):

(1)    定時(shí)時(shí)間1。1s-99s,可調(diào)。

(2)    定時(shí)時(shí)間2。1s-99s,可調(diào)。

(3)    定時(shí)時(shí)間3。1min-99min,可調(diào)。

(4)    所有時(shí)間數(shù)字均可調(diào)。

(5)    用數(shù)碼管顯示剩余時(shí)間。


#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit p1=P2^3;
void keyscan(uchar z);
void delay(uchar k);
void display(uchar i);
void shezhi();
void playon();
uchar nummiaoge,nummiaoshi,numfenge,numfenshi,numshige,numshishi,tt,num;
uchar code table1[]={0x3f,
0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77};
ding1h=keyscan(0);
ding1l=keyscan(1);
ding2h=keyscan(2);
ding2l=keyscan(3);
ding3h=keyscan(4);
ding3l=keyscan(5);
ding4h=keyscan(6);
ding4l=keyscan(7);
ding5h=keyscan(8);
ding5l=keyscan(9);
ding6h=keyscan(10);
ding6l=keyscan(11);
play=keyscan(12);
zanting=keyscan(13);
close=keyscan(14);
res=keyscan(15);
nummiaoge=P2^0;
nummiaoshi=P2^1;
numfenge=P2^2;
numfenshi=P2^3;
numshige=P2^4;
numshishi=P2^5;
void main()
{
 tt=0;
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;
 while(1)
 {
  shezhi();
  playon();
 }
}
void keyscan(uchar z)
{
 uchar n;
 P1=0xfe;
 n=P1;
 n&=0xf0;
 if(n!=0xf0)
 {
  delay();
  P1=0xfe;
  n=P1;
  n&=0xf0;
  if(n!=0xf0)
   {
     switch(n)
    {
        case(0xe0):display(0);break;
        case(0xd0):display(1);break;
        case(0xb0):display(2);break;
        case(0x70):display(3);break;
        }
      }
 }
 P1=0xfd;
 n=P1;
 n&=0xf0;
 if(n!=0xf0)
 {
  delay();
  P1=0xfd;
  n=P1;
  n&=0xf0;
  if(n!=0xf0)
   {
      switch(n)
       {
        case(0xe0):display(4);break;
        case(0xd0):display(5);break;
        case(0xb0):display(6);break;
        case(0x70):display(7);break;
       }
      }
 }
 P1=0xfb;
 n=P1;
 n&=0xf0;
 if(n!=0xf0)
  {
   delay();
   P1=0xfb;
   n=P1;
   n&=0xf0;
   if(n!=0xf0)
    {
       switch(n)
        {
         case(0xe0):display(8);break;
         case(0xd0):display(9);break;
         case(0xb0):display(10);break;
         case(0x70):display(11);break;
        }
       }
  }
 P1=0xf7;
 n=P1;
 n&=0xf0;
 if(n!=0xf0)
  {
   delay();
   P1=0xf7;
   n=P1;
   n&=0xf0;
   if(n!=0xf0)
    {
       switch(n)
       {
         case(0xe0):display(12);break;
         case(0xd0):display(13);break;
         case(0xb0):display(14);break;
         case(0x70):display(15);break;
        }
       }
  }
}
void display(uchar i)
{
 uchar table2[]={
 0xC0,0xF9,0xA4,0xB0,
 0x99,0x92,0x82,0xF8,
 0x80,0x90,0x88,0x83,
 0xC6,0xA1,0x86,0x8E};
 P2=0xfe;
 P0=table;
}
void delay(uchar k)
{
 uint x,y;
 for(x=100;x>0;x--)
  for(y=k;y>0;y--);
}
void shezhi()
{
 if(ding1h==0)
  {
   nummiaoge++;
   if(nummiaoge==10)
   {
    nummaioge=0;
   }
  }
 if(ding1l==0)
  {
   nummiaoge--;
   if(nummiaoshi==-1)
   {
    nummaioshi=9;
   }   
  }
 if(ding2h==0)
  {
   nummiaoshi++;
   if(nummiaoshi==10)
   {
    nummiaoshi=0;
   }   
  }
 if(ding2l==0)
  {
   nummiaoshi--;
   if(nummiaoshi==-1)
   {
    nummiaoshi=9;
   }   
  }
 if(ding3h==0)
  {
   numfensge++;
   if(numfenge==10)
   {
    numfenge=0;
   }   
  }
 if(ding3l==0)
  {
   numfenge--;
   if(numfenge==-1)
   {
    numfenge=9;
   }
  }
 if(ding4h==0)
  {
   numfenshi++;
   if(numfenshi==10)
   {
    numfenshi=0;
   }   
  }
 if(ding4l==0)
  {
   numfenshi--;
   if(numfenshi==-1)
   {
    numfenshi=9;
   }   
  }
 if(ding5h==0)
  {
   numshige++;
   if(numshige==10)
   {
    numshige=0;
   }   
  }
 if(ding5l==0)
  {
   numshige--;
   if(numshige=-1)
   {
    numshige=9;
   }   
  }
 if(ding6h==0)
  {
   numshishi++;
   if(numshishi==10)
   {
    numshishi=0;
   }   
  }
 if(ding6l==0)
  {
   numshishi--;
   if(numshishi==-1)
   {
    numshishi=9;
   }   
  }
}
void playon()
{
 while(1)
 {
  nummiaoge--;
  if(nummiaoge==0)
   {
    nummiaoshi=nummiaoshi-1;
    nummiaoge=9;
    if(nummiaoshi==0)
    {
     numfenge=numfenge-1;
     nummiaoshi=9;
     if(numfenge==0)
     {
      numfenshi=numfenshi-1;
      numfenge=9;
      if(numfenshi==0)
      {
       numshige=numshige-1;
       numfenshi=9;
       if(numshige=0)
       {
        numshishi=numshishi-1;
        numshige=9;
       }
      }
     }
    }
   }
  if(numshishi,numshige,numfenshi,numfenge,nummiaoshi,nummiaoge==0)
  {
   p1=1;
  }
 }
}
void exter0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 tt++;
}


我有些東西還是不大懂,我不知道怎么樣去把鍵盤的16個(gè)鍵如何去控制6歌數(shù)碼管的加減!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表