panshuyan 发表于 2012-7-19 00:35:16

求助:我想设计一个电子表,可以调时间的,可是一天了...

没做完,做的我头好疼,可能我按这个想法走感觉很复杂,是否有好一点的方法呢,求高手帮帮解决。谢谢
代码是:#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

void delayms(uchar a);
void shanshuo();
void jiashu();
void jianshu();
void init();
void display();
uchar i=0,t=0,n=0,m=0,s=0;

sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
sbit k8=P1^7;

//位选
uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//段选(共阳极0123456789-)
uchar duan[]={
0xC0,0xF9, 0xA4,0xB0,0x99, 0x92, 0x82,0xF8,0x80,0x90,0xbf};               
      
void main()
{
        while(1)
        {
           init();
           shanshuo();
        }
}

void delayms(uchar a)
{
   uchar w;
   while(a--)
   for(w=0;w<120;w++);
}

//下杠左右移闪烁函数
void shanshuo()
{       
    uchar s,k;
        while(1)
        {
        display();
        if(k7==0) //右移键
        {       
           TR1=1;//停止计数   
           delayms(0); //消抖
           if(k7==0)
           {
                  for(k=10;k>0;k--)       //闪烁的次数
                  {
              P2=wei;
                  P0=0xf7;
          delayms(5000);delayms(5000);       
          P0=0xff;
          delayms(5000);delayms(5000);          
          P0=0xf7;
                   if(k5==0)        //在闪烁过程中如果按键k5按一下数加一
                          {                          
                                delayms(0);//消抖
                                if(k5==0)
                               {                                  
                                  jiashu();//加数函数
                               }
                          }
                          else if(k6==0) //在闪烁过程中如果按键k6按一下数减一
                          {
                                  delayms(0);//消抖
                                if(k6==0)
                               {                                  
                                  jianshu();   //减数函数
                               }
                          }
                  }
              if(s>=8)
                  {
                  s=0;                     
                  }
           }s++;
        }
        else if(k8==0)//左移键
        {
           TR1=0;//停止计数       
           if(s==0)
          {
               s=7;                     
                }
           delayms(0); //消抖
           if(k8==0)
           {
                  for(k=10;k>0;k--)       //闪烁的次数
                  {
              P2=wei;
                  P0=0xf7;
          delayms(5000);delayms(5000);       
          P0=0xff;
          delayms(5000);delayms(5000);          
          P0=0xf7;
                          if(k5==0)               //在闪烁过程中如果按键k5按一下数加一
                          {                          
                                delayms(0);//消抖
                                if(k5==0)
                               {                                  
                                  jiashu();//加数函数
                               }
                          }
                          else if(k6==0)//在闪烁过程中如果按键k6按一下数减一
                          {
                                 delayms(0); //消抖
                                if(k6==0)
                               {                                  
                                  jianshu();   //减数函数
                               }
                          }
                  }
           }s--;
        }
}
}

void jiashu()//加数函数
{

}
void jianshu()//减数函数
{

}

void init()
{
   TMOD=0x10;
   EA=1;
   EX0=1;IT0=0;          //外部中断0
   EX1=1;IT1=0;          //外部中断1
      
   ET1=1;          //定时计数器
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
   TR1=1;
}

void wzd0() interrupt 0//外部中断0
{

}

void wzd1() interrupt 2//外部中断1
{

}

void t1() interrupt 3
{
   i++;
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
   if(i>=20)
   {
          i=0;
       t++;
       if(t>=60)
       {
               t=0;
                n++;
                if(n>=60)
                {
                   n=0;
                   m++;
                   if(m>=24)
                   {
                          m=0;
                   }
                }
       }
   }
}
void display()
{
   uchar d;
   uchar table;
   table=duan;table=duan;table=duan;
   table=duan;table=duan;
   table=duan;table=duan;table=duan;
   for(d=0;d<8;d++)
   {
   P2=wei;
   P0=table;
   delayms(2);
   }
}

dz20062008 发表于 2012-7-19 16:25:50

先画好程序流程图,然后写功能子程序,并逐一调试好,最后组合在一起,调试

and001 发表于 2012-7-20 12:30:52

对!其实这个应该比较容易的!

cumtgao 发表于 2012-7-20 12:39:56

网上资料一搜一大把

panshuyan 发表于 2012-7-22 21:02:14

谢谢了,我一定会实施的。
页: [1]
查看完整版本: 求助:我想设计一个电子表,可以调时间的,可是一天了...