电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 3005|回复: 1

一个6位电子钟程序

[复制链接]
发表于 2014-3-7 10:30:37 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
一个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;
                     }
                    
}
   


   

发表于 2014-3-21 10:25:36 | 显示全部楼层
有原理图吗?要是有原理图就更好了
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2025-2-22 23:49 , Processed in 0.058100 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表