×
单片机 > 单片机程序设计 > 详情

秒表计时功能(模仿)单片机程序

发布时间:2020-09-02 发布时间:
|

下面这个仿真效果图,大家可按上面的电路来制作



 

/**
//模仿秒表计时功能,独立按键可控制计时数字的“暂停/走动”。(程序没有考虑计时精确度控制)
/*P2.2~P2.4与138译码器输入口连接
/*P1.0连接独立按键
/*P0口输出数据
***/
#include
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,
                          0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //共阴数码管 0-9  '-' '熄灭‘表
unsigned int count,a,b,sec,min,hour; 
bit c_flag; // 暂停/计时 标志          

/*****T1初始化*****/
void timer_1(void)
{
  TH1=0x0ec;
  TL1=0x078;
  TR1=1;
  }
/*****数据计数******/
void time_count(viod)
{
 if(hour==60){sec=0,min=0,hour=0;}
   else if(sec!=59) sec++;
      else if(min!=59) {sec=0,min++;}
     else {min=0,hour++;}
 }
/******数字调整*******/
void get_count(unsigned int x)
{
  a=x/10;
  b=x%10;
  }
/*******按键检测********/
void key_tach(void)
{
   int i,j;
   j=P1&0x01;
   if(j==0){
     for(i=0;i<=200;i++);
  j=P1&0x01;
  if(j==0) 
   {if(c_flag==1) c_flag=0;
         else c_flag=1;}
   }
   }
/*******显示程序********/
void display(viod)
{   
   int flag;
   P0=0x00;
   flag=count%8;
   switch(flag){
    case 0:P2=flag*4;
        get_count(hour);
     P0=tab[a];
     break;
 case 1:P2=flag*4;
     P0=tab[b];
     break;
 case 2:P2=flag*4;
     P0=tab[10];
     break;
 case 3:P2=flag*4;
        get_count(min);
     P0=tab[a];
     break;
 case 4:P2=flag*4;
     P0=tab[b];
     break;
 case 5:P2=flag*4;
     P0=tab[10];
     break;
 case 6:P2=flag*4;
        get_count(sec);
     P0=tab[a];
     break;
 case 7:P2=flag*4;
     P0=tab[b];
     break;
 default:return;
    }
   }
/*******中断服务程序********/
void int1() interrupt 3
{
   key_tach();
   if(c_flag==0)
   {
     if(count==7) {count=0;time_count();}
       else count++;}
    else
    {
        if(count==7) {count=0;}
        else count++;} 
   display();
   timer_1();
   }

/******主程序*****/
void main()
{
  c_flag=0;
  count=0;
  sec=0;
  min=0;
  hour=0;
  TMOD=0x10;
  EA=1;
  ET1=1;
  timer_1();
  while(1);
  }



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于arm的指纹识别门禁系统是如何设计的