苏嵌学习日志 2018.7.20

本文记录了使用6位数码管实现可调节电子钟的过程,包括定时器编程方法及常见问题解决经验。

苏嵌                                                                                                                                            项目实战

学习日志                             姓名:陈文静        日期:2018.7.20

 

 

 

 

 

今日学习任务                        编写电子钟的程序,要求用6位数码管显示,可以调节时和分,以及清零

                      

 

 

 

今日任务完成情况         

(详细说明本日任务是          成功完成该程序的编写;

 否按计划完成,开发的         

代码量)                 

 

 

                          

                         

今日开发中出现的问题汇总               数码管的第五位总是不显示,后来检查后是仿软件的问题;

                         

                         

                         

 

今日未解决问题                                  无

 

 

                          

 

 今日开发收获        

                                                          如何用定时器的方法编写一个简单电子钟的程序;

                         

 

 

                                                        要常将之前学习的东西拿过来复习

自我评价                                       不懂就要问;

 

(是否按开发规范完成                      基础有点差;

 

既定任务,需要改进的地方,与他人合作效果等)                                                       

 

其他                                                无

电子钟代码: 

#include <reg51.h>

sbit m=P3^0;
sbit n=P3^1;
sbit a=P3^2;


unsigned int flag=0,display_flag=0;


//共阴数码管表                                          
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delay(x)
{
   int i;
   while(x--)
   {
      for(i=0;i<80;i++);
   }
}

void display1(int m,int n,int k)
{
   if(display_flag % 6==0)
   {
      P0=0xfe;
      P1=table[m/10];
   }
   else if(display_flag % 6==1)
   {
      P0=0xfd;
      P1=table[m%10];
   }
   else if(display_flag % 6==2)
   {
      P0=0xfb;
      P1=table[n/10];
   }
   else if(display_flag % 6==3)
   {
      P0=0xf7;
      P1=table[n%10];
   }
   else if(display_flag % 6==4)
   {
      P0=0xef;
      P1=table[k/10];
   }
   else if(display_flag % 6==5)
   {
      P0=0xdf;
      P1=table[k%10];
   }
}
int miao=0,fen=0,shi=0;

int main()
{
//  int miao=0,fen=0,shi=0;
  int num=0;
  EA=1;          //打开中断总开关
  ET0=1;      //打开定时器中断0开关
  TMOD=0x01;        //定时器0用工作方式1

  TH0=(65535-2000)/256;       //高八位
  TL0=(65535-2000)%256;       //低八位

  TR0=1;            //启动定时器
 
  while(1)
  {       
      if(flag==5)
      {
          num++;
          if(num==9)
          {
             miao++;
             num=0;
             if(miao==60)
             {
               fen++;
               miao=0;
               if(fen==60)
               {
                 shi++;
                 fen=0;
                 if(shi==24)
                 {
                    shi=0;
                 }
               } 
               
             }
              //display(shi,fen);
          }
          flag=0;
         // display(fen,miao);
      }                   
      //display(miao,num)
      display1(shi,fen,miao);  
  }
  //display(shi,fen,miao);
  
   
  return 0;
}

void timer_0()    interrupt 1
{
   TH0=(65535-2000)/256;       //高八位
   TL0=(65535-2000)%256;       //低八位
   display_flag++;
   flag++;
   
   if(m==0) // 调分
   {
     delay(2);
     if(m==0) fen++;
     if(fen==60) fen=0;
     delay(2);
     while(!m);
   }
   if(n==0) // 调小时
   {
     delay(2);
     if(n==0) shi++;
     if(shi==24) shi=0;
     delay(2);
     while(!n);
     }    
     if(a==0)
     {
         delay(2);
         if(a==0)
         {
            shi=0;
            fen=0;
            miao=0;
            delay(2);
            while(!a);
         }
     }
}
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值