• 赞助网站
  • 您的位置:  首页 >> 技术交流区 >> MCU技术 >> 6位LED电子钟程序
    6位LED电子钟程序
    2014年03月07日 点击: 编辑: kmwgm
    一个6位电子钟程序
    特点:
    时位为0时不显示。
    时位、分位小数点以秒闪烁
    调整时、分时所调位闪动闪动。
    走时精度可调到每天小于1秒。
    LED为共阳极

    C语言程序:
           
    #include<reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    int i,sec,min,h,flag;
    sbit sg=P2^4;
    sbit ss=P2^3;
    sbit mg=P2^2;
    sbit ms=P2^7;
    sbit hg=P2^6;
    sbit hs=P2^5;
    sbit key_ch=P3^5;
    sbit key_add=P3^6;
    sbit key_minus=P3^7;
    uchar code table[16]=
       {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
    uchar code table1[16]=
       {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};    
    void init();
    void delay(uint);
    void secont_display();
    void minute_display();
    void hour_display();
    void control();
    void time();
    void main()
    {
       init();
       while(1)
       {
          secont_display();
           minute_display();
           hour_display();
            control();
       }
    }
    void init()//初始化
    {
       
       i=0;
       sec=0;
       min=0;
       h=0;
       flag=0;
       P1=0xff;
       P2=0xff;
       P3=0xff;
       EA=1;
       ET0=1;
       TMOD=0x01;
       TH0=(65536-50000)/256;
       TL0=(65536-50000)%256;
       TR0=1;
    }
    void delay(uint z)//延时
    {
       uint x,y;
       for(x=z;x>0;x--)
           for(y=110;y>0;y--);
    }
    void secont_display()//秒显示
    {
       int sec_shi,sec_ge;
       sec_shi=sec/10;
       sec_ge=sec%10;
       
       P0=table[sec_ge];    
       
      sg=0;
       
       delay(1);
      sg=1;
       
       P0=table[sec_shi];    
        ss=0;
       
       delay(1);
      ss=1;

    }




    void minute_display()//分显示
    {
       int min_shi,min_ge;
       min_shi=min/10;
       min_ge=min%10;
       if(i<=10)
       {P0=table1[min_ge];}    
       else
      P0=table[min_ge];
      if(i<=10&&flag==1)
       mg=1;
       else
      mg=0;
       delay(1);
      mg=1;
       
       P0=table[min_shi];    
       
       ms=0;
       
       delay(1);
      ms=1;
    }
    void hour_display()//时显示
    {
       int h_shi,h_ge;
       h_shi=h/10;
       h_ge=h%10;
       if(i<=10)
       {P0=table1[h_ge];}
       else
       P0=table[h_ge];    
        if(i<=10&&flag==2)    
       hg=1;
       else
      hg=0;
       delay(1);
      hg=1;
       
       P0=table[h_shi];    
       if(h_shi==0)
       {hs=1;}
       else
       hs=0;
       
       delay(1);
       hs=1;
    }
    void control()
    {
       if(!key_ch)
       {
           delay(5);
           if(!key_ch)
           {
                 flag++;
                 if(flag==3)
                   flag=0;
           }
       }
       while(!key_ch);
       if(flag==1 && key_add==0)
       { delay(5);}
      if(flag==1 && key_add==0)
       {    while(!key_add);
           min++;
           if(min==60)
               min=0;
       }
       if(flag==1 && key_minus==0)
       { delay(5);}
      if(flag==1 && key_minus==0)
       {    while(!key_minus);
           min--;
           if(min==-1)
               min=59;
       }
       if(flag==2 && key_add==0)
       {delay(5);}
      if(flag==2 && key_add==0)
       {    while(!key_add);
             h++;
             if(h==13)
               h=1;
       }
       if(flag==2 && key_minus==0)
       {delay(5);}
      if(flag==2 && key_minus==0)
       {    while(!key_minus);
             h--;
             if(h==-1)
               h=12;
       }


    }
    void T0_rpt() interrupt 1
    {
       TH0=(65536-49972)/256;//加減49972值可精确调整时间
       TL0=(65536-49972)%256;
       i++;
       time();
    }
    void time()
      {    
       if(i==20)
       {i=0;
      sec++;
     
       }
             if(sec==60)
             {
                 sec=0;
                 min++;
              }
           if(min==60)
               {
                   min=0;
                   h++;
                }
                   if(h==13)
               {
                       h=1;
                       min=0;
                       sec=0;
               }
               
    }
    赞助网站 | 关于我们 | 版权声明 | 站点导航 | 收藏本站 | 设为首页
    LCDHOME - LCD之家
    LCDHOME - LCD之家
    html/201403/262386.html
    欢迎来访LCDHOME论坛网