英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流
标题:
一贴空调程序
[打印本页]
作者:
winnie
时间:
2009-4-26 12:40
标题:
一贴空调程序
结构体data把温度和时间这两个最基本的量组织起来,传递给不同的驱动模块,
在模块内部根据这些量的变化,调整io_buf/*I/O口刷新缓存*/
最后在io_send_task(io_buf);/*I/O口驱动*/中刷新I/O口;
这里只给出了制冷模式驱动;不涉及硬件部份
/********************************************************************
主功能函 数 名:
功 能:全局变量
说 明
入口参数:
返 回 值:
设 计:FANZENGTING 日 期:2002-11-25
修 改: 日 期:
***********************************************************************/
/*------------------------------------*/
/* 定义IO口 */
/*------------------------------------*/
#define NPG_IO RA0
#define ROOM_IO RA1
#define STF_IO RA2
#define WFJ_IO RA3
#define SCL_164 RA4
#define SDA_164 RA5
#define MOTOER_IO RB0
#define THREE_IO RB1
/*------------------------------------*/
#define KEY_IO RB2
#define SHORT_IO RB3
#define FLZ_IO RB4
#define ONE_IO RB5
#define RF_IO RB6
#define GLJC_IO RB7
#define PGFK_IO RC0
#define BUZZER_IO RC1
/*------------------------------------*/
#define STEP1_IO RC2
#define STEP2_IO RC3
#define STEP3_IO RC4
#define STEP4_IO RC5
/*------------------------------------*/
#define NFJ_IO RC6
/*------------------------------------*/
/*------------------------------------*/
/* 定义全局标志 */
/*------------------------------------*/
/********************************************************************/
struct FLAGBYTE
{
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
};
/*******************************************************************/
struct FLAGBYTE flag1;
#define auto_mode_bit flag1.b0
#define cool_mode_bit flag1.b1
#define dar_mode_bit flag1.b2
#define fan_mode_bit flag1.b3
#define heat_mode_bit flag1.b4
#define swing_bit flag1.b5
#define bed_bit flag1.b6
#define ds_bit flag1.b7
/*******************************************************************/
struct FLAGBYTE flag2;
#define hight_fan_bit flag2.b0
#define mid_fan_bit flag2.b1
#define low_fan_bit flag2.b2
#define auto_fan_bit flag2.b3
/*******************************************************************/
struct FLAGBYTE flag3;
#define motoer_onoff_bit flag3.b0/*压机开关状态位*/
#define outfan_onoff_bit flag3.b1/*外风机开关状态位*/
#define stf_onoff_bit flag3.b2/*四通阀开关状态位*/
/******************************************************************/
struct FLAGBYTE flag4;
#define flash_bit flag4.b0/*半秒标志*/
#define test_bit flag4.b1/*自检标志*/
#define err_bit flag4.b2/*故障标志*/
#define room_err_bit flag4.b3/*室温故障标志*/
#define npg_err_bit flag4.b4/*内盘故障标志*/
#define on_off_bit flag4.b5/*开关机状态标志*/
#define ds_on_bit flag4.b6/*定时开机标志*/
#define ds_off_bit flag4.b7/*定时关机标志*/
/******************************************************************/
unsigned char io_buf,/*I/O口刷新缓存*/
disp_buf,/*显示缓存*/
display_turn,/*显示转换字*/
task_count;
unsigned int bed_count,
ad_temp;
/******************************************************************/
/*------------------------------------*/
/* 定义总信号量 */
/*------------------------------------*/
struct data0
{
unsigned char set_temp;/*设定温度*/
unsigned int room_temp;/*房间温度*/
unsigned int npg_temp;/*内盘管温度*/
unsigned char fan_buf;
unsigned int low_fan_sec;/*特低风时间*/
unsigned int low_low_fan_sec;/*超低风时间*/
unsigned char stf_on_time;/*四通阀开时间*/
unsigned char stf_off_time;/*四通阀关时间*/
unsigned int motoer_on_time;/*压缩机开时间*/
unsigned int motoer_off_time;/*压缩机关时间*/
unsigned int save_io_buf;/*总信号量*/
}data;
/******************************************************************/
#define motoer_on_data 0x0001/*压机开信号*/
#define motoer_off_data 0xfffe/*压机关信号*/
#define outfan_on_data 0x0002/*外风机开信号*/
#define outfan_off_data 0xfffd/*外风机关信号*/
#define stf_on_data 0x0004/*四痛阀开信号*/
#define stf_off_data 0xfffb/*四通阀关信号*/
#define fan_on_data 0x0008/*内风机开信号*/
#define fan_off_data 0xfff7/*内风机关信号*/
#define fsd_on_data 0x0010/*防霜冻信号*/
#define fsd_off_data 0xffef/*防霜冻结束信号*/
#define flfeng_on_data 0x0020/*防冷风信号*/
#define flfeng_off_data 0xffdf/*防冷风结束信号*/
#define gzbf_on_data 0x0040/*过载保护信号*/
#define gzbf_off_data 0xffbf/*过载保护结束信号*/
#define hx_on_data 0x0080/*开始化霜信号*/
#define hx_off_data 0xff7f/*结束化霜信号*/
#define hightfan_on_data 0x0100/*高风开信号*/
#define hightfan_off_data 0xfeff/*高风关信号*/
#define midfan_on_data 0x0200/*中风开信号*/
#define midfan_off_data 0xfdff/*中风关信号*/
#define lowfan_on_data 0x0400/*低风开信号*/
#define lowfan_off_data 0xfbff/*低风关信号*/
#define hight_on_data 0x0800/*强制高风开信号*/
#define hight_off_data 0xf7ff/*强制高风关信号*/
#define low_low_on_data 0x1000/*超低风开信号*/
#define low_low_off_data 0xfeff/*超低风关信号*/
#define low_on_data 0x2000/*特低风开信号*/
#define low_off_data 0xfdff/*特低风关信号*/
/******************************************************************
0 motoer_data
1 outfan_data
2 stf_data
3 fan_data
4 fsd_data
5 flfeng_data
6 gzbf_data
7 hx_data
8 hight_fan_data
9 mid_fan_data
10 low_fan_data
11 hight_data
12 low_low_data
13 low_data
/******************************************************************/
#define motoer_on in_data.save_io_buf=in_data.save_io_buf|motoer_on_data
#define motoer_off in_data.save_io_buf=in_data.save_io_buf&motoer_off_data
#define outfan_on in_data.save_io_buf=in_data.save_io_buf|outfan_on_data
#define outfan_off in_data.save_io_buf=in_data.save_io_buf&outfan_off_data
#define stf_on in_data.save_io_buf=in_data.save_io_buf|stf_on_data
#define stf_off in_data.save_io_buf=in_data.save_io_buf&stf_off_data
#define fsd_on in_data.save_io_buf=in_data.save_io_buf|fsd_on_data
#define fsd_off in_data.save_io_buf=in_data.save_io_buf&fsd_off_data
#define gzbf_on in_data.save_io_buf=in_data.save_io_buf|gzbf_on_data
#define gzbf_off in_data.save_io_buf=in_data.save_io_buf&gzbf_off_data
#define fan_on in_data.save_io_buf=in_data.save_io_buf|fan_on_data
#define fan_off in_data.save_io_buf=in_data.save_io_buf&fan_off_data
#define hight_fan_on in_data.save_io_buf=in_data.save_io_buf|hightfan_on_data
#define hight_fan_off in_data.save_io_buf=in_data.save_io_buf&hightfan_off_data
#define mid_fan_on in_data.save_io_buf=in_data.save_io_buf|midfan_on_data
#define mid_fan_off in_data.save_io_buf=in_data.save_io_buf&midfan_off_data
#define low_fan_on in_data.save_io_buf=in_data.save_io_buf|lowfan_on_data
#define low_fan_off in_data.save_io_buf=in_data.save_io_buf&lowfan_off_data
#define hight_on in_data.save_io_buf=in_data.save_io_buf|hight_on_data
#define hight_off in_data.save_io_buf=in_data.save_io_buf&hight_off_data
#define low_on in_data.save_io_buf=in_data.save_io_buf|low_on_data
#define low_off in_data.save_io_buf=in_data.save_io_buf&low_off_data
#define low_low_on in_data.save_io_buf=in_data.save_io_buf|low_low_on_data
#define low_low_off in_data.save_io_buf=in_data.save_io_buf&low_low_off_data
/*****************************************************************************************
主功能函 数 名:cool_mode( )
功 能:制冷模式驱动
说 明
入口参数:外部信号量
返 回 值:IO映射
设 计:FANZENGTING 日 期:2002-11-25
修 改: 日 期:
/*****************************************************************************************/
unsigned char cool_mode(in_data)
struct data0 in_data;
{
if(cool_mode_bit==0)
{
return(in_data.save_io_buf);
}
fan_on;
if((in_data.room_temp>=in_data.set_temp+1)&&
((in_data.save_io_buf&fsd_on_data)==0))
{
motoer_on;
outfan_on;
}
if((in_data.room_temp<=in_data.set_temp-1)||
((in_data.save_io_buf&fsd_on_data)==1))
{
motoer_off;
outfan_off;
}
if(in_data.npg_temp<=9)
{
fsd_on;
}
if(in_data.npg_temp>=16)
{
fsd_off;
}/*压机任务*/
/*****************************************************************************************/
if(auto_fan_bit==1)
{
hight_fan_off;
mid_fan_off;
low_fan_off;
if(in_data.room_temp<=(in_data.set_temp+1))
{
low_fan_on;
return(in_data.save_io_buf);
}
if(in_data.room_temp>(in_data.set_temp+2))
{
hight_fan_on;
return(in_data.save_io_buf);
}
mid_fan_on;
}/*内风机任务*/
return(in_data.save_io_buf);
}
/*****************************************************************************************/
/***************************************************
公司名称:
模块名称:main.c
功 能:空调驱动模块 芯片型号:MB89P935C
说 明:
程序设计:FANZENGTING
设计时间:2002.11.25
版 本 号: 20021125
****************************************************/
#include <pic.h>
#include <pic1674.h>
#include <math.h>
#include <stdio.h>
#include "rest.c"
#include "int.c"
#include "temp.c"
#include "auto.c"
#include "cool.c"
#include "dar.c"
#include "fan.c"
#include "heat.c"
#include "bed.c"
#include "swing.c"
#include "disp.c"
#include "display.c"
/***************************************************/
extern unsigned char auto_mode( );
extern unsigned char cool_mode( );
extern unsigned char dar_mode( );
extern unsigned char fan_mode( );
extern unsigned char heat_mode( );
extern void int_task( );
extern unsigned char disp_task( );
extern void swing_task( );
extern unsigned char temp_test_task( );
extern void display( );
extern unsigned char bed_task( );
/***************************************************/
void pg_task( )
{
return;
}
/****************************************************/
void buzzer_task( )
{
return;
}
/****************************************************/
void test_task( )
{
return;
}
/****************************************************/
void err_task( )
{
return;
}
/****************************************************/
void io_send_task(unsigned char io_buf)
{
return;
}
/****************************************************/
/*主函数*/
/****************************************************/
void main(void)
{
int_task( );
while(1)
{
disp_task( );
io_buf=auto_mode(data);/*自动模式*/
io_buf=cool_mode(data);/*制冷模式*/
io_buf=dar_mode(data);/*除湿模式*/
io_buf=fan_mode(data);/*通风模式*/
io_buf=heat_mode(data);/*制热模式*/
bed_task(data);/*睡眠模式*/
swing_task( );/*摆风任务*/
pg_task( );/*PG调速*/
temp_test_task( );/*温度采集*/
display( );/*显示任务*/
buzzer_task( );/*提示音任务*/
test_task( );/*测试任务*/
err_task( );/*故障处理*/
io_send_task(io_buf);/*I/O口驱动*/
}
}
/****************************************************/
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/)
Powered by Discuz! X3.2