找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7421|回复: 0
收起左侧

定时器的问题

[复制链接]
ID:4834 发表于 2008-9-9 20:23 | 显示全部楼层 |阅读模式

要求定时器可以实现三个时间的显示,而且每个时间的初始值可以改变,完成硬件电路设计和软件程序设计,需要完成硬件仿真。(依据见习时间来决定,实物可以暂时不做)

设计指标参数:

(1)    定时时间1。1s-99s,可调。

(2)    定时时间2。1s-99s,可调。

(3)    定时时间3。1min-99min,可调。

(4)    所有时间数字均可调。

(5)    用数码管显示剩余时间。


#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个键如何去控制6歌数码管的加减!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表