基于单片机控制的多路定时闹钟 - 图文

发布时间 : 星期四 文章基于单片机控制的多路定时闹钟 - 图文更新完毕开始阅读

write_date(' ');

write_com(0x80+0x40+15); write_date(' '); } } } } }

void guangbo()//广播定时 {if(K4num==0)

{write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_00[i]); }

if(K4==0&&K4num==0)//判断K3首次被按下,则设置闹钟

{delay(5);//延时消抖,后同 if(K4==0) {flag1=0;

write_com(0x80+0x40+13);//第一次按下光标定位到分钟位置

while(!K4); K4num=1;

write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_0[i]);

write_sfm(12,fen1);//送去液晶显示定时的分,时

write_sfm(9,shi1);

write_com(0x0f);//光标开始闪烁 write_com(0x80+0x40+13);//显示位置回到调节处

} }

if(K2==0&&K4num==0)//K2被按下时显示定时时间

{delay(5); if(K2==0)

{write_sfm(12,fen1);//送去液晶显示定时的分,时

write_sfm(9,shi1); while(!K2);

write_sfm(12,fen);//K2松开显示当前时间

write_sfm(9,shi); } }

if(K3==0&&K4num==1)//修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时

{delay(5); if(K3==0)

{write_com(0x80+0x40+10);//光标定位到小时位置

K4num=1; while(!K3);

shi1++;//则调整定时的时加1 if(shi1==24)//若满24后将清零 shi1=0;

write_sfm(9,shi1);//每调节一次送液晶显示

write_com(0x80+0x40+10);//显示位置重新回到调节处

} }

if(K2==0&&K4num==1)//按键2按下,修改闹钟时间的分钟

{delay(5); if(K2==0)

{write_com(0x80+0x40+13);//光标定位到分钟位置

K4num=1; while(!K2);

fen1++;//则调整分加1

if(fen1==60)//若满60后将清零

fen1=0;

write_sfm(12,fen1);//每调节一次送液晶显示

write_com(0x80+0x40+13);//显示位置重新回到调节处

} }

if(K4num==1)//当设置闹钟时,K3被按下设置完成。

{if(K4==0)//判断K3按下 {delay(5); if(K4==0) {K1num=0; K4num=0; while(!K4);

write_com(0x0c);//光标停止闪烁 flag1=1;//flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值

write_sfm(12,fen);//送去液晶显示分,时

write_sfm(9,shi);

write_com(0x80+0x40+11); write_date(':');

write_com(0x80+0x40+14); write_date(' ');

write_com(0x80+0x40+15); write_date(' '); } } } }

void shangke()//上课定时 {if(K4num==0)

{write_com(0x80+0x40); for(i=0;i<9;i++) write_date(Alarm_11[i]); }

if(K4==0&&K4num==0)//判断K3首次被按下,则设置闹钟

{delay(5);//延时消抖,后同 if(K4==0) {flag1=0;

write_com(0x80+0x40+13);//第一次按下光标定位到分钟位置

while(!K4); K4num=1;

write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_1[i]);

write_sfm(12,fen2);//送去液晶显示定时的分,时

write_sfm(9,shi2);

write_com(0x0f);//光标开始闪烁

write_com(0x80+0x40+13);//显示位置回到调节处

}

}

if(K2==0&&K4num==0)//K2被按下时显示定时时间

{delay(5); if(K2==0)

{write_sfm(12,fen2);//送去液晶显示定时的分,时

write_sfm(9,shi2); while(!K2);

write_sfm(12,fen);//K2松开显示当前时间

write_sfm(9,shi); } }

if(K3==0&&K4num==1)//修改小时,判断K1键按下K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时

{delay(5);

if(K3==0)

{write_com(0x80+0x40+10);//光标定位到小时位置

K4num=1; while(!K3);

shi2++;//则调整定时的时加1 if(shi2==24)//若满24后将清零 shi2=0;

write_sfm(9,shi2);//每调节一次送液晶显示

write_com(0x80+0x40+10);//显示位置重新回到调节处

} }

if(K2==0&&K4num==1)//按键2按下,修改闹钟时间的分钟

{delay(5); if(K2==0)

{write_com(0x80+0x40+13);//光标定位到分钟位置

K4num=1; while(!K2);

fen2++;//则调整分加1

if(fen2==60)//若满60后将清零 fen2=0;

write_sfm(12,fen2);//每调节一次送液晶显示一下

write_com(0x80+0x40+13);//显示位置重新回到调节处

} }

