数字钟C语言源程序.docx

上传人:b****6 文档编号:4832495 上传时间:2022-12-10 格式:DOCX 页数:6 大小:15.19KB
下载 相关 举报
数字钟C语言源程序.docx_第1页
第1页 / 共6页
数字钟C语言源程序.docx_第2页
第2页 / 共6页
数字钟C语言源程序.docx_第3页
第3页 / 共6页
数字钟C语言源程序.docx_第4页
第4页 / 共6页
数字钟C语言源程序.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

数字钟C语言源程序.docx

《数字钟C语言源程序.docx》由会员分享,可在线阅读,更多相关《数字钟C语言源程序.docx(6页珍藏版)》请在冰豆网上搜索。

数字钟C语言源程序.docx

数字钟C语言源程序

数字钟C语言源程序

**********************************************************************#include

#include

#defineucharunsignedchar

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

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

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

#defineint8unsignedchar

#defineint16unsignedint

sbitkey1=P3^0;//设置键

sbitkey2=P3^1;//加键

sbitkey3=P3^2;//减键

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

uchara=0,counter,hour=12,minute=0,second=0;

voiddelay(ucharx)//延时函数,约xus

{

while(x--);

}

voiddisplay(int8hour,int8minute,int8second)//动态扫描程序

{

int8hs,hg,ms,mg,ss,sg;

int8counter;

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++);

}

voidtime_int()//定时器初始化

{

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

TH0=0x4c;

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

EA=1;//开总中断

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

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

}

voidkey()

{

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--;

if(hour==-1)hour=23;

}

}

if(a==2)

{

if(key2==0)

{

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

minute++;

if(minute==60)minute=0;

}

if(key3==0)

{

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

minute--;

if(minute==-1)minute=59;

}

}

if(a==3)

{

if(key2==0)

{

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

second++;

if(second==60)second=0;

}

if(key3==0)

{

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

second--;

if(second==-1)second=59;

}

}

}

main()

{control=0x81;//8255A口和B口为输出

time_int();//定时器初始化函数

while

(1)

{

key();//调用键盘程序,一旦有键就进入设置

if(a==0||a==1||a==2||a==3||a==4)display(hour,minute,second);//始终显示当前时间

}

}

voidtime_interrupt()interrupt1//定时器0中断溢出处理函数,自动处理,无需主函数调用

{

TH0=0x4c;

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

counter++;

if(counter==20)//记20次中断恰好为1s

{

counter=0;

second++;

if(second==60)

{

second=0;

minute++;

if(minute==60)

{

minute=0;

hour++;

if(hour==24)

{

hour=0;

}

}

}

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1