多功能数字钟程序.docx

上传人:b****5 文档编号:11828789 上传时间:2023-04-03 格式:DOCX 页数:16 大小:19.98KB
下载 相关 举报
多功能数字钟程序.docx_第1页
第1页 / 共16页
多功能数字钟程序.docx_第2页
第2页 / 共16页
多功能数字钟程序.docx_第3页
第3页 / 共16页
多功能数字钟程序.docx_第4页
第4页 / 共16页
多功能数字钟程序.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

多功能数字钟程序.docx

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

多功能数字钟程序.docx

多功能数字钟程序

多功能数字钟程序

功能:

1、可显示日期、星期、时、分、秒,进入不同的模式显示不同项目;

2、可调整时间,被选中的项目闪烁;

3、内含两个闹钟,可分别设置开与关,可修改闹钟时间;

4、半点、整点提示,闹钟到了响铃声;

硬件:

1、三个按键,本程序用的是矩阵键盘的其中三个,若每个按键单独接至I/O口,则程序自己改;

2、四个共阴七段数码管,接法可通过分析程序得出,也可根据自己的硬件修改程序;

3、两个led,接法也需自己分析程序得出,也可根据自己的硬件修改程序;

4、蜂鸣器或喇叭一个;

5、9013晶体管5个,作开关用;

6、电阻就不用说啦;

7、还要一款单片机;

操作说明;

假设三个键,分别命名为1、2、3。

一般状态下,显示时、分,此时摁下1键,进入调整时间状态,2、3键对选中的项目进行加、减,1键移动修改的项目,所有项目移动完,再按下1键就是确认;

一般状态下,显示时、分,此时摁下2键,进入闹钟设置状态,2、3键对选中的项目进行加、减,1键移动修改的项目,所有项目移动完,再按下1键就是确认;

一般状态下,显示时、分,此时摁下3键,修改要显示的项目;

闹钟响后,按下2键可关掉闹钟,若不管,则过两分钟后自动关掉。

#include

#include

#include

//************************************************************

#defineucharunsignedchar

#defineuintunsignedint

//*********************************************************************************

ucharcodedisp[]={0xee,0x48,0xad,0xcd,0x4b,0xc7,0xe7,0x4c,0xef,0xcf};//数码管显示0~9

ucharmonth=8,date=8,week=1,hour=8,min=8,second;//定义月、日、星期、小时、分钟、秒

ucharc1_h=12,c1_m,c2_h=6,c2_m=30;//定义闹钟1、闹钟2的时、分

ucharmode;//一般状态下数码管时间显示模式

ucharshow;//数码管时间显示模式

uintk;

bitbeep1,beep2,sound,v;//喇叭

bitc1_on,c2_on,set_time,set_clock;//闹钟开关标志、进入设置状态标志

bitl=0,r=0,s1=1,s2=1;//数码管闪烁标志

sbitP2_2=P2^2;//数码管之间的led

sbitP2_3=P2^3;//数码管之间的led

sbitP2_7=P2^7;//数码管片选端口

sbitP2_6=P2^6;//数码管片选端口

sbitP2_5=P2^5;//数码管片选端口

sbitP2_4=P2^4;//数码管片选端口

sbitP2_1=P2^1;//喇叭端口

//*******************************************************************************************

voidDelay(void)//数码管显示延时

{

uinti;

for(i=0;i<800;i++);

}

voidDelay025ms(void)

{

uchari,j,k;

for(i=1;i>0;i--)

for(j=1;j>0;j--)

for(k=16;k>0;k--);

}//延时程序

voidDelay5ms(void)

{

uchari,j,k;

for(i=5;i>0;i--)

for(j=4;j>0;j--)

for(k=124;k>0;k--);

}

//*************************************//确定按键*****************************************

voidset_table()