if(K4num==1)//当设置时间或闹钟时,K3被按下设置完成。

{if(K4==0)//判断K3按下 {delay(5); if(K4==0) {K1num=0; K4num=0; while(!K4);

write_com(0x0c);//光标停止闪烁

flag1=1;//flag=1.则修改系统时间时液晶显示的系统时间值, flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值 write_sfm(12,fen);//送去液晶显示分,时

write_sfm(9,shi);

write_com(0x80+0x40+11); write_date(':');

write_com(0x80+0x40+14); write_date(' ');

write_com(0x80+0x40+15); write_date(' '); } } } }

void xiake()//下课定时 {if(K4num==0)

{write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_22[i]); }

if(K4==0&&K4num==0)//判断K3首次被按下,则设置闹钟

{delay(5);//延时消抖,后同 if(K4==0) {flag1=0;

write_com(0x80+0x40+13);//第一次按下光标定位到分钟位置

while(!K4); K4num=1;

write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_2[i]);

write_sfm(12,fen3);//送去液晶显示定时的分,时

write_sfm(9,shi3);

write_com(0x0f);//光标开始闪烁 write_com(0x80+0x40+13);//显示位置回到调节处

} }

if(K2==0&&K4num==0)//K2被按下时显示定时时间

{delay(5); if(K2==0)

{write_sfm(12,fen3);//送去液晶显示定时的分,时

write_sfm(9,shi3); while(!K2);

write_sfm(12,fen);//K2松开显示当前时间

write_sfm(9,shi); } }

if(K3==0&&K4num==1)//修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时

{delay(5); if(K3==0)

{write_com(0x80+0x40+10);//光标定位到小时位置

K4num=1; while(!K3);

shi3++;//则调整定时的时加1 if(shi3==24)//若满24后将清零 shi3=0;

write_sfm(9,shi3);//每调节一次送液晶显示

write_com(0x80+0x40+10);//显示位置重新回到调节处

} }

if(K2==0&&K4num==1)//2按下,修改闹钟时间的分钟

{delay(5); if(K2==0)

{write_com(0x80+0x40+13);//光标定位到分钟位置

K4num=1; while(!K2);

fen3++;//则调整分加1 if(fen3==60)//若满60后将清零 {fen3=0;

write_sfm(12,fen3);//每调节一次送液晶显示

write_com(0x80+0x40+13); } }

if(K4num==1)//当设置时间或闹钟时,K3被按下设置完成

{if(K4==0)//判断K3按下 {delay(5); if(K4==0) {K1num=0; K4num=0; while(!K4);

write_com(0x0c);//光标停止闪烁 flag1=1;

write_sfm(12,fen);//送去液晶显示分,时 write_sfm(9,shi); write_com(0x80+0x40+11);

write_date(':');

write_com(0x80+0x40+14); write_date(' '); write_com(0x80+0x40+15);

write_date(' '); } } } } }

void dengkong()//灯光控制 { if(K4num==0)

{write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_33[i]); }

if(K4==0&&K4num==0)//判断K3首次被按下,则设置闹钟

{delay(5);//延时消抖,后同 if(K4==0) {flag1=0;

write_com(0x80+0x40+13);//第一次按下光标定位到分钟位置

while(!K4); K4num=1;

write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_3[i]);

write_sfm(12,fen4);//送去液晶显示定时的分,时

write_sfm(9,shi4);

write_com(0x0f);//光标开始闪烁

write_com(0x80+0x40+13);//显示位置回到调节处

} }

if(K2==0&&K4num==0)//K2被按下时显示定时时间

{delay(5); if(K2==0)

{write_sfm(12,fen4);//送去液晶显示定时的分,时

write_sfm(9,shi4); while(!K2); write_sfm(12,fen);//K2松开显示当前时间

write_sfm(9,shi); } }

if(K3==0&&K4num==1);//修改小时,判断K1键按下,K3num=1,表示K3按键按下,则此时修改的是闹钟时间的小时

{delay(5); if(K3==0)

{write_com(0x80+0x40+10);//光标定位到小时位置

K4num=1; while(!K3);

shi4++;//则调整定时的时加1

if(shi4==24)//若满24后将清零 shi4=0;

write_sfm(9,shi4);//每调节一次送液晶显示一下

write_com(0x80+0x40+10);//显示位置重新回到调节处

} }

if(K2==0&&K4num==1)//按键2按下,修改闹钟时间的分钟

