数字钟的c语言源代码,数字钟C语言源程序.doc

数字钟C语言源程序

数字钟C语言源程序

**********************************************************************

#include

#include

#define uchar unsigned char

#define wei XBYTE[0x0FF20] //将82255PA口映射为数码管的位选,与硬件连接相对应

#define duan XBYTE[0x0FF21]//将8255PB口映射为数码管的段选,与硬件连接相对应

#define control XBYTE[0xff23]//将8255控制寄存器地址定义为control,与硬件连接相对应

#define int8 unsigned char

#define int16 unsigned int

sbit key1=P3^0;//设置键

sbit key2=P3^1;//加键

sbit key3=P3^2;//减键

Unsigned char dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//要显示的段码

uchar a=0,counter,hour=12,minute=0,second=0;

void delay(uchar x)//延时函数,约x us

{

while(x--);

}

void display(int8 hour,int8 minute,int8 second) //动态扫描程序

{

int8 hs,hg,ms,mg,ss,sg;

int8 counter;

hs=hour/10;//定义小时显示的十位

hg=hour%10;//定义小时显示的个位

ms=minute/10;//定义分钟显示的十位

mg=minute%10;//定义分钟显示的个位

ss=second/10;//定义秒钟显示的十位

sg=second%10;//定义秒钟显示的个位

duan=0xff;//关闭所有数码管显示

duan=dis[sg];

wei=0xfe;

for(counter=0;counter<100;counter++);

duan=0xff; //关闭所有数码管显示,防止上一个数据的干扰

duan=dis[ss];//送秒的十位段位码

wei=0xfd; //打开秒十位的位选,显示秒

for(counter=0;counter<100;counter++); //延时约100us,让数码管有足够的点亮时间

duan=0xff;

duan=dis[mg];

wei=0xfb;

for(counter=0;counter<100;counter++);

duan=0xff;

duan=dis[ms];

wei=0xf7;

for(counter=0;counter<100;counter++);

duan=0xff;

duan=dis[hg];

wei=0xef;

for(counter=0;counter<100;counter++);

duan=0xff;

duan=dis[hs];

wei=0xdf;

for(counter=0;counter<100;counter++);

}

void time_int() //定时器初始化

{

TMOD=0x01;//设置定时器0为模式1,16位

TH0=0x4c;

TL0=0x00; //装定时器初始值,定时中断一次为50ms时间

EA=1; //开总中断

ET0=1; //开定时器中断

TR0=1; //开启定时器0

}

void key()

{

if(key1==0) //设置键按下

{

delay(5);//消除抖动

while(key1==0)display(hour,minute,second); //当设置键处于按下的状态时一直显示当前时间(松手检测)

a++; //设置键释放后标志位加1

if(a==4)

{

TR0=1;

a=0;

}

if(a>=1)TR0=0;//关断定时器,时间停止

}

if(a==1)

{

if(key2==0)

{

while(key2==0)display(hour,minute,second);

hour++;

if(hour==24)hour=0;

}

if(key3==0)

{

while(key3==0)display(hour,minute,second);

hour--;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值