利用51单片机设计一个秒表 (一定要按要求做到0.01秒)
最低位,是0.01s 变化一次,一秒钟,变化 100 次。
这么快,人的眼睛,分辨不出来。
只能看到一个 8。
停止时,才能看到稳定的数字。
程序如下:
#include<reg52.h>
sbit P3_5 =P3^5;
unsigned char counet, m[4] = {0,0,0,0};
void display()
{
unsigned char code Tab[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code Bit[] = {8, 4, 2, 1};
unsigned char i, j;
for (i = 0; i < 4; i++) {
P0 = Tab[m[i]]; if (i == 2) P0 &= 127;
P2 = Bit[i]; for(; j > 0; j++); P2 = 0;
}
}
void wait_key()
{
while( P3_5) display();
while(!P3_5) display();
}
main()
{
TMOD = 0x02;
IE = 0x82;
while(1) {
wait_key(); TR0 = 1; TH0 = TL0 = 6;
wait_key(); TR0 = 0;
wait_key(); m[0] = m[1] = m[2] = m[3] = 0;
}
}
void time0() interrupt 1
{
counet++;
counet %= 40;
if(!counet) {
m[0]++; m[0] %= 10;
if(!m[0]) {
m[1]++; m[1] %= 10;
if(!m[1]) {
m[2]++; m[2] %= 10;
if(!m[2]) {
m[3]++; m[3] %= 10;
}}}}
}
#include<reg52.h>
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit P3_5 =P3^5;
unsigned char keycnt;
unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int counet,second,msecond,minute;
void delay(unsigned int m)
{
unsigned char s;
for(;m>0;m--)
for(s=124;s>0;s--);
}
void display()
{
P0=Tab[msecond%10];
LED4=1;
delay(5);
LED4=0;
P0=Tab[second%10]+0x80;
LED3=1;
delay(5);
LED3=0;
P0=Tab[second/10];
LED2=1;
delay(5);
LED2=0;
P0=Tab[minute%10];
LED1=1;
delay(5);
LED1=0;
}
main()
{
unsigned char i,j;
P0=0xff;
P1=0xff;
TMOD=0x01;
// TH0=0x3c;
// TL0=0xb0;
EA=1;
ET0=1;
// TR0=1;
while(1)
{
display();
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x3c;
TL0=0xb0;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
second=0;
msecond=0;
minute=0;
keycnt=0;
break;
}
while(P3_5==0);
}
}
}
}
void time0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
counet++;
if(counet==2)
{
counet=0;
msecond++;
if(msecond==10)
{
msecond=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==10)
{
minute=0;
}
}
}
}
}
只能实现显示的时间基本单位是0.1秒,不是0.01秒(不知道怎么改啊)
用定时器
我是做单片机的