这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 我的数字钟程序,请指点其中优差(我是初学者)

共2条 1/1 1 跳转至

我的数字钟程序,请指点其中优差(我是初学者)

院士
2006-09-17 18:14:16     打赏
我的数字钟程序,请指点其中优差(我是初学者)



关键词: 我的     数字     钟程序     程序     指点     其中     优差     我是         

院士
2006-12-22 22:43:00     打赏
2楼
问 这个数字钟是用数码管显示,用二个键来控制时间的设置.
但是不知道其优差,请高手指点交流.
还有我想呼吁网上的朋友们把真的程序(没有错误,可以应用的)
贴上来,这样更有利于交流.

程序如下:#include<reg52.h>
#include<intrins.h>
unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xff};
unsigned char led[6];
unsigned int k,m,w;
unsigned char i,j,flash_wei=0xff;
struct time{           
         unsigned char sec;
          unsigned char min;
          unsigned char hour;
           };
struct time clock;
sbit P26=P2^6;
sbit P27=P2^7;
bit flash=1;
bit keypress=0;
bit en_fresh=0;


fresh_led()
{led[0]=clock.sec%10;  
led[1]=clock.sec/10;  
led[2]=clock.min%10;  
led[3]=clock.min/10;  
led[4]=clock.hour%10;
led[5]=clock.hour/10;
en_fresh=0;
}

void display()    //显示函数
{
if((flash_wei==j)&&(!flash))
   P1=seg[10];
else
P1=seg[led[j]];       
P3=_crol_(P3,1);     
if(++j==7)                              
  {
   j=0;P3=0x7F;        
  }
}



void initial_clock()  
{
TR0=0;
TH0=0x06;
TL0=0x06;
TR0=1;
}




unsigned char key_hit()
{if((!P26)||(!P27))
  {keypress=1;
   while(w<200);
   keypress=0;
   if(!P26)
    {while(!P26);
    return(1);}
   else if(!P27)
    {while(!P27);
    return(2);}
   else
    return(0);
  }
  else
   return(0);
}

key1()
{
if(flash_wei==0xff)
flash_wei=0;
else
{if(++flash_wei==6)
flash_wei=0xff;
}

}

key2()
{unsigned char f;
switch(flash_wei)
{case 0:f=led[0];
       if(++f==10)
    f=0;
    clock.sec=led[1]*10+f;
break;
case 1:f=led[1];
       if(++f==6)
    f=0;
    clock.sec=led[0]+f*10;
break;
case 2:f=led[2];
       if(++f==10)
    f=0;
    clock.min=led[3]*10+f;
break;
case 3:f=led[3];
       if(++f==6)
    f=0;
    clock.min=led[2]+f*10;
break;
case 4:f=led[4];
    f++;
       if((led[5]==2)&&(f==4))
    f=0;
    if(f==10)
    f=0;
    clock.hour=led[5]*10+f;
break;
case 5:f=led[5];
    f++;
    if((led[4]>=4)&&(f==2))
    f=0;
    if(f==3)
    f=0;
        clock.hour=f*10+led[4];
break;
}
}

void timer0_isr(void) interrupt 1
{
if(keypress)
w++;
   if(++i==12)         
    {
     i=0;           
     display();     
    }
if(flash_wei==0xff)
{
if(++k==4000)                 
  {en_fresh=1;
  k=0;
   {if(++clock.sec==60)    
     {clock.sec=0;
       if(++clock.min==60)
           {clock.min=0;
             if(++clock.hour==24)
                 clock.hour=0;
           }
     }
   }                         
  }  
}
else
{k=0;
  if(++m==1000)
  {m=0;flash=~flash;}
}
}



void main()
{unsigned char z;
initial_clock();
TMOD=0x02;          
EA=1;
ET0=1;
P3=0x7F;            
while(1)
  {if(en_fresh)
  fresh_led();
z=key_hit();
switch(z)
    {
    case 0:;break;
    case 1:key1();break;
    case 2:key2();fresh_led();break;
    }  
  }
}








   1: 你的程序注释太少,看起来太累发原理图和源程序给我吧,我的邮箱:daniel_wind@163.com,只能在晚上才能看到邮件.

共2条 1/1 1 跳转至

回复

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