51单片机制作简易电风扇定时控制器文档格式.docx

上传人:b****3 文档编号:16421064 上传时间:2022-11-23 格式:DOCX 页数:11 大小:20.05KB
下载 相关 举报
51单片机制作简易电风扇定时控制器文档格式.docx_第1页
第1页 / 共11页
51单片机制作简易电风扇定时控制器文档格式.docx_第2页
第2页 / 共11页
51单片机制作简易电风扇定时控制器文档格式.docx_第3页
第3页 / 共11页
51单片机制作简易电风扇定时控制器文档格式.docx_第4页
第4页 / 共11页
51单片机制作简易电风扇定时控制器文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

51单片机制作简易电风扇定时控制器文档格式.docx

《51单片机制作简易电风扇定时控制器文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机制作简易电风扇定时控制器文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

51单片机制作简易电风扇定时控制器文档格式.docx

电风扇简易定时控制器

创键人:

w418781840日期:

2008.7.6

系统功能:

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

函数名称:

声明区

功能描述:

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineSEGP0//数码管段选。

#defineDIGP2//数码管位选

uchardis[2];

//数码驱动组

ucharcodeTAB[]={0xC0,0xF9,0xA4,0xB0,0x99,//0-4共阳。

0x92,0x82,0xF8,0x80,0x90,0xff};

//5-9,熄灭符

ucharstart,stop,close,sum,time;

//各其本变量

ucharfliflag,cflag,zflag,x,y;

//各标志位

uintcount_T0,count_T1,c_count;

//计数变量

sbitK1=P3_;

//功能移位键

sbitK2=P3_;

//加一键和切换移位键。

sbitK3=P3_;

//减一。

sbitRLED=P2_;

//红灯,表风扇转动状态。

sbitYLED=P2_;

//黄灯,表风扇暂停状态

sbitBLED=P2_;

//蓝灯,表系统状态

sbitCLED=P2_;

//风扇控制位

sbitZLED=P2_;

//系统工作控制位

延时1MS函数

显示调用。

voiddelay1ms(ucharx)

{

uchari,j;

for(i=0;

ifor(j=0;

j《120;

j++);

}

显示函数

显示分走时,两位显示。

voiddisplay(void)

uchari,scan=1;

i《2;

i++)

{SEG=0xff;

DIG=~scan;

SEG=TAB[dis[i]];

delay1ms(5);

scan《《=1;

延时5MS函数

按键消抖调用。

voiddelay5ms(ucharx)

ucharj;

for(j=0;

jdisplay();

初始化函数

各变量初始化。

voidinit()

{fliflag=0;

//闪烁标志。

cflag=1;

//风扇状态标志。

zflag=0;

//转动标志。

x=30;

//暂存

y=10;

CLED=1;

//系统工作。

sum=0;

//移位

start=30;

//风扇转动时间

stop=10;

//暂停时间。

close=5;

//系统关闭剩余时间

count_T0=0;

//T0,T1相关

count_T1=0;

c_count=0;

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

ET0=1;

ET1=1;

TR0=1;

分离函数

分离显示十位,个位

voiddisnner(void)

{if(cflag==1)//1

{RLED=0;

YLED=1;

BLED=1;

//红灯闪烁。

time=start;

//显示转动时间。

if(cflag==2)

{RLED=1;

YLED=0;

time=stop;

if(cflag==3)

BLED=0;

time=close;

dis[0]=time/10;

dis[1]=time%10;

T0中断函数

产生1分钟。

voidtimer0(void)interrupt1

{TH0=(65536-50000)/256;

if(++count_T0==1200)//一分钟。

{count_T0=0;

if(zflag==0)//为0

{ZLED=1;

//则转动。

if(start!

=99)//转动时间为99,显示99,不切换标志。

一直转动。

start--;

//不,则倒计时。

if(start==0)

{zflag=1;

//倒时时间到。

切换标志。

cflag=2;

start=x;

//重赋值

else

{ZLED=0;

//否则暂停。

stop--;

//倒计时计数。

if(stop==0)

{cflag=1;

//时间到。

stop=y;

if(close!

=99)//系统时间为99,显示99,系统一直工作。

.

{if(++c_count==60)//对一分计数60,即一小时后。

{c_count=0;

close--;

//做一小时倒计时。

if(close==0)//时间到,系统断电。

CLED=0;

//低电平有效。

disnner();

//分离。

送显示/

T1中断服务函数

调整时间闪烁用。

voidtimer1(void)interrupt3

if(++count_T1==6)//闪烁周期30MS

fliflag=~fliflag;

//切换

if(fliflag==0)//标志有效。

if(sum==1)cflag=1;

//选用状态闪烁。

if(sum==2)cflag=2;

if(sum==3)cflag=3;

//闪烁用。

dis[0]=10;

//放熄灭符。

dis[1]=10;

else//否则,正常显示。

RLED=1;

键扫描函数

调整时间

voidscanner(void)

{if(K1==0)//为0,表有键按下。

delay5ms(100);

//延时500MS.

if(K1==0)//还按下。

刚退出。

while(K1==0)display();

//等待释放。

delay5ms

(2);

//消抖。

//退出显示状态1.

//启动T0

TR1=0;

//关闪烁

//归位。

x=start;

//暂存。

y=stop;

{//否则,有移位键按下。

TR0=0;

//时间走动停止。

TR1=1;

//开闪烁。

sum++;

//移位。

if(sum==4)

sum=1;

if(K2==0)

while(K2==0)display();

if(sum)//有移位

{if(sum==1)

start++;

if(start==61)

start=99;

if(start==100)

if(sum==2)

stop++;

if(stop==61)

stop=5;

if(sum==3)

close++;

if(close==9)

close=99;

if(close==100)

close=1;

else//没移位。

cflag++;

//则进行显示状态移位。

if(cflag==4)

if(K3==0)

while(K3==0)display();

if(sum==1)

{start--;

if(start==29)

if(start==98)

start=60;

{stop--;

if(stop==4)

stop=60;

{close--;

if(close==0)

if(close==98)

close=8;

主函数

main()

init();

while

(1)

display();

//显示

scanner();

//检测按键。

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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