P3接字码,P2接位码。没有加按键功能。
#include
#define uchar unsigned char
#define uint unsigned int
//数码管字型表,对应0,1,2,3,4,5,6,7,8,9//
uchar Table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint Data[2]={0,0};
data Buffer[1]={0};
uint TIME=0; //倒计时时间
uint j;
sbit BEEP=P1^2;
sbit Point=P3^7;
void DelayMs(uint i )
{
for(;i!=0;i--)
{for(j=100;j!=0;j--) {;}}
}
void Display(uint *p) //动态显示函数,参数p为待显示的数组名
{
P2=0xfe;
P3=Table[p[2]]; //送字型码
DelayMs(3);
P2=0xfb;
P3=Table[p[1]]; //送字型码
Point=0;
DelayMs(3); //显示延时
P2=0xfd;
P3=Table[p[0]];
DelayMs(3);
}
void Process(uint i,uint *p)
{
p[0]=i/100;
i=i%100;
p[1]=i/10;
p[2]=i%10;
}
void main(void)
{
EA=1; IT1=1; ET0=1;
TMOD=0x01; //T0方式1计时0.01秒
TH0=65536-5000/256;
TL0=65536-5000%256;
TR0=1; //开中断,启动定时器
while(1)
{
Process(TIME,Data);
Display(Data);
if(TIME>599)
{
TIME=0;
}
}
}
/* 定时计数器0的中断服务子程序 */
void intserv1(void) interrupt 1 using 1
{
TH0=65536-5000/256;
TL0=65536-5000%256;
Buffer[0]=Buffer[0]+1; // 定时器T0的低四位赋值
if (Buffer[0]==10) // 百分秒进位
{
TIME+=1;
Buffer[0]=0;
}
}
dula=1;
P0=table[three];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
}
void delay(uint z) //延时子函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
是用74hc573锁存器连得的数码管,自己调整一下 如果要秒表显示点的话,重新定义个表,自己改改吧
汗 现在还有要这个程序的?
给个邮箱,我发给你
这么复杂的问题应该到论坛上去找,给你个AVR单片机网址http://www.ourdev.cn/,可以到百度去搜,现成的应该很少,资料应该挺多的吧