一、实验要求
用2位数码管显示计时时间,最小计时单位为“百毫秒”,计时范围0.1~9.9s。当第1次按一下计时功能键时,秒表开始计时并显示;第2次按一下计时功能键时,停止计时,将计时的时间值送到数码管显示;如果计时到9.9s,将重新开始从0计时;第3次按一下计时功能键,秒表清0。再次按一下计时功能键,则重复上述计时过程。
本秒表应用定时器模式,计时范围0.1~9.9s。此外还涉及如何编写控制LED数码管显示的程序。
二、设计硬件电路原理图,画出实际接线图。
三、根据实验任务设计出相应的程序。
#include <reg51.h>
#define uchar unsigned char
sbit Key=P3^6;
char i=10;
Key_Num=0;
second=0;
Count_Enable=0;
uchar code dis[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86, 0x8e};
unsigned int time;
void delay(unsigned int time)
{unsigned int i;for(i=0; i<time; i++){}
}void main()
{TMOD=0x01;TH0=0xd8;TL0=0xf0;P1=0xff;P3=0xff;EA=1; ET0=1;TR0=1;Count_Enable=1;while(1){if(!Key){delay(10);if(!Key){while(!Key) Key_Num++;switch(Key_Num){case 1://TR0=1;Count_Enable=1;break;case 2://TR0=0;Count_Enable=0;break;case 3://TR0=0;Count_Enable=0;second=0;Key_Num=0;break;}}}P2=0x01;P0=dis[second%10];delay(1);P0=0xff;P2=0x02;P0=dis[second/10]&0x7f;delay(1);P0=0xff;}
}void timer0() interrupt 1
{/*static display_SW=1;TH0=0xD8;TL0=0xF0;if(display_SW)//个位{display_SW=0;P2=0x01;P0=dis[second%10];delay(1);//P0=0xff;}else//十位{display_SW=1;P2=0x02;P0=dis[second/10]&0x7f;delay(1);//P0=0xff;}*/TH0=0xD8;TL0=0xF0;if(Count_Enable){i--;if(i<=0){i=10;second++;if(second>99){second=0;}}}
}