一、 实验内容
采用12MHZ时钟频率的单片机,通过一个开关输入,触发定时计数。按下开关10次,计算按键的平均时间,并通过数码管显示出来。
二、 实验目的
了解定时器的各种工作方式
掌握定时器/计数器的使用和编程方法
三、 实验设备
DELL台式机 + proteus版本6 + keilC51版本7
四、 实验电路图(可打印)
五、 程序流程图
六、程序源码(可打印)
#include<reg51.h>
sbit P1_0=P1^0;
unsigned char numcode[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88};
unsigned char seqcode[4]={0x01,0x02,0x04,0x08};
unsigned int num=0;
void int1() interrupt 1
{
num++;
TL0=0xb0;
TH0=0x3c;
}
void DelayMS(unsigned int ms)
{
unsigned char i;
while(ms--) for(i=0;i<120;i++);
}
void main()
{
unsigned char i=0;
unsigned char dspcode[4];
unsigned long t;
P3=numcode[i];
ET0=1;
EA=1;
TH0=0x3c;
TL0=0xb0;
TMOD=0x01;
while(1)
{
if(P1_0==0)
{
TR0=1;
i++;
P3=numcode[i];
while(P1_0==0);
TR0=0;
if(i==10)
{
t=((TH0<<8)+TL0)/1000;
t=(t+50*num)/10;
dspcode[0]=numcode[(t/1000)%10]^0x80;
dspcode[1]=numcode[(t/100)%10];
dspcode[2]=numcode[(t/10)%10];
dspcode[3]=numcode[t%10];
break;
}
}
}
while(1)
{
for(i=0;i<4;i++)
{
P2=seqcode[i];
P0=dspcode[i];
DelayMS(5);
}
}
}