定时器/计数器设计实验

一、  实验内容

    采用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);

     }

}

}

posted @ 2015-12-22 13:28  hamburger  阅读(1501)  评论(0编辑  收藏  举报