⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 使用C语言开发的基于51单片机设计计时秒表
💻 C
字号:
/*********************************
**公司名称:esa.hicc	        **
**模 块 名:计时秒表	        **
**创 建 者:esa		        **
**修 改 者:esa			**
**功能描述:精确到1/100S计时	**
**其他说明:		        **
**版    本:v1.0	        **
*********************************/

#include <reg51.h>
#define uchar unsigned char
#define uint  unsigned int

sbit P1_0 =P1^0;
sbit P1_1 =P1^1;
sbit P1_2 =P1^2;
sbit P1_3 =P1^3;

typedef struct	 
{ uchar minute;
  uchar second;
  uchar second_1;
}time;

time now={0,0,0};
time now_1[10];		
    
uchar code num_tab1[]={0x80,0x40,0x20,0x10,0x08,0x04};			
uchar code num_tab2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};		  //共阳极显示
uchar a=0;
uchar state=0;	  
uchar fy=0;	      //开始0和暂停1的复用标志


void delay(uint time1)		  //延时子程序
{
	int i;
	int k;
	for(i=0;i<time1;i++)
	for(k=0;k<100;k++);
}

void display(time disnum)	  //显示子程序
{
	int min_shi,min_ge,sec_shi,sec_ge,sec_1_shi,sec_1_ge,i;
	int num[6]={0,0,0,0,0,0};
	min_shi=disnum.minute/10;
	min_ge=disnum.minute%10;
	sec_shi=disnum.second/10;
	sec_ge=disnum.second%10;
	sec_1_shi=disnum.second_1/10;
	sec_1_ge=disnum.second_1%10;
	num[0]=min_shi;
	num[1]=min_ge;
	num[2]=sec_shi;
	num[3]=sec_ge;
	num[4]=sec_1_shi;
	num[5]=sec_1_ge;
	if(min_shi==0)
	{
		for(i=0;i<5;i++)
		{
		  P2=num_tab1[i+1];		  //先送位码
	      P0=num_tab2[num[i+1]];   //再送段码
		  delay(1);
		}
	 }
	else
	{
		for(i=0;i<6;i++)
		{
		P2=num_tab1[i];
		P0=num_tab2[num[i]];
		delay(1);
		}				
    }
}

void  interrupt_init(void)     
{
   EA=0;
   TMOD=0x01;
   TH0=0xd8;
   TL0=0xf0;
   IT0=1;
   ET0=1;
   EX0=1;
   EA=1;     
}

void interrup0(void) interrupt 0 using 3
{  uchar i;
   delay(1);
   if(P1_0==0)   
   {  
	  if(fy==0)		//开始计时
	  {
	    TR0=1; 
        state=0;
	    fy=1;
	  }
	 else	 //暂停
      {
		TR0=0;
		fy=0;
	  }
	 
   }  
   if(P1_1==0)  //记时
   {
     if(a<10)
	 {  
	   now_1[a]=now;
       a++;
	 }

   }
   if(P1_2==0)  //显示记时
   {
    if(state<=a)
    state++; 
   }
   if(P1_3==0)   //系统清零
   { 
     TR0=0;
	 fy=0;
	 a=0;
     now.minute=0;
     now.second=0;
     now.second_1=0; 
     for(i=0;i<10;i++)
     {
       now_1[i].minute=0;
       now_1[i].second=0;
       now_1[i].second_1=0;
     }          
   }
   
   
}

void interrup1(void) interrupt 1 using 3
{
  TR0=0;
  TH0=0xd8;
  TL0=0xf0;
  TR0=1;
  now.second_1++;
  if(now.second_1==100)
  {
    now.second++;
    now.second_1=0;
    if(now.second==60)
    {
       now.minute++;
       now.second=0;
       if(now.minute==60)
       {now.minute=0;}
    }
  }
}

void main(void)
 {   uchar j;
     for(j=0;j<10;j++)
     {
       now_1[j].minute=0;
       now_1[j].second=0;
       now_1[j].second_1=0;
     } 
    interrupt_init();	    //中断初始化   
   	// TR0=1;
    while(1)
    {
       switch(state)
       {
         case 0: display(now);break;
         case 1: display(now_1[state-1]);break;
         case 2: display(now_1[state-1]);break;
         case 3: display(now_1[state-1]);break;
         case 4: display(now_1[state-1]);break;
         case 5: display(now_1[state-1]);break;
         case 6: display(now_1[state-1]);break;
         case 7: display(now_1[state-1]);break;
         case 8: display(now_1[state-1]);break;
         case 9: display(now_1[state-1]);break;
		 case 10:display(now_1[state-1]);break;
       }
	
    }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -