
风扇模拟器.docx
5页/*1.用4个按键来实现对”风速”、"风种”、"定时”、"停止"的不同选择;2. 用三个发光二极管来表示风速的弱、中、强三种状态;用三个发光二极管来表示风种的正常、自然、睡眠三种状态; 用两个发光二极管来表示定时30min或lOOmin;3. 在停止状态时,只有按风速键才有效,按其余三键无效; 还可以加定时显示,定时时间到,自动关闭*/#includevreg52.h> #includevmath.h> #includevstdio.h> #includevintrins.h>#define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define shuju Pl sbit keyl =P3A2; 〃风速sbit key2 =卩3人3; 〃风种sbit key3 =卩3人4; 〃定时sbit key4 =卩3人5; // 停止sbit ruo =P1A0; 〃弱风sbit zhong =卩1人1; 〃中风sbit qiang =PM2; 〃强风sbit zhengchang =卩1人3; 〃正常sbit ziran =PM4; 〃自然sbit shuimian =PM5; 〃睡眠sbit three =卩1人6; //30分钟定时//sbit yibai =PM7; //100 分钟定时sbit dianji =PM7; //100 分钟定时sbit wela=P2A7; 〃数码管位选锁存端sbit dula=P2A6; 〃数码管段选锁存端sbit LED7=PM7; 〃定义 LED 端口»「I、- I I - ^1* ^1* ^1* ^1* ^1* ^1* ^1* ^1* ^1* ^1* ^1* ^1* ^1* ^1* ^1*X I lituchar tt; //计时标量每50ms加1uchar a; //uchar b; //uchar c; //uchar d; //uchar e;uchar pp;uchar aa;uchar flag;uchar flag1;void Init_TimerO(void)TMOD 1= 0x01; 〃使用模式1, 16位定时器,使用"I"符号可以在使用多个定时器时不受影响TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1; 〃总中断打开ET0=1; 〃定时器中断打开}void Init_Timer1(void){TMOD |= 0x10; 〃使用模式1, 16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH1=(65535-50000)/256; 〃给定初值,这里使用定时器最大值从0开始计数一直到65535溢出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=Oxff;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=O; ziran=1; shuimian=1;}else if(b==2){ zhengchang=1; ziran=0;shuimian=l;}else if(b==3){ zhengchang=1; ziran=1; shuimian=0;}else if(b>=4){b=1;}if(c==1){TRO=O;TR0=1;three=0;if(d==0){TR0=0;TR1=0; d=3; shuju=Oxff;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_TimerO();Init_Timer1();while(1)key();display。
}}〃******************定时器中断****************void timeO() interrupt 1{TH0=(65535-50000)/256;TL0=(65535-50000)%256;tt++;if(tt==20) // 1 秒到{tt=0;d--;}}void timel() interrupt 3{TH1=(65535-50000)/256;TL1=(65535-50000)%256;PP++;if(pp>=aa) // 1 秒到{pp=0;//清零LED7=〜LED7;。
