基于51单片机秒表计时

描述

51单片机秒表计时,四位数码管显示。上电前显示00.00,一共2个按键,一个启动停止,另一个清零功能,60秒后自动归零,程序可自行修改。

数码管数码管

原理图


程序

#include<89C51.h>

#define uchar unsigned char

#define uint unsigned int

void delay(uint c);

#define dula P22

#define wela P23

void keycan();

void init();

void display();

uchar table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

							0x7f,0x6f,0x77,0x7c,

							0x39,0x5e,0x79,0x71};

uint num,dis,n;

uint ms=0;

uint sec=0;

void main()

{

init();

TR0=0;

while(1)

{

display();	

keycan();

}

}

void init()

{

TMOD=0X01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;

ET0=1;

TR0=1;

EX0=1;

IT0=1;

}

void Time0() interrupt 1

{

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

ms++;

if(ms==100)

{

	ms=0;

	sec++;

	if(sec==60)

	{

		sec=0;

		TR0=0;

	}

}

}

void keycan()

{

if(P10==0)

	{

		delay(5);

		if(P10==0)

		{

			while(!P10);

			TR0=~TR0;

		}

		}

	 if(P11==0)

	{

		delay(5);

		if(P11==0)

		{

			while(!P11);

			sec=0;

			ms=0;

	}	

	}

}

void display()

{

wela=1;

	P0=0xfe;

	wela=0;

  P0=0;

  dula=1;

	P0=table[sec/10];

	dula=0;

  delay(5);



	wela=1;

	P0=0xfd;

	wela=0;

  P0=0;

  dula=1;

	P0=table[sec%10]|0x80;

	dula=0;

	delay(5);



  wela=1;

	P0=0xfb;

	wela=0;

	P0=0;

  dula=1;

	P0=table[ms/10];

	dula=0;

	delay(5);

	

	wela=1;

	P0=0xf7;

	wela=0;

	P0=0;

  dula=1;

	P0=table[ms%10];

	dula=0;

	delay(5);

}

void delay(uint c)

{

uint a,b;

for(a=c;a >0;a--)

for(b=115;b >0;b--);

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分