以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx
- 文档编号:8049962
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:15
- 大小:17.69KB
以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx
《以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx》由会员分享,可在线阅读,更多相关《以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx(15页珍藏版)》请在冰豆网上搜索。
以作息时间控制为主的多功能任务设计淮阴工学院电气学院
#include
#include
#defineuintunsignedint//宏定义符号,类似于替换
#defineucharunsignedchar
sbitkey1=P3^4;//宏定义位,也即IO口定义
sbitkey2=P3^5;
sbitkey3=P3^6;
sbitkey4=P3^7;
sbitfm=P2^3;
sbitdula=P2^6;
sbitwela=P2^7;
sbitbear=P2^3;
uinti;//定义各符号
ucharaa,bb,numdu,numwe;
ucharsec1,min1,hour1,year1,mon1,day1,temp1,temp2,sec2,min2,hour2;//主功能符号定义
ucharcodetablew[]={0x71,0x6d,0x5b,0x3f,
0x6d,0x5b,0x06,
};
ucharcodetablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,//主功能数组定义
0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
0x79,0x71};
voidw1();//子函数声明
voidw2();
voidw3();
voidw4();
voiddelayms(uintxms);
voidtimer0();
voiddelay(uintz);//主功能子函数声明
voidinit();
voiddisplay(ucharhour,ucharmin,ucharsec);
voidkeyscan();
voidalarm();
voidtime1();
/*--------------------------------------
主函数
----------------------------------------*/
voidmain()
{
key1=1;
key2=1;
key3=1;
key4=1;
while
(1)
{
while(!
key1)w1();
while(!
key2)w2();
while(!
key3)w3();
while(!
key4)w4();
}
}
/*--------------------------------------
按键控制蜂鸣器过程
----------------------------------------*/
voidw1()
{
if(!
key1)
{
delayms(300);//延时防抖,松手检测
if(key1)
{
fm=!
fm;
}
}
}
/*--------------------------------------
按键控制流水灯过程
----------------------------------------*/
voidw2()
{
loop1:
P1=0xff;
if(!
key2)
{
delayms(300);
if(key2)
{
aa=0xfe;//赋初值11111110
while
(1)//大循环
{
P1=aa;
delayms(100);//延时500毫秒
aa=_crol_(aa,1);//将aa循环左移1位后再赋给aa//相应的cror是循环右移一位
if(!
key2)
{
delayms(300);
if(key2)
gotoloop1;
}
}
}
}
}
/*--------------------------------------
按键控制数码管过程
----------------------------------------*/
voidw3()
{
loop2:
wela=1;
P0=0xff;
if(!
key3)
{
delayms(300);
if(key3)
{
numdu=0;
numwe=0;
while
(1)
{
numdu++;
if(numdu==7)
numdu=1;
dula=1;//开段锁存器
P0=tablew[numdu];//送段码
dula=0;//锁存段码
wela=1;//开位锁存器
P0=tablewe[numwe];//送位码
wela=0;//锁存位码
numwe++;
if(numwe==6)
numwe=0;
delayms(5);
if(!
key3)
{
delayms(300);
if(key3)
gotoloop2;
}
}
}
}
}
/*--------------------------------------
按键控制作息时间过程
----------------------------------------*/
voidw4()
{
if(!
key4)
{
delayms(300);
if(key4)
{
init();//主功能主程序
while
(1)
{
keyscan();
alarm();
}
}
}
}
/*------------------------------------------
延时函数(用于按键,蜂鸣器,流水灯等的延时)
------------------------------------------*/
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)//i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
/*--------------------------------------
主功能相关所有子程序
----------------------------------------*/
voiddelay(uintz)//延时程序//
{
uintx,y;
for(x=0;x for(y=0;y<110;y++); } voidinit()//赋初值程序// { TMOD=0X02;//选择模式2,可自动重装载的八位计数器 TH0=6;//给TH0赋初值最大256-250=6;250与后面的3886相乘约为1s TL0=6;//给TH0赋初值自动装入初值TL=TH=6 EA=1;//开总中断 ET0=1;//开T0中断 TR0=1; hour1=15; min1=20; sec1=57; year1=11; mon1=12; day1=24; } voiddisplay(ucharhour,ucharmin,ucharsec)//显示程序// { uchars1,s2,m1,m2,h1,h2;//该段用于数码管显示要赋的值 s2=sec/10;//显示秒的第二位,即个位 s1=sec%10;//显示秒的第一位,即十位;“%”两边为整型,表示取余; m2=min/10;//下四句同 m1=min%10; h2=hour/10; h1=hour%10; dula=1;//显示小时的十位数 P0=table[h2]; dula=0; P0=0XFF;//P0初始化 wela=1; P0=0XFE;//打开第一位数码管 delay (1); dula=1;//显示小时的个位数 P0=table[h1]+0x80;//0x80显示小数点 dula=0; P0=0XFF;//P0初始化 wela=1; P0=0XFd;//打开第二位数码管 delay (1); dula=1;//显示分钟的十位数 P0=table[m2]; dula=0; P0=0XFF; wela=1; P0=0XFb; delay (1); dula=1;//显示分钟的个位数 P0=table[m1]+0x80; dula=0; P0=0XFF; wela=1; P0=0XF7; delay (1); dula=1;//显示秒的十位数 P0=table[s2]; dula=0; P0=0XFf; wela=1; P0=0Xef; delay (1); dula=1;//显示秒的个位数 P0=table[s1]; dula=0; P0=0XFF; wela=1; P0=0Xdf; delay (1); } voidkeyscan()//键盘扫描程序// { if(key1==0) { delay(10); if(key1==0) { //TR0=0; temp1++; if(temp1==4)//temp1用于记小时,分钟,秒的数码管 { temp1=0; TR0=1; } while(! key1) switch(temp2)//temp2用于记日历,闹钟,时钟三种模式 { case0: display(hour1,min1,sec1);break; case1: display(year1,mon1,day1);break; case2: display(hour2,min2,sec2);break; } } } if(key2==0) { delay(10); if(key2==0) { if(temp2==0) {TR0=0; switch(temp1) { case1: sec1++;if(sec1==60)sec1=0;break; case2: min1++;if(min1==60)min1=0;break; case3: hour1++;if(hour1==24)hour1=0;break; } while(! key2) display(hour1,min1,sec1); } if(temp2==1) {TR0=1; switch(temp1) { case1: day1++;if(day1==31)day1=1;break; case2: mon1++;if(mon1==13)mon1=1;break; case3: year1++;if(year1==100)year1=0;break; } while(! key2) display(year1,mon1,day1); } if(temp2==2) {TR0=1; switch(temp1) { case1: sec2++;if(sec2==60)sec2=0;break; case2: min2++;if(min2==60)min2=0;break; case3: hour2++;if(hour2==24)hour2=0;break; } while(! key2) display(hour2,min2,sec2); } } } if(key3==0) { delay(10); if(key3==0) { if(temp2==0) {TR0=0; switch(temp1) { case1: if(sec1==0)sec1=60;sec1--;break; case2: if(min1==0)min1=60;min1--;break; case3: if(hour1==0)hour1=24;hour1--;break; } while(! key3) display(hour1,min1,sec1); } if(temp2==1) {TR0=1; switch(temp1) { case1: if(day1==1)day1=31;day1--;break; case2: if(mon1==1)mon1=13;mon1--;break; case3: if(year1==0)year1=100;year1--;break; } while(! key3) display(year1,mon1,day1); } if(temp2==2) {TR0=1; switch(temp1) { case1: if(sec2==0)sec2=60;sec2--;break; case2: if(min2==0)min2=60;min2--;break; case3: if(hour2==0)hour2=24;hour2--;break; } while(! key3) display(hour2,min2,sec2); } } } if(key4==0) { delay(10); if(key4==0) { temp1=0; temp2++; if(temp2==3) temp2=0; while(! key4) switch(temp2) { case0: display(hour1,min1,sec1);break; case1: display(year1,mon1,day1);break; case2: display(hour2,min2,sec2);break; } } } switch(temp2) { case0: display(hour1,min1,sec1);break; case1: display(year1,mon1,day1);break; case2: display(hour2,min2,sec2);break; } } voidalarm()//蜂鸣器,流水灯程序// { uinti; if((hour1==hour2&&min1==min2&&(sec1>=sec2&&sec1 {for(i=0;i<20;i++) { bear=~bear; P1=~P1; switch(temp2) { case0: display(hour1,min1,sec1);break; case1: display(year1,mon1,day1);break; case2: display(hour2,min2,sec2);break; } delay(30); } bear=1; P1=0xff; } } /*voidmainw()//主功能主程序// { init(); while (1) { keyscan(); alarm(); } }*/ voidtime1()interrupt1//定时器程序// { uintm; m++; if(m==3686)//250与后面的3886相乘约为100000us=1s,控制1秒程序 { m=0; sec1++; if(sec1==60) { sec1=0; min1++; if(min1==60) { min1=0; hour1++; if(hour1==24) { hour1=0; day1++; if(day1==31) { day1=1; mon1++; if(mon1==13) { mon1=1; year1++; if(year1==100) year1=0; } } } } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作息 时间 控制 为主 多功能 任务 设计 淮阴 工学院 电气 学院
![提示](https://static.bdocx.com/images/bang_tan.gif)