|
有沒(méi)有大神幫忙看看,為什么風(fēng)扇轉(zhuǎn)速不變啊
設(shè)計(jì)內(nèi)容:1、3個(gè)獨(dú)立按鍵分別控制“自然風(fēng)”、“睡眠風(fēng)”、“常風(fēng)”,(三者的區(qū)別是直流電機(jī)的停歇時(shí)間不同),并在數(shù)顯管上顯示出區(qū)別
2、每種類型風(fēng)可以根據(jù)按下獨(dú)立按鍵次數(shù)分為4個(gè)檔的風(fēng)力調(diào)節(jié)。
3、設(shè)計(jì)風(fēng)扇的過(guò)熱保護(hù),用繼電器實(shí)現(xiàn)。即當(dāng)風(fēng)扇運(yùn)行一段時(shí)間后,暫停10秒。
4、其他創(chuàng)新內(nèi)容(如報(bào)警提示)
單片機(jī)源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit EA1=P1^4;
sbit motor_r=P1^5;
sbit motor_l=P1^6;
sbit LM298_State=P3^3;
sbit LED_D1=P3^2;
sbit LED_D2=P3^1;
sbit LED_D3=P3^0;
sbit key0=P3^4;
sbit key1=P3^5;
sbit key2=P3^6;
sbit key3=P3^7;
sbit BEEP=P1^3;
bit Flag_Time=0,Flag_Motor_Start=1;
uchar Sec=0,Min=0;
uint Sec_Timer0=0;
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0-9
//PWMμç»úμ÷Ëù3õê¼Öμ
#define PWM 10
uchar speed_set=1;
uchar Fan_Mode=0;
//uchar Time_Set=1;
bit flag_1s=0;
void delay_ms(uint ms)
{
uint a,b;
for(a=ms;a>0;a--)
for(b=125;b>0;b--);
}
void time_init()
{
TMOD=0x01;
EA=1;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;
TR0=1;
}
void Clear()
{
P2 = 0Xff;
P0 = 0X00;
}
void dispaly(uchar Min)
{
Clear();
P2=0xfd;
P0=table[Min%10]
delay_ms(1);
Clear();
P2=0xfe;
P0=table[Min/10];
delay_ms(1);
}
uchar speed_Num=0;
void key_scan()
{
if(key0==0)
{
delay_ms(10);
if(key0==0)
{
speed_Num++;
if(speed_Num>3)
{
speed_Num=0;
}
switch(speed_Num)
{
case 0:speed_set=2;break;
case 1:speed_set=5;break;
case 2:speed_set=7;break;
case 3:speed_set=10;break;
default:break;
}
}
while(!key0)
{
dispaly(speed_Num+1);
}
}
if(key1==0)
{
delay_ms(10);
if(key1==0)
{
Fan_Mode=0;
switch(Fan_Mode)
{
case 0:LED_D1=0;LED_D2=1;LED_D3=1;break;
case 1:LED_D1=1;LED_D2=0;LED_D3=1;break;
case 2:LED_D1=1;LED_D2=1;LED_D3=0;break;
default:break;
}
Sec_Timer0=0;
}
while(!key1)
{
dispaly(speed_Num+1);
}
}
if(key2==0) //ê±¼ä¼ó
{
delay_ms(10);
if(key2==0)
{
Fan_Mode=1;
switch(Fan_Mode)
{
case 0:LED_D1=0;LED_D2=1;LED_D3=1;break;
case 1:LED_D1=1;LED_D2=0;LED_D3=1;break;
case 2:LED_D1=1;LED_D2=1;LED_D3=0;break;
default:break;
}
Sec_Timer0=0;
}
while(!key2)
{
dispaly(speed_Num+1);
}
}
if(key3==0) // ê±¼ä¼õ
{
delay_ms(10);
if(key3==0)
{
Fan_Mode=2;
switch(Fan_Mode)
{
case 0:LED_D1=0;LED_D2=1;LED_D3=1;break;
case 1:LED_D1=1;LED_D2=0;LED_D3=1;break;
case 2:LED_D1=1;LED_D2=1;LED_D3=0;break;
default:break;
}
Sec_Timer0=0;
}
while(!key3)
{
dispaly(speed_Num+1);
}
}
}
void main()
{
motor_r=0;
motor_l=1;
EA1=0;
time_init();
LED_D1=0;LED_D2=1;LED_D3=1;
while(1)
{
key_scan();
dispaly(speed_Num+1);
}
}void time0()interrupt 1
{
static uchar count1=0;
static uint count2=0;
TH0=(65536-1000)/256; //¶¨ê±1ms
TL0=(65536-1000)%256;
if(Flag_Motor_Start)
{
count1++;
if(count1>PWM) //ÖüÆúêÇ10ms
count1=0;
if(count1<=speed_set) //μç»ú1 PWMμ÷Ëù
EA1=1;
else
EA1=0;
}
else
{
EA1=0;
}
count2++;
if(count2>=1000)
{
count2=0;
Sec++;
if(Sec==60)
{
Flag_Motor_Start=0;
LM298_State=0;
EA1=0;
motor_r=0;
motor_l=0;
BEEP=0;
// TR0=0;
}
if(Sec==70)
{
Sec=0;
Flag_Motor_Start=1;
LM298_State=1;
motor_r=0;
motor_l=1;
EA1=1;
BEEP=1;
}
Sec_Timer0++;
if(Fan_Mode==0)
{
if(Sec_Timer0>100)
Sec_Timer0=0;
Flag_Motor_Start=1;
}
else if(Fan_Mode==1)
{
if(Sec_Timer0<=4)
Flag_Motor_Start=1;
else
Flag_Motor_Start=0;
if(Sec_Timer0>8)
Sec_Timer0=0;
}
else if(Fan_Mode==2)
{
if(Sec_Timer0<=8)
Flag_Motor_Start=1;
else
Flag_Motor_Start=0;
if(Sec_Timer0>16)
Sec_Timer0=0;
}
else
{}
}
}
|
|