单片机学习日志—电子秒表的设计(2018.07.19)

学习日志                     姓名:   王瑶           日期: 2017.07.19   

今日学习任务

秒表设计程序的改进和完善

 

日任务完成情况

(详细说明本日任务是否按计划完成,开发的代码量。)

 

针对昨日没有完成的一些类如数码管最后两位不能显示、清零后不能重新继续等情况,今日做了一些改进,现在这些情况已经基本解决,所做出来的秒表能够正常显示,并可以实现开始、暂停、继续、清零等操作。

今日开发中遇到的问题汇总

采用中断程序后程序的走向问题。

日开发收获

  1. 在代码完好的情况下,数码管不能正常显示可能是引脚使用不当的问题。
  2. 当定时与动态显示都涉及定时器时,若暂停去关闭定时器,那么动态显示也可能不会好使,改善方法是将动态显示的标志变量放到主程序中。

自我评价

(是否规范完成指定任务,需要改进的地方,与他人合作等。)

在一些地方还是会有些晕,但已经可以不借助百度的情况下独自编写相对健全的程序了。

 

秒表程序:

#include

 

sbit start_key=P3^0;

sbit pause_key=P3^1;

sbit continue_key=P3^3;

sbit clear_key=P3^2;

 

int flag=0,miao=0,num=0,display_flag=0;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

 

void display(int m,int n)

{

    if(display_flag%12==0)

{

     P0=0xfe;

 P1=table[m/1000];

}

else if(display_flag%12==2)

{

     P0=0xfd;

 P1=table[(m/100)%10];

}  

else if(display_flag%12==4)

{

     P0=0xfb;

 P1=table[(m/10)%10];

}

else if(display_flag%12==6)

{

     P0=0xf7;

 P1=table[m%10];

}

else if(display_flag%12==8)

{

     P0=0xef;

 P1=table[n/10];

}

else  if(display_flag%12==10)

{

     P0=0xdf;

 P1=table[n%10];

}

}

 

 

int main()

{

   P0=0xc0;

   P1=table[0];

 

   EA=1;  //打开总中断

   ET0=1;  //打开定时器0中断

   TMOD=0x01;//设置定时器0工作方式1

 

   TH0=(65535-5000)/256; //高八位

   TL0=(65535-5000)%256; //低八位

   if(start_key==0)

   {

      TR0=1;  //启动定时器

 

      while(1)

     {

  

    if(pause_key==0)

   {

        TR0=0;

   }    

    if(continue_key==0)

   {

TR0=1;

   }

   if(clear_key==0)

   {

TR0=0;

num=0;

miao=0;

   }

        if(flag==2)

   {

       num++;

   if(num==100)

  {

      miao++;

      num=0;

  if(miao==1000)

  {

     miao=0;

  }

  }

       flag=0;

   }

       display_flag++;

   display(miao,num);

}

   }while(!start_key);

   

   return 0;

}

 

void time_0() interrupt 1

{

    TH0=(65535-5000)/256; //高八位

    TL0=(65535-5000)%256; //低八位

flag++;

}

你可能感兴趣的:(单片机)