这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 分享电子钟设计程序!望大侠指点!

共5条 1/1 1 跳转至

分享电子钟设计程序!望大侠指点!

菜鸟
2011-06-30 12:26:44     打赏

个位大侠参考一下程序编写有那些需要改进的地方以及编程方法!总感觉编写的不够专业!


/********************************************************
       利用中断编写的简易电子钟
********************************************************/
//作者:xxq
//日期:2011年6月17日
//功能:启动显示12—00—00时间开始走,按下第一下DL1调整小时(按DL2加,按DL4减),
// 按第二下DL1调整分钟(按DL3加,按DL4减)
//利用定时器0;12Mhz晶振
#include<reg51.h>
#define    uint    unsigined  int
#define    uchar   unsigined  char
sbit   DL1=P1^4; //  功能切换键
sbit   DL2=P1^5; //   时加
sbit   DL3=P1^6; //   分加
sbit   DL4=P1^7; //   减
char   table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
              //数字0————————————————————9
char   chunshu[8]={0x00,0x00, 0x00,  0x00,0x00, 0x00,  0x00,0x00};
char s, f, m,b;
char    weishu[]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};  //数码管位数显示

/*******************数码管显示函数***************************************/
int  shaomaio()

  int  a,c,d,i;
 {
   chunshu[1]=m/10;  //显示秒
   chunshu[0]=m%10;

   chunshu[4]=f/10;  //显示分
   chunshu[3]=f%10;

   chunshu[7]=s/10;  //显示时
   chunshu[6]=s%10;
 
   for(i=0;i<2;i++)  //第1 第2 位  显示秒
   {
      P0=table[chunshu[i]];
      P2=weishu[i];
   for(a=0;a<60;a++);
   }
   P0=0xbf; //第3位显示“—”
      P2=0xfa;
   for(a=0;a<20;a++);
      for(c=3;c<5;c++) //第4 第5位  显示分
    {
       P0=table[chunshu[c]];
       P2=weishu[c];
    for(a=0;a<60;a++);
    }

   P0=0xbf; //第6位显示“—”
         P2=0xfd;
      for(a=0;a<20;a++);
         for(d=6;d<8;d++) //第7 第8 位   显示时
     {
        P0=table[chunshu[d]];
        P2=weishu[d];
     for(a=0;a<50;a++);
     }
   
 }
}

/*********************主函数**********************************/
main()
{
  int  a,c=0;
  P1=0xff;
  s=12; //时
  f=0; //分
  m=0; //秒
  b=0;
  TMOD=0x01;//定时器0工作在模式0;
  TH0=(65536-50000)/256; //定时50毫秒
  TL0=(65536-50000)%256;
  EA=1;   //打开总中断
  ET0=1;   //打开内部中断0
  TR0=1;
  while(1)
 {
/******************开始走动*************************************/
     shaomaio();   //扫描数码管
       if(b==20)//b=20时刚好一秒
   {
     b=0;
     m=m+1; //秒每次加1
     if(m>59)
      {
    shaomaio();   //扫描数码管
     m=0;
     f=f+1;
     if(f>59)
      {
       shaomaio(); //扫描数码管
        f=0;
     s=s+1;
     if(s==24)
     {
       s=0;
       f=0;
       m=0;
     }
      }
   }
  }

/*********************功能切换**********************************/
  if(DL1==0)  //检测按键是否按下
  {
    for(a=0;a<38;a++) //按键去抖
     {
     shaomaio();   //扫描数码管
     }
      if(DL1==0)  //再次检测按键是否按下
      {
        c=c+1;
     if(c>2)
     {
       c=0;
       EA=1;//开中断秒开始走动
       //TH0=(65536-50000)/256;
                   //TL0=(65536-50000)%256;
     }

      }
   }
  
/*********************时设置**********************************/
    if(c==1)
    {
      EA=0; //关闭中断停止秒走动
   if(DL2==0)  //检测按键是否按下
   {
    for(a=0;a<38;a++) //按键去抖
        {
      shaomaio();   //扫描数码管
         }
      if(DL2==0)  //再次检测按键是否按下
      {
       s=s+1;
    if(s==24) s=0;
       }
    }

    if(DL4==0&&c==1)
     {
     for(a=0;a<38;a++) //按键去抖
           {
         shaomaio();   //扫描数码管
            }
     if(DL4==0)
     {
      s=s-1;
      if(s<0) s=0;
     }

    
     }

  }
 

/*********************分设置**********************************/
      if(c==2)
    {   EA=0; //关闭中断停止秒走动
    if(DL3==0)  //检测按键是否按下
    {
     for(a=0;a<38;a++) //按键去抖
         {
       shaomaio();   //扫描数码管
          }
      if(DL3==0)  //再次检测按键是否按下
       {
        f=f+1;
     if(f>59) f=0;
       }
     }
   if(DL4==0&&c==2)
   {
       for(a=0;a<38;a++) //按键去抖
          {
        shaomaio();   //扫描数码管
           }
     if(DL4==0)
      {
       f=f-1;
       if(f<0) f=0;
      }   
      }

  }
/*******************************************************/
   
   }  

 
}
/***************中断函数****************************************/
 void   zhong_duan()   interrupt   1
 {
  //shaomaio();   //扫描数码管
   TH0=(65536-50000)/256;//高8位
  TL0=(65536-50000)%256;//低8位
   b=b+1; //记录中断次,数每次中断50ms
 }




关键词: 分享     电子钟     设计     程序     大侠     指点     显示     chu    

院士
2011-06-30 13:52:37     打赏
2楼
请等待高手确认

菜鸟
2011-06-30 22:29:59     打赏
3楼

命函数时最好用英语对应的中文名字  
还有编写程序最好像阶梯一级级的  比较好改程序和找错误


高工
2011-07-13 22:39:02     打赏
4楼
菜鸟提个意见
用中文拼音命名不太国际化。。。

菜鸟
2011-07-16 11:28:43     打赏
5楼

用时钟芯片好点


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]