第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();
}
}