51单片机实现时钟

四年前写的程序了,纪念一下曾经玩过的单片机

 #include "IAP15F2K61S2.h"
#include "delay.h"
sbit seg1 = P2^7;
sbit seg2 = P2^6;
sbit seg3 = P2^5;
sbit seg4 = P2^4;
sbit seg5 = P2^3;
sbit seg6 = P2^2;
sbit seg7 = P2^1;
sbit seg8 = P2^0;
unsigned int  n      = 0; //定时器计数
unsigned char hour   = 0;
unsigned char minute = 0;
unsigned char second = 0;
unsigned char code Num[12] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned char   Display[8] = {11,11,10,11,11,10,11,11};
void Init_timer()
{
 TMOD = 0x02;        //方式二
 TH0  = 0x06;          //赋初值(255-6=250)
 TL0  = 0x06;
 EA   = 1;                //打开总中断
 ET0  = 1;               //打开定时器0中断
 TR0  = 1;              //启动定时器0
}
void SEG_Display()
{
 seg1 = 0;
 P0 = Num[Display[0]];
 Delay1ms();
 seg1 = 1;
 P0=0xff;

 seg2 = 0;
 P0 = Num[Display[1]];
 Delay1ms();
 seg2 = 1;
 P0=0xff;

 seg3 = 0;
 P0 = Num[Display[2]];
 Delay1ms();
 seg3 = 1;
 P0=0xff;

 seg4 = 0;
 P0 = Num[Display[3]];
 Delay1ms();
 seg4 = 1;
 P0=0xff;

 seg5 = 0;
 P0 = Num[Display[4]];
 Delay1ms();
 seg5 = 1;
 P0=0xff;

 seg6 = 0;
 P0 = Num[Display[5]];
 Delay1ms();
 seg6 = 1;
 P0=0xff;

 seg7 = 0;
 P0 = Num[Display[6]];
 Delay1ms();
 seg7 = 1;
 P0=0xff;

 seg8 = 0;
 P0 = Num[Display[7]];
 Delay1ms();
 seg8 = 1;
 P0=0xff; 
}
void Clock_Run()
{
 Display[0] = hour   / 10; 
 Display[1] = hour   % 10;
 Display[3] = minute / 10; 
 Display[4] = minute % 10;
 Display[6] = second / 10; 
 Display[7] = second % 10; 
}
int main()
{
 Init_timer(); 
 while(1)
 {
  if(n>4000) 
  {
   n = 0;
   second++;
   if(second == 60)
   {
    second = 0; 
    minute++;
    if(minute ==60)
    {
     minute = 0;
     hour++;
     if(hour == 24)
     {
      hour = 0;
     }
    }
   }
  }
  Clock_Run();
  SEG_Display();
 }
 return 0;
}
void Tomer0() interrupt 1
{
 n++;
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值