您好,欢迎来到步遥情感网。
搜索
您的当前位置:首页风扇模拟器

风扇模拟器

来源:步遥情感网
/*1. 用4个按键来实现对\"风速\"、\"风种\"、\"定时\"、\"停止\"的不同选择;

2. 用三个发光二极管来表示风速的弱、中、强三种状态;

用三个发光二极管来表示风种的正常、自然、睡眠三种状态;

用两个发光二极管来表示定时30min或100min;

3. 在停止状态时,只有按风速键才有效,按其余三键无效;

还可以加定时显示,定时时间到,自动关闭*/

#include

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

#define shuju P1

sbit key1 =P3^2; //风速

sbit key2 =P3^3; //风种

sbit key3 =P3^4; //定时

sbit key4 =P3^5; // 停止

sbit ruo =P1^0; //弱风

sbit zhong =P1^1; //中风

sbit qiang =P1^2; //强风

sbit zhengchang =P1^3; //正常

sbit ziran =P1^4; //自然

sbit shuimian =P1^5; //睡眠

sbit three =P1^6; //30分钟定时

//sbit yibai =P1^7; //100分钟定时

sbit dianji =P1^7; //100分钟定时

sbit wela=P2^7; //数码管位选锁存端

sbit dula=P2^6; //数码管段选锁存端

sbit LED7=P1^7; //定义LED端口

//********定义变量********************

uchar tt; // 计时标量每50ms加1

uchar a; //

uchar b; //

uchar c; //

uchar d; //

uchar e;

uchar pp;

uchar aa;

uchar flag;

uchar flag1;

//*******定时器初始化*******

void Init_Timer0(void)

{

TMOD |= 0x01; //使用模式1,16位定时器,使用\"|\"符号可以在使用多个定时器时不受影响

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1; //总中断打开

ET0=1; //定时器中断打开

}

void Init_Timer1(void)

{

TMOD |= 0x10; //使用模式1,16位定时器,使用\"|\"符号可以在使用多个定时器时不受影响

TH1=(65535-50000)/256; 数一直到65535溢出

//给定初值,这里使用定时器最大值从0开始计

TL1=(65535-50000)%256;

EA=1; //总中断打开

ET1=1; //定时器中断打开

}

//**********延时函数***************

void delayus(uchar t)

{

while(--t);

}

//**********延时函数***************

void delay(uchar t) //大致延时1mS

{

while(t--)

{

delayus(235);

delayus(235);

}

}

//*******按键检测**********************

void key(void)

{

if(key1==0)

{

delay(15);

if(key1==0) //按键消抖

{

flag=0;

a++;

while(key1==0);

}

}

if(key2==0)

{

delay(15);

if(key2==0) //按键消抖

{

if(flag==0)

{

b++;

}

else

{

b=0;

}

while(key2==0);

}

}

if(key3==0)

{

delay(15);

if(key3==0) //按键消抖

{

if(flag==0)

{

c=1;

flag1=1;

}

else

{

c=0;

}

while(key3==0);

}

}

if(key4==0)

{

delay(15);

if(key4==0) //按键消抖

{

shuju=0xff;

a=0;

b=0;

c=0;

flag=1; //标志位设置

TR1=0;

while(key4==0);

}

}

}

void display(void)

{

if(a==1)

{

TR1=1;

aa=20;

ruo=0;

zhong=1;

qiang=1;

}

else if(a==2)

{

TR1=1;

aa=5;

ruo=1;

zhong=0;

qiang=1;

}

else if(a==3)

{

TR1=1;

aa=1;

ruo=1;

zhong=1;

qiang=0;

}

else if(a>=4)

{

a=1;

}

if(b==1)

{

zhengchang=0;

ziran=1;

shuimian=1;

}

else if(b==2)

{

zhengchang=1;

ziran=0;

shuimian=1;

}

else if(b==3)

{

zhengchang=1;

ziran=1;

shuimian=0;

}

else if(b>=4)

{

b=1;

}

if(c==1)

{

TR0=0;

TR0=1;

three=0;

if(d==0)

{

TR0=0;

TR1=0;

d=3;

shuju=0xff;

a=0;

b=0;

c=0;

flag=1; //标志位设置

}

}

}

void main(void)

{

a=0;

b=0;

c=0;

d=3;

e=5;

aa=0;

flag=1;

flag1=0;

shuju=0xff;

Init_Timer0();

Init_Timer1();

while(1)

{

key();

display();

}

}

//******************定时器中断****************

void time0() interrupt 1

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

tt++;

if(tt==20) // 1秒到

{

tt=0;

d--;

}

}

void time1() interrupt 3

{

TH1=(65535-50000)/256;

TL1=(65535-50000)%256;

pp++;

if(pp>=aa) // 1秒到

{

pp=0;

// 清零

LED7=~LED7;

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务