以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx

上传人:b****5 文档编号:8049962 上传时间:2023-01-28 格式:DOCX 页数:15 大小:17.69KB
下载 相关 举报
以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx_第1页
第1页 / 共15页
以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx_第2页
第2页 / 共15页
以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx_第3页
第3页 / 共15页
以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx_第4页
第4页 / 共15页
以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx

《以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx》由会员分享,可在线阅读,更多相关《以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx(15页珍藏版)》请在冰豆网上搜索。

以作息时间控制为主的多功能任务设计淮阴工学院电气学院.docx

以作息时间控制为主的多功能任务设计淮阴工学院电气学院

#include//52单片机头文件,声明各寄存器等

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

}

}

}

}

}

}

}

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

当前位置:首页 > 经管营销 > 企业管理

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

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