6位数码管显示的89c51单片机电子秒表设计

594600783@163.com

第1个回答  2011-12-16
下面是我以前学单片机时候写,没想到还存着,你可以看看,也是六位数码管,做的是始终,还可以设置时间

#include<reg52.h>
#define uchar unsigned char //p32接p34 , p33接p35 外部中断
#define ulong unsigned long
sbit lock1=P2^6;
sbit lock2=P2^7;

uchar x=0,a=1,key,m11,m12,m21,m22,m31,m32;
//uchar t11=0,t12=0,t21=0,t22=0,t31=0,t32=0;
void delay(uchar t)
{
uchar i,j;
for(i=0;i<t;i++)
for(j=0;j<200;j++){}
}

zd0()interrupt 0{a=(!a);x=x+1;}
zd1()interrupt 2{ if(x>=12) x=1;
switch(x)
{ case 1:m11++;break;
case 3:m12++;break;
case 5:m21++;break;
case 7:m22++;break;
case 9:m31++;break;
case 11:m32++;break;
default:break;

}
}
void main()
{
uchar display[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar k;
ulong g;
a=1;
EA=1;EX1=1;EX0=1;IT1=1;IT0=1;

while(1)
{ m11=0;m12=0;m21=0;m22=0;m31=0;m32=0;

for(g=0;g<360000;g++)
{
k=1;
while(k--)
{

if(k==0) {m11+=a;if(m11==10) {m11=0;m12+=a;} }
P0=display[m11]; //微秒显示 00-99
lock1=1;
lock1=0;
P0=0xdf;//微秒的个位 0-9
lock2=1;
delay(4);
lock2=0;

if(m12==10) {m12=0;m21+=a;}
P0=display[m12];
lock1=1;
lock1=0;
P0=0xef;//微秒的十位 0-9
lock2=1;
delay(4);
lock2=0;
/*******************/

if(m21==10) {m21=0;m22+=a;}
P0=display[m21]|0x80;//秒显示 00-59
lock1=1;
lock1=0;
P0=0xf7;//秒的个位 0-9
lock2=1;
delay(4);
lock2=0;

if(m22==6) {m22=0;m31+=a;}
P0=display[m22];
lock1=1;
lock1=0;
P0=0xfb;//秒的十位 0-5
lock2=1;
delay(4);
lock2=0;
/**********************/

if(m31==10) {m31=0;m32+=a;}
P0=display[m31]|0x80;//分显示 00-59
lock1=1;
lock1=0;
P0=0xfd;//分的个位 0-9
lock2=1;
delay(4);
lock2=0;

if(m32==6) {m32=0;}
P0=display[m32];
lock1=1;
lock1=0;
P0=0xfe;//分的十位 0-5
lock2=1;
delay(4);
lock2=0;

}
}
}

}
第2个回答  2011-12-16

这个可以吗?

第3个回答  2011-12-16
有个现成的秒表!
第4个回答  2011-12-16
6位数码管显示的51单片机电子秒表设计

参考资料:电子秒表

相似回答