数字钟C语言源程序.docx
- 文档编号:4832495
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:6
- 大小:15.19KB
数字钟C语言源程序.docx
《数字钟C语言源程序.docx》由会员分享,可在线阅读,更多相关《数字钟C语言源程序.docx(6页珍藏版)》请在冰豆网上搜索。
数字钟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;
}
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 语言 源程序