winnie 发表于 2009-4-26 12:40:41

一贴空调程序

结构体data把温度和时间这两个最基本的量组织起来,传递给不同的驱动模块,
在模块内部根据这些量的变化,调整io_buf/*I/O口刷新缓存*/
最后在io_send_task(io_buf);/*I/O口驱动*/中刷新I/O口;
这里只给出了制冷模式驱动;不涉及硬件部份

/********************************************************************
主功能函 数 名:
功    能:全局变量
说    明
入口参数:
返 回 值:
设    计:FANZENGTING         日    期:2002-11-25
修    改:                      日    期:
***********************************************************************/
/*------------------------------------*/
/* 定义IO口 */
/*------------------------------------*/
#define NPG_IORA0
#define ROOM_IORA1
#define STF_IORA2
#define WFJ_IORA3
#define SCL_164RA4
#define SDA_164RA5
#define MOTOER_IO RB0
#define THREE_IO RB1
/*------------------------------------*/
#define KEY_IO         RB2
#define SHORT_IO RB3
#define FLZ_IO         RB4
#define ONE_IORB5
#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_IORC6
/*------------------------------------*/
/*------------------------------------*/
/* 定义全局标志 */
/*------------------------------------*/
/********************************************************************/
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 intbed_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 intmotoer_on_time;/*压缩机开时间*/
unsigned intmotoer_off_time;/*压缩机关时间*/
unsigned intsave_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_data0x0100/*高风开信号*/
#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_data0xfeff/*超低风关信号*/
#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
/******************************************************************/
#definemotoer_on      in_data.save_io_buf=in_data.save_io_buf|motoer_on_data
#definemotoer_off   in_data.save_io_buf=in_data.save_io_buf&motoer_off_data
#defineoutfan_on      in_data.save_io_buf=in_data.save_io_buf|outfan_on_data
#defineoutfan_off   in_data.save_io_buf=in_data.save_io_buf&outfan_off_data
#definestf_on         in_data.save_io_buf=in_data.save_io_buf|stf_on_data
#definestf_off      in_data.save_io_buf=in_data.save_io_buf&stf_off_data
#definefsd_on         in_data.save_io_buf=in_data.save_io_buf|fsd_on_data
#definefsd_off      in_data.save_io_buf=in_data.save_io_buf&fsd_off_data
#definegzbf_on      in_data.save_io_buf=in_data.save_io_buf|gzbf_on_data
#definegzbf_off       in_data.save_io_buf=in_data.save_io_buf&gzbf_off_data
#definefan_onin_data.save_io_buf=in_data.save_io_buf|fan_on_data
#definefan_off in_data.save_io_buf=in_data.save_io_buf&fan_off_data
#definehight_fan_on   in_data.save_io_buf=in_data.save_io_buf|hightfan_on_data
#definehight_fan_offin_data.save_io_buf=in_data.save_io_buf&hightfan_off_data
#definemid_fan_on in_data.save_io_buf=in_data.save_io_buf|midfan_on_data
#definemid_fan_off in_data.save_io_buf=in_data.save_io_buf&midfan_off_data
#definelow_fan_on   in_data.save_io_buf=in_data.save_io_buf|lowfan_on_data
#definelow_fan_off in_data.save_io_buf=in_data.save_io_buf&lowfan_off_data
#definehight_on       in_data.save_io_buf=in_data.save_io_buf|hight_on_data
#definehight_off      in_data.save_io_buf=in_data.save_io_buf&hight_off_data
#definelow_on       in_data.save_io_buf=in_data.save_io_buf|low_on_data
#definelow_off      in_data.save_io_buf=in_data.save_io_buf&low_off_data
#definelow_low_on       in_data.save_io_buf=in_data.save_io_buf|low_low_on_data
#definelow_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 voidswing_task( );
extern unsigned char temp_test_task( );
extern voiddisplay( );
extern unsigned charbed_task( );
/***************************************************/
voidpg_task( )
{
return;
}
/****************************************************/
voidbuzzer_task( )
{
return;
}
/****************************************************/
voidtest_task( )
{
return;
}
/****************************************************/
voiderr_task( )
{
return;
}
/****************************************************/
voidio_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口驱动*/
}
}
/****************************************************/
页: [1]
查看完整版本: 一贴空调程序