C语言51单片机之四位秒表

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/vivien1997/article/details/86632925
/*******************************************************
秒表
计时秒表,显示格式:**.**
Author:Vivien
*******************************************************/
#include <reg51.h>
#define DataPort P0   //数据端口

sbit Seg = P2^2;  //段码锁存
sbit Bit = P2^3;  //位码锁存

unsigned char code Seg_Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char code Seg_Code1[] = {0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0xfF,0xeF};
unsigned char code Bit_Code[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

unsigned char Disp_Num[8];

//七段显示子函数,FirstBit表示显示开始的位置(0-7),Num表示显示的位数(1-8)
void Display(unsigned char FirstBit,unsigned char Num);

void delay_50us()
{
	//unsigned char i;
	TMOD = 0x01;    //T0工作在定时方式,方式1
	TH0 = 0xff;     //50us的初值
	TL0 = 0xce;
	
	TR0 = 1;    //开T0
	while(!TF0);   //等待时间,原地踏步
	
	TF0 = 0;    //清除标志位
	TH0 = 0xff;  //重新赋初值
	TL0 = 0xce;
}

//七段显示子函数,FirstBit表示显示开始的位置(1-8),Num表示显示的位数(1-8)
void Display(unsigned char FirstBit,unsigned char Num)
{
	unsigned char i;
	for(i = 0;i < Num;i++)
		{
			DataPort = 0;  //消除影子,给段码
	    Seg = 1;  //段锁存 开门
	    Seg = 0;  //关门
			
		  DataPort = Bit_Code[i + FirstBit -1]; //选择位码
		  Bit = 1;   //位锁存  开门
		  Bit = 0;   //关门
			
			DataPort = Disp_Num[i];  //选择段码
			//DataPort = Seg_Code[i];  //选择段码
			Seg = 1;   //段锁存  开门
 			Seg = 0;   //关门
			
			delay_50us();     //控制好扫描时间,获得理想的效果
			                  //如果时间太长,会跳
		}
}



void main()           //实现计时0-99
{
	unsigned char ms_L,ms_T,sec_H,sec_D;
	unsigned int i,ms,sec;
	
	while(1)
	{
		i++;
		if(i == 20)    //放慢500倍
		{
			i = 0;
			ms ++;
		}
		if(ms == 100)
		{
			ms = 0;
			sec ++;	
		}
		if(sec == 60)
		{
			sec = 0;
		}
		ms_T = ms / 10;     //拆分和显示
		ms_L = ms % 10;
		sec_D = sec / 10;
		sec_H = sec % 10;
		Disp_Num[0] = Seg_Code[sec_D];	
		Disp_Num[1] = Seg_Code1[sec_H];		
		Disp_Num[2] = Seg_Code[ms_T];
		Disp_Num[3] = Seg_Code[ms_L];
		Display(3,4);
 }
}

猜你喜欢

转载自blog.csdn.net/vivien1997/article/details/86632925