{delay(5); if(K2==0)

{write_com(0x80+0x40+13);//光标定位到分钟位置

K4num=1; while(!K2);

fen4++;//则调整分加1

if(fen4==60)//若满60后将清零 fen4=0;

write_sfm(12,fen4);//每调节一次送液晶显示一下

write_com(0x80+0x40+13);//显示位置重新回到调节处

} }

if(K4num==1)//当设置时间或闹钟时,K3被按下设置完成。

{if(K4==0)//判断K3按下 {delay(5); if(K4==0) {K1num=0; K4num=0; while(!K4);

write_com(0x0c);//光标停止闪烁 flag1=1;

write_sfm(12,fen);//送去液晶显示分,时 write_sfm(9,shi); write_com(0x80+0x40+11); write_date(':'); write_com(0x80+0x40+14); write_date(' '); write_com(0x80+0x40+15); write_date(' '); } } } }

void clock()//任意闹钟时间到闹钟响 {

if(((fen!=fen1)&&(fen!=fen2)&&(fen!=fen3)&&(fen!=fen4))&&(flag4==0)&&(flag5==0))//显示时间

{xianshi();}

if((fen==fen1)&&(shi==shi1)&&(flag2==1))

{

write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_00[i]);

write_sfm(12,fen1);//送去液晶显示定时的分,时

write_sfm(9,shi1);

beep=0;//此时 闹钟响起,连续三次发出哗的一声

flag5=0;

flag3=0;//置flag3=0,表示此时闹钟响起,按下K4键执行停止闹钟响闹语句

delay(100);//这些语句是为了使闹钟响起时,发出连续三次哗的声音

beep=1; delay(100); beep=0; delay(100); beep=1; delay(100); beep=0; delay(100); beep=1; delay(300); }

if((((fen==fen1)&&(shi==shi1)&&(flag2==0))||((fen-1==fen1)&&(shi==shi1)))&&(flag4==0))

{xianshi();}

if((fen==fen2)&&(shi==shi2)&&(flag2==1))

{write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_11[i]);

write_sfm(12,fen2);//送去液晶显示定时的分,时

write_sfm(9,shi2);

LED3=1; }

if((((fen==fen2)&&(shi==shi2)&&(flag2==0))||((fen-1==fen2)&&(shi==shi2)))&&(flag4==0))

{xianshi(); }

if((fen==fen3)&&(shi==shi3)&&(flag2==1))

{write_com(0x80+0x40); for(i=0;i<9;i++)

write_date(Alarm_22[i]);

write_sfm(12,fen3);//送去液晶显示定时的分,时

write_sfm(9,shi3);

beep=0;//此时 闹钟响起,连续三次发出哗的一声

flag5=0;

flag3=0;//置flag3=0,表示此时闹钟响起,按下K4键执行停止闹钟响闹语句

delay(200);//这些语句是为了使闹钟响起时,发出连续三次哗的声音

beep=1; delay(200); beep=0; delay(200); beep=1; delay(200); beep=0; delay(200); beep=1; delay(600); }

if((((fen==fen3)&&(shi==shi3)&&(flag2==0))||((fen-1==fen3)&&(shi==shi3)))&&(flag4==0))

{xianshi();}

if((fen==fen4)&&(shi==shi4)&&(flag2==1))

{

LED2=0;

write_com(0x80+0x40); for(i=0;i<15;i++) write_date(deng[i]); }

if((((fen==fen4)&&(shi==shi4)&&(flag2==0))||((fen-1==fen4)&&(shi==shi4)))&&(flag4==0))

{xianshi();}} void main()//主函数 {init();//初始化子程序 while(1)

{if(K5==0&&flag3==0)//当闹钟响起时,按下K4停止响闹,当闹钟响起时候flag3置为0

{delay(5); if(K5==0) {flag2=0; flag3=1; }

delay(300); }

if(K5==0&&LED3==1)//当闹钟响起时,按下K4停止响闹,当闹钟响起时候flag3置为0

{delay(5); if(K5==0) {flag2=0; LED3=0; }

delay(300); } if(K5==0&&flag2==1)//当闹钟响起时,按下K4停止响闹,当闹钟响起时候flag3置为0

{delay(5); if(K5==0) {flag2=0; LED2=1; }

delay(300); }

if((K5==0)&&(flag3==1)) {delay(200); K5num++; delay(100); if(K5num==5) K5num=0; }

if(K5num==0) { time(); flag4=0; }

if(K5num==1) {guangbo(); flag4=1;} if(K5num==2) {shangke(); flag4=1; }

if(K5num==3)

联系合同范文客服:xxxxx#qq.com(#替换为@)