51单片机 时钟程序设计 数码管可闪烁显示数值

/*通过独立键控制调节的时钟。s2控制启动;s3控制暂停;s4控制在暂停的状态下切换时针、分针;s5控制时针、分针的值的增加*/

/* 其中优化完善的功能是:在切换时针、分针的状态下,其数码管能闪烁显示数字*/


#include <reg52.h>
#include <intrins.h>

//宏定义
#define uchar unsigned char
#define uint unsigned int

//数码管显示数字赋值初始化
uchar code leddate[]={

         0X3f,//0
 0X06,//1
 0X5B,//2
 0X4f,//3
 0X66,//4
 0X6d,//5
 0X7d,//6
 0X07,//7
 0X7f,//8
 0X6f, //9

 0Xbf,//0.
 0X86,//1.
 0Xdb,//2.
 0Xcf,//3.
 0Xe6,//4.
 0Xed,//5.
 0Xfd,//6.
 0X87,//7.
 0Xff,//8.
 0Xef //9.
}; 

sbit LED1=P1^0;
sbit wei=P2^7;
sbit duan=P2^6;

sbit s2=P3^0;//启动计时
sbit s3=P3^1;//暂停计时
sbit s4=P3^2;//切换分针、时针调节位
sbit s5=P3^3;//分针或时针 加一

uchar t=0;
uchar s=0;
uchar m=0;
uchar h=0;
uchar te=0;
uchar temp=0; //实现闪烁功能的数值,每temp加一,其数值闪烁一次

//延时
void delay(uchar z){

     uchar x,y;
 for(x=z;x>0;x--)
   for(y=114;y>0;y--)
       _nop_();
}

//定时器初始化
void T_reput(){

     TMOD = 0X11;
TH0=0X4b;
 TL0=0Xfd;
 TH1=0X4b;
 TL1=0Xfd;
 EA=1;//系统开放中断
 ET0=1;//允许T0中断
 ET1=1;//允许T1中断
 TR0=1;//启动时钟 0
 TR1=1;//启动时钟1
}

//秒针
void miao(uchar z){

     uchar shi,ge;
 shi= z/10;//求模
 ge= z%10;//求余

 P0=0Xff;//在位打开之前,先将前一次的P0值(段)清零
 wei=1;  //开启位选开关
 P0=0X7f;
 wei=0;  //关闭位选开关
 duan=1; //开启段选开关
 P0=leddate[ge];
 duan=0;  //关闭段开关

 delay(1); //正常刷新延时

 P0=0Xff;
 wei=1;
 P0=0Xbf;
 wei&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值