{ucharkey;//按键key

ucharselect;//要修改的变量

bitloose;

P1=0x0f;

switch(P1)//确定列按键

{

case0x0e:

{Delay5ms();//跳过抖动区

P1=0xf0;

switch(P1)//确定行按键

{

case0xe0:

{key=41;}break;

case0xd0:

{key=42;}break;

case0xb0:

{key=43;}break;

default:

break;

}

}break;

default:

{key=44;loose=0;}//loose==0表示之前按键松开,避免长按键重复操作

}

//************************************************//各按键对应功能**********************************

switch(key)

{case41:

{//第一个键对应功能

if(loose==0)

{

loose=1;//保证按下一次只执行一次操作

if(set_clock==1||set_time==1)//进入设置状态

{

if(set_time==1)

{

if(select>=5)//确认设置结束

{

r=0;

set_time=0;

show=0;

}

else{select++;

switch(select)

{

case2:

{l=0;r=1;}break;

case3:

{show=2;}break;

case4:

{show=3;l=1;r=0;}break;

case5:

{l=0;r=1;}break;

default:

break;

}

}

}

elseif(select==6){r=0;set_clock=0;show=0;l=0;}

else

{select++;

switch(select)

{

case2:

{l=0;r=1;}break;

case3:

{show=5;}break;

case4:

{show=6;l=1;r=0;}break;

case5:

{l=0;r=1;}break;

case6:

{show=7;}break;

default:

break;

}

}

}

else{set_time=1;select=1;show=1;l=1;r=0;}//进入时间设置

}

}break;

//*******************************************//第二个键对应功能*******************

case42:

{

if(loose==0)

{

loose=1;

if(set_clock==1||set_time==1)//表示已经进入设置状态

{

if(set_time==1)

{

switch(select)

{

case1:

{if(month==12)month=1;elsemonth++;}break;//月份设置

case2:

{

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//日期设置

{

if(date==31)date=1;

elsedate++;

}

elseif(date==30)date=1;

elsedate++;

}break;

case3:

{if(week==7)week=1;elseweek++;}//星期设置

case4:

{if(hour==23)hour=0;elsehour++;}break;//小时设置

case5:

{if(min==59)min=0;elsemin++;}break;//分钟设置

default:

break;

}

}

else

{

switch(select)

{

case1:

{if(c1_h==23)c1_h=0;elsec1_h++;}break;//闹钟1设置

case2:

{if(c1_m==59)c1_m=0;elsec1_m++;}break;

case3:

{c1_on=~c1_on;}break;//闹钟1开关设置

case4:

{if(c2_h==23)c2_h=0;elsec2_h++;}break;//闹钟2设置

case5:

{if(c2_m==23)c2_m=0;elsec2_m++;}break;

case6:

{c2_on=~c2_on;}break;//闹钟2开关设置

default:

break;

}

}

}

elseif(beep1==1||beep2==1)beep1=beep2=0;//关掉正在响的闹钟

else{set_clock=1;select=1;show=4;l=1;}//进入闹钟设置

}

}break;

//***************************************//第三个键对应功能******************************

case43:

{

if(loose==0)

{

loose=1;

if(set_clock==1||set_time==1)//进入设置状态

{

if(set_time==1)

{

switch(select)

{

case1:

{if(month==1)month=12;elsemonth--;}break;//月份设置

case2:

{

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//日期设置

{

if(date==1)date=31;elsedate--;

}

elseif(date==1)date=30;elsedate--;

}break;

case3:

{if(week==1)week=7;elseweek--;}break;//星期设置

case4:

{if(hour==0)hour=23;elsehour--;}break;//小时设置

case5:

{if(min==0)min=59;elsemin--;}break;//分钟设置

default:

break;

}

}

else

{

switch(select)

{

case1:

{if(c1_h==0)c1_h=23;elsec1_h--;}break;//闹钟1设置

case2:

{if(c1_m==0)c1_m=59;elsec1_m--;}break;

case3:

{c1_on=~c1_on;}break;//闹钟1开关设置

case4:

{if(c2_h==0)c2_h=23;elsec2_h--;}break;//闹钟2设置

case5:

{if(c2_m==0)c2_m=59;elsec2_m--;}break;

case6:

{c2_on=~c2_on;}break;//闹钟2开关设置

default:

break;

}

}

}

else

{

if(mode==3)mode=0;elsemode++;//模式选择

}

}

}break;

default:

break;

}

}

//*****************************************//定时0中断****************************

voidincsec()interrupt1

