基于STC89c52RC单片机的智能风扇设计 下载本文

光电信息协会电子设计竞赛 钟培文小组

附录1:源程序

#include

#define KeyPort P1//按键扫描 #define CYCLE 10 #define uint unsigned int #define uchar unsigned char sbit PWM = P3^7; //定义pwm端口 sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit DSPORT=P3^6; sbit spk=P3^5; sbit lcden=P2^6; sbit lcdrs=P2^7;

sbit IR=P3^2; //红外接口

/* 变量声明区 */

uchar PWM_ON; //定义高电平时间 uchar num,num2,key,beep_time,time3; uint time1,time2;

//tim是定时的时间,单位秒,为60的倍数 uchar timing_flag=0;

uint tim=0; //定时时间 bit run_flag,r_flag,timing_run,timing_on,timing_r=1; bit mode2_flag=0,mode3_flag=0,beep_on; bit p;

uchar i=0,j=0,a;

//启动标志

//定时器1计时

//蜂鸣器 //1602

//速度1 //速度2 //速度3 //正常 //自然 //睡眠

//pwm开关

17

光电信息协会电子设计竞赛 钟培文小组

//速度和模式切换标志

unsigned char irtime; //红外用全局变量 bit irpro_ok,irok; unsigned char IRcord[4]; unsigned char irdata[33];

uchar code table_1[]=%uchar code table_21[]=%uchar code table_22[]=\

/* 变量声明区 */

/* 函数声明区 void Delayus(uint t); void Delayms(uint t); void Init_timer(void); void Init_all(void); void run(void); void start(void); void stop(void); void change_speed(void); void change_mode(void); void led(uchar i,uchar j); void fan_normal(void); void fan_natural(void); void fan_sleep(void); void write_com(uchar com); void write_data(uchar Data); void Init_1602(void); void Timing(void); void display2(void);

void write_string(unsigned char x,unsigned char y,unsigned char *s) ; void write_char(unsigned char x,unsigned char y,unsigned char Data) ;

//us延迟 //定时器初始化

*/

unsigned char KeyScan(void); //键盘扫描

18

光电信息协会电子设计竞赛 钟培文小组

void change_display2(void); void Ir_work(void); void Ircordpro(void); void beep();

/* 函数声明区

void main (void) { Init_all(); while(1) {

key=KeyScan();

if(irok) //如果接收好了进行红外处理 { Ircordpro(); irok=0; }

if(irpro_ok) //如果处理好后进行工作处理,如按对应的按//键后显示对应的数字等 { Ir_work(); } switch(key) {

case 1: run_flag=1;beep();if(i==3)i=0;i++;start();break;

case 2: beep();if(j==3)j=0;if(run_flag)++j;mode2_flag=0;mode3_flag=0;break; case 3: beep();if(run_flag)stop();break; case 4: beep();if(run_flag)timing_flag++;break;

case 5: beep();if(run_flag){timing_run=~timing_run;timing_on=~timing_on;} }

*/

19

光电信息协会电子设计竞赛 钟培文小组

if(timing_flag) Timing(); run();

change_display2(); if(time2==0 && timing_on) stop(); } }

void Init_all(void) {

PWM_ON=0; Init_timer(); Init_1602(); display2(); }

void start(void) {

if(run_flag==1 && r_flag==0) {

PWM_ON=2; fan_normal(); j=1; i=1; led(0,1); r_flag=1; p=1; } }

void run(void)

led(4,4); //关闭所有led

//全局初始化

20