光电信息协会电子设计竞赛 钟培文小组
附录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