用单片机设计的专用定时器

2、设计一个单片机控制的专用定时器。

可以实现三个时间的显示,每个时间的初值都可以改变。

参数:

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

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

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

(4) 所在时间数字均可调

(5) 用LED显示剩余时间。
单片机采用at89c51,led显示采用7段数码显示管,共阳极方式。

第1个回答  2008-06-02
硬件的话接个键盘和显示电路就好了,软件比较麻烦一点。给这三个定时时间相应的存储地址,每次按键是修改相应储存的参数,按一次加一次
第2个回答  2008-06-06
有偿代做,给你发站内消息了,请查收
第3个回答  2008-06-11
编了一个定时时间为1s~99s可调的:

/*********************************************************************

模块名 : 定时计数程序
创建人 : Milo
日期 : 2008/06/11
功能描述: 利用AT89C51进行1S~99S计数显示,计数值可调
其它说明: 编译环境为Keil uVision2

*********************************************************************/
#include <reg51.h>
unsigned char num=99;
unsigned char dis[2];
unsigned int dtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90};
void display(unsigned int nu)
{
dis[0]=nu%10;dis[1]=nu/10;
P1=dtab[dis[0]];P2=dtab[dis[1]]; /*P1口低位,P2口高位*/
}
void init_device(void)
{
while(P3^3==0);
while(1)
{
display(num);
if(num==99)
{if(P3^0==0) num=0;} /*P3.0计数值加1*/
else if(P3^0==0) num+=1;
if(num==0)
{if(P3^1==0) num=99;}
else if(P3^1==0) num-=1; /*P3.1计数值减1*/
if(P3^2==0) break; /*调定时值,P3.2键为设置成功*/
}
}
void delay1s(void)
{
int h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;h--)
for(j=116;j>0;h--)
for(k=214;k>0;h--);
}
void fac(void)
{
while(P3^2==0);
while(1)
{
delay1s();
num-=1;
display(num);
if(P3^3==0) init_devices(); /*重新进入值设定*/
if(num==0) break;
}
}
void main(void)
{
while(1)
{
init_device();
fac();
}
}