{uintj,i,x;

j++;

i++;

x++;

if(x==1226)//使被修改的项目闪烁

{x=0;

if(r==1){s2=~s2;}

else{s2=1;}

if(l==1){s1=~s1;}

else{s1=1;}

}

if(i==1843){P2_2=~P2_2;P2_3=~P2_3;}//使led闪烁

if(j==3687)

{

second++;//加1秒

P2_2=~P2_2;P2_3=~P2_3;//使led闪烁

j=0;i=0;

}

}

voidbeep()interrupt3

{

ucharmi,rui,duo;

k++;

if(k<2000)//mi响约46ms,四分之一拍

{

mi++;

if(mi==2){mi=0;P2_1=~P2_1;}

}

if(k>3000&&k<5000)

{

mi++;

if(mi==2){mi=0;P2_1=~P2_1;}

}

if(k>6000&&k<10000)

{

rui++;

if(rui==3){rui=0;P2_1=~P2_1;}

}

if(k==22000){rui=0;}

if(k>11000&&k<15000)

{

duo++;

if(duo==4){duo=0;P2_1=~P2_1;}

}

if(k==15000){k=0;duo=0;}

}

//***********************************主函数main************************************

voidmain()

{

uchara,b,c,d;

uchare,f,g,h;

ucharsec1,sec2;

ucharc1_a,c1_b,c1_c,c1_d;

ucharc2_a,c2_b,c2_c,c2_d;

ucharxx,l;

//*************************************特殊功能寄存器设置********************************************

TMOD=0x22;//定时0端口功能为定时,在工作方式二

TR0=1;TR1=0;//启动定时0,关断定时1

EA=1;ET0=1;ET1=1;//开总中断及T0中断

ES=0;EX1=0;EX0=0;//关中断

TH0=0x06;TL0=0x06;//计数器T0初始值00000110

TH1=0x88;TL1=0x88;//计数器T1初始值11101010

P2_2=0;P2_3=1;//小时与分钟之间的led

//***************************************************************************************************

while

(1)

{

set_table();//扫描按键有无按下

a=hour/10;b=hour%10;c=min/10;d=min%10;//要显示的时、分

e=month/10;f=month%10;g=date/10;h=date%10;//要显示的月、日

sec1=second/10;sec2=second%10;//要显示的秒

c1_a=c1_h/10;c1_b=c1_h%10;c1_c=c1_m/10;c1_d=c1_m%10;//要显示的闹钟1

c2_a=c2_h/10;c2_b=c2_h%10;c2_c=c2_m/10;c2_d=c2_m%10;//要显示的闹钟2

//*************数码管扫描显示*************//选择第一个数码管,高电平有效

if(s1)

{

P0=0x00;//关断段信号

P2_7=1;P2_6=0;P2_5=0;P2_4=0;

switch(show)

{

case0:

{switch(mode)//正常显示

{

case0:

P0=disp[a];break;//模式0显示时、分

case1:

P0=disp[e];break;//模式1显示月、日

case2:

P0=0x01;break;//模式2显示星期

case3:

P0=0x01;break;//模式3显示秒

default:

break;

}

}break;

case1:

P0=disp[e];break;//显示月、日

case2:

P0=0x01;break;//显示星期

case3:

P0=disp[a];break;//显示时、分

case4:

P0=disp[c1_a];break;//显示闹钟1

case5:

P0=0x01;break;//显示闹钟1的开关状态

case6:

P0=disp[c2_a];break;//显示闹钟2

case7:

P0=0x01;break;//显示闹钟2的开关状态

default:

break;

}

Delay();

//********************************//选择第二个数码管********************************************************

P0=0x00;

P2_7=0;P2_6=1;P2_5=0;P2_4=0;

switch(show)

{

case0:

{switch(mode)

{

case0:

P0=disp[b];break;

case1:

P0=disp[f];break;

case2:

P0=0x01;break;

case3:

P0=0x01;break;

default:

break;

}

}break;

case1:

P0=disp[f];break;

case2:

P0=0x01;break;

case3:

P0=disp[b];break;

case4:

P0=disp[c1_b];break;

case5:

P0=0x01;break;

case6:

P0=disp[c2_b];break;

case7:

P0=0x01;break;

default:

break;

}

Delay();

}

//*************************//选择第三个数码管*****************************************

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

当前位置:首页 > PPT模板 > 其它模板

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

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