打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
6位LED电子钟程序 LCDHOME论坛
一个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;
           }
           
}一个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;
           }
           
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C51定时闹钟程序
51单片机学习19-简易秒表
ADC0809模数转换器
源程序C代码:篮球比赛应用系统
51单片机学习
单片机实训5 H桥式驱动电路——电机控制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服