8脚单片机闲置着也蛋疼,索性PWM输出控制直流电扇
/************************************
系统:STC15F104E 4KB FLASH+1KB EEPROM
**************************************/
#include <AT89X52.H>
#define OUT P3_3 //PWM 500HZ
#define LED0 P3_2 // 系统指示
#define BEEP P3_4 //蜂鸣器
#define K1 P3_0
#define K2 P3_1
//#define GND P0_0
#define PWM_SUM 100
#define TH0_TEMP 0xef
#define TL0_TEMP 0xef
unsigned char pwm_vule,pwm_time;
/************************************************
****************************************************/
void sys_int(void)
{
TMOD=0x02;//定时器0,,8位定时
TH0=TH0_TEMP;
TL0=TL0_TEMP;
ET0=1;
EA=1;
TR0=1;
//GND=0;
pwm_vule=100;
pwm_time=0;
}
/************************************************
****************************************************/
void timer0(void) interrupt 1
{
//TH0=TH0_TEMP; // 0.02ms定时中断
//TL0=TL0_TEMP;
static int t300ms,t2000ms,t_led200ms; //按键定时,系统显示定时
if(pwm_time++> WM_SUM ) //pwm定时
{
pwm_time=0;
}
if(t2000ms++>(pwm_vule*500) )
{
LED0=~LED0;//转速指示灯
t2000ms=0;
}
if(t_led200ms++>15000)
{
BEEP=1;
t_led200ms=0;
}
if( t300ms++>25000) //定时按键
{
t300ms=0;
if((0==K1)&& (pwm_vule< WM_SUM))
{
t_led200ms=0;
BEEP=0;//按键音
pwm_vule+=10;
}
else if((0==K2)&& (pwm_vule>0))
{
t_led200ms=0;
BEEP=0;//按键音
pwm_vule-=10;
}
}
if(pwm_time>=pwm_vule) //PWM输出
{
OUT=0;
}
else
{
OUT=1; //快
}
}
main()
{
sys_int();//初始化
while(1)
{
}
} |