数字时钟设计

/************************************
*********数码时钟的设计**************
***************************时间2月12日
**************************************/

#include<reg52.h>
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar code table1[]=
{0x3e,0x3d,0x3b,0x37,0x2f,0x1f};//位选表
uchar code table2[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39 ,0x5e,0x79,0x71,0x80};//段码表最后一位是小数点
uchar hour,minute,second,count,flag;


/**********初始化函数***************/
void init()
{
  wei=0;
  P0=0xff;
  duan=0;
  P0=0x00;// 初始化关显示
  hour=23;
  minute=59;
  second=50;//初始化时间设置为23点59分50秒

  TMOD=0x01;//选择计数器TO模式1定时器1选择模式1
  TH0=(65536-46080)/256;
  TL0=(65536-46080)%256;//定时器0实现50MS定时
  EA=1;//开总中断
  ET0=1;//开定时器0中
  TR0=1; //定时器0开始计数
}


 /*******延时函数***************/
 void delay(uchar xms)
 {
   char x,y;
   for(x=xms;x>0;x--)
      for(y=110;y>0;y--);
 }

 

/************显示函数***********/
void display(uchar hh,uchar mm,uchar ss)
{
  uchar h1,h2,m1,m2,s1,s2;//两位分别对应时间的十位个位

  h1=hh/10;//时的十位
  h2=hh%10;//时的个位
  m1=mm/10;//分的十位
  m2=mm%10;//分的个位
  s1=ss/10;//秒的十位
  s2=ss%10;//秒的个位
  
  P0=0xff; //消隐
  wei=1;
  P0=table1[0];//第1个数码管选中
  wei=0;
  duan=1;
  P0=table2[h1];
  duan=0;
  delay(1);

  P0=0xff; //消隐
  wei=1;
  P0=table1[1];//第2个数码管选中
  wei=0;
  duan=1;
  P0=table2[h2]+0x80;//最后加0x80为了显示出小数点
  duan=0;
  delay(1);

  P0=0xff; //消隐
  wei=1;
  P0=table1[2];//第3个数码管选中
  wei=0;
  duan=1;
  P0=table2[m1];
  duan=0;
  delay(1);

 

  P0=0xff; //消隐
  wei=1;
  P0=table1[3];//第4个数码管选中
  wei=0;
  duan=1;
  P0=table2[m2]+0x80;//加0x80为了显示小数点
  duan=0;
  delay(1);


  P0=0xff; //消隐
  wei=1;
  P0=table1[4];//第5个数码管选中
  wei=0;
  duan=1;
  P0=table2[s1];
  duan=0;
  delay(1);

  P0=0xff;//消隐
     
  wei=1;
  P0=table1[5];//第6个数码管选中
  wei=0;
  duan=1;
  P0=table2[s2];
  duan=0;
  delay(1);

}

 


/******定时器0中断函数*********/
void t0() interrupt 1 //定时器0中断级别为1
{
 
 TH0=(65536-46080)/256;//数据重载
 TL0=(65536-46080)%256;
 count++;
 if(count==20)
    {
 count=0;
 second++;
 if(second==60)
    {
       second=0;
    minute++;
    if(minute==60)
       {
      minute=0;
      hour++;
      if(hour==24)
        {
       hour=0;    
     }
   
       }
   
    }
 
    }


}

 

 


void main()
{
 init();
 while(1)
      {
       display(hour,minute,second);
      }
}

 

 

想写出一个能够实现时分秒可调的电子时钟,加油。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值