视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
单片机空调系统
2025-09-30 23:14:52 责编:小OO
文档
/*--------------------------------------------------------------------------

DEFINE.H

定义端口,标志位,函数声明

--------------------------------------------------------------------------*/

#ifndef __DEFINE_H__

#define __DEFINE_H__

#包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include

#include

#include

/******************************************************************/

/变量声明

/******************************************************************/

extern unsigned char  irtime;//红外用全局变量

extern bit irpro_ok,irok;  红外处理标志位

e处理后的红外码,分别是 客户码,客户码,数据码,数据码反码

e个高低电平的时间数据

e计时器计时一秒的辅助标志位

e计时器记满一秒的标记位,也是向温度传感器读取温度的标志位

e空调工作控制标志位 1工作 0停止

extern unsigned char meu_on ;  //标注菜单状态(开关) 1菜单已显示 0菜单已关闭

extern unsigned char meu_lab ; //表示当前激活的菜单类型 0温度设置 1风速设置

extern unsigned char wind_speed;//风速 有123三个等级

extern unsigned char work_mode; //工作模式标志位 0制热 1制冷

extern unsigned char set_number[4]; //温度置数的标记位 第一位作为标志位,第二三四位临时储存每一位数

extern float tempset;  设定温度

extern float tempnow;  室温

#define TURE 1

#define FALSE 0

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

sbit RS = P2^4;//Pin4

sbit RW = P2^5;//Pin5

sbit E  = P2^6;//Pin6

sbit DQ = P1^3;//ds18b20 端口

#define Data P0//数据端口

/******************************************************************/

/函数声明

/******************************************************************/

void TIM0init(void);//定时器0初始化

void EX0init(void);//外部中断初始化

void Ircordpro(void);//红外信号处理

void InitLcd();//LCD初始化

void WriteCommand(unsigned char c);//LCD控制命令

void WriteData(unsigned char c);//LCD写数据(最根本的方式)

void ShowString(unsigned char x,unsigned char y,unsigned char *s); //LCD显示字符串

void ShowChar(unsigned char x,unsigned char y,unsigned char Data);//LCD显示字符

void TIM1init(void);//定时器1初始化

void Init_DS18B20(void);//温度传感器初始化

unsigned char ReadOneChar(void);//温度传感器控制

void WriteOneChar(unsigned char dat);//温度传感器控制

float ReadTemp(void);//读取当前温度

void Meu_gate(void);//按下菜单键之后判断菜单是否已经显示,若以显示则关闭菜单,若未显示则开启菜单

void Meu_move(void);//移动光标

void Meu_change_upordown(unsigned char upordown);//上下调节设定温度或风速

void Meu_change_setnumber(unsigned char number);//温度置数

void OpenorClose(void);//控制空调的开和关

void Ac_work(void);//空调工作

void Ir_work(void);//判断红外按键类型,

void delay(unsigned int i);//延时函数

void DelayUs(unsigned char us);//delay us

void DelayMs(unsigned char ms);//delay Ms

#endif

Main.c

#include

/******************************************************************/

/主函数

/******************************************************************/

unsigned char  irtime;//红外用全局变量

bit irpro_ok,irok;

u处理后的红外码,分别是 客户码,客户码,数据码,数据码反码

u个高低电平的时间数据

u计时器计时一秒的辅助标志位

u计时器记满一秒的标记位,也是向温度传感器读取温度的标志位

u空调工作控制标志位 1工作 0停止

unsigned char meu_on ;  //标注菜单状态(开关) 1菜单已显示 0菜单已关闭

unsigned char meu_lab ; //表示当前激活的菜单类型 0温度设置 1风速设置

unsigned char wind_speed;//风速 有123三个等级

unsigned char work_mode; //工作模式标志位 0制热 1制冷

unsigned char set_number[4]; //温度置数的标记位 第一位作为标志位,第二三四位临时储存每一位数

float tempset;

float tempnow;

void main(void)

 初始化外部中断

  初始化定时器0

  初始化液晶

 

 主循环

   记满一秒后读取温度

 

  

 

  如果接收好了进行红外处理

 

 

 

 

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

 

 

 

        工作

 

  

 

}

Work.c

#include

void Ir_work(void)//红外键值散转程序

{

  标注按键是调大还是调小 0为调小 1为调大

        unsigned char number;                        //标注数字按键值

  判断第三个数码值

         开机关机键

     

     

     

     

           

         菜单键

     

     

     

       

     左移菜单

     

     

     

     

     右移菜单

     

     

     

    

  

    调小-

     

     

    

     

    调大+

     

     

    

    

     

        

     

     

        

        

     

     

     

        

     

     

     

         

     

     

     

        

     

     

     

        

     

     

     

        

     

     

     

        

     

     

     

        

     

     

     

        

     

     

     

 

  处理完成标志

  }

void Ac_work(void)

{

  制热模式且设定温度大于室温

  

 

 

  

  

  

 

  制冷模式且设定温度小于室温

 

 

 

  

  

  

 

          空调完成任务

 

 

}

Meu.c

#include

void OpenorClose(void)

{

    此时处于开机状态则关机

 

  显示清屏

  

 

     此时处于关机状态则开机并初始化

 

  显示清屏

 

  默认设定温度

 

 

  默认风速

 

  

  

 

 

 

  

 

 

 

    

 

}

void Meu_gate(void)

{

 

       菜单未开启,开启菜单光标默认处在温度设定状态

 

 

 

 

 

   

  

  

  

         菜单已开启则关闭

 

       菜单在温度设定状态

 

   

   

  

   正在温度置数过程中,保护现场

  

   

   

   

   

   

   

   

   

  

 

       菜单在风速设定状态

 

   

   

 

      清楚菜单显示标志位,位下一次处理做准备

 

}

void Meu_move(void)

{

      菜单已开启,若菜单没有开启则不处理

 

       光标处于温度设置处

   

       移动光标

   

  

  

  

  

   若正在温度置数过程中,保护现场

  

   

   

   

   

   

   

   

   

  

 

      光标处于风速设定

 

        移动光标

   

  

  

  

 

}

void Meu_change_upordown(unsigned char upordown)

{

 菜单已开启,若菜单没有开启则不处理

 

  菜单处于温度设定状态

   

     

  

   

   

    

    

    

    

    

   

  

       

  

   

    

    

    

    

    

    

   

  

     判断空调工作模式

  

    

    

  

  

  

     

    

  

 

         风速设置

 

  

  

   

   

    

    

   

     

          case 2: ShowString(9,1,")) ");   break;                

       

    

   

  

  

  

   

   

    

    

   

     

          case 2: ShowString(9,1,")) ");   break;                

      

    

   

 

 

}

void Meu_change_setnumber(unsigned char number)

{

   菜单已开启且处于温度设定状态,若菜单没有开启则不处理

     开始置第一个数,先存在缓冲位

 

     最高40度最低10度

  

   

   

   

  

  

 

    开始置第二个数

 

  

  

  

 

    开始置第三个数

 

      小数位四舍五入,保持0.5为最小分度

  

   

   

  

  

  

   

   

   

    置数成功,存入设定温度

     清除缓冲位

  

  

  

  

  

  

    

    

  

  

  

      

    

  

 

}

Lcd.c

#include

/******************************************************************/

/初始化函数

/******************************************************************/

void InitLcd()

{

 DelayMs(15);

 WriteCommand(0x38); //display mode

 WriteCommand(0x38); //display mode

 WriteCommand(0x38); //display mode

 WriteCommand(0x06); //显示光标移动位置

 WriteCommand(0x0c); //显示开及光标设置

 WriteCommand(0x01); //显示清屏

}

/******************************************************************/

/写入命令函数

/******************************************************************/

void WriteCommand(unsigned char c)

{

 操作前短暂延时,保证信号稳定

}

/******************************************************************/

/写入数据函数

/******************************************************************/

void WriteData(unsigned char c)

{

 操作前短暂延时,保证信号稳定

}

/******************************************************************/

/写入字符串函数

/******************************************************************/

 void ShowString(unsigned char x,unsigned char y,unsigned char *s) 

 

 

 

 

 }

/******************************************************************/

/写入字符函数

/******************************************************************/

  void ShowChar(unsigned char x,unsigned char y,unsigned char Data) 

 

 

 }

WenDu.c

#include

/******************************************************************/

/定时器1中断服务函数

/******************************************************************/

void tim1_temp(void) interrupt 3 using 0//定时器1中断服务函数 温度检测间隔

{

if (count==20)

 

  标志位有效

 

}

/******************************************************************/

/定时器1初始化

/******************************************************************/

void TIM1init(void)//定时器1初始化

{

 定时器设置

}

/******************************************************************/

/温度传感器初始化

/******************************************************************/

void Init_DS18B20(void)

{

 复位

 稍做延时

 单片机将DQ拉低

 精确延时 大于 480us

 拉高总线

 稍做延时后 如果x=0则初始化成功 x=1则初始化失败

}

/******************************************************************/

/温度传感器 读一个字节

/******************************************************************/

unsigned char ReadOneChar(void)

{

  给脉冲信号

 

  给脉冲信号

 

 

 

}

/******************************************************************/

/温度传感器 写一个字节

/******************************************************************/

void WriteOneChar(unsigned char dat)

{

 

 

 

 

 

}

float ReadTemp(void)

{

 跳过读序号列号的操作

 启动温度转换

 跳过读序号列号的操作 

 读取温度寄存器等(共可读9个寄存器) 前两个就是温度

 低位

 高位

 小数近似处理

   

 

   

return(x);

}

HongWai.c

#include

/******************************************************************/

/定时器0中断服务函数

/******************************************************************/

void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数

{

 用于计数2个下降沿之间的时间

}

/******************************************************************/

/外部中断0函数

/******************************************************************/

void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数

{

 接收红外信号处理

 是否开始处理标志位

 {

 引导码 TC9012的头码,9ms+4.5ms

   存储每个电平的持续时间,用于以后判断是0还是1

  

  

   

   

   

   

   

  

 

}

/******************************************************************/

/定时器0初始化

/******************************************************************/

void TIM0init(void)//定时器0初始化

{

  TMOD=0x12;//定时器0工作方式2,TH0是重装值,TL0是初值

  TH0=0x00; //重载值

  TL0=0x00; //初始化值

 开中断

}

/******************************************************************/

/外部中断初始化

/******************************************************************/

void EX0init(void)

{

 指定外部中断0下降沿触发,INT0 (P3.2)

 使能外部中断

 开总中断

}

/******************************************************************/

/红外键值处理

/******************************************************************/

/******************************************************************/

/红外解码函数处理

/******************************************************************/

void Ircordpro(void)//红外码值处理函数

  unsigned char i, j, k;

  unsigned char cord,value;

  k=1;

 处理4个字节

 处理1个字节8位

 大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差

 

  

 

  

 

  

  

     value=0;     

 处理完毕标志位置1

}

Delay.c

#include

/******************************************************************/

/延时函数

/******************************************************************/

void delay(unsigned int i)//延时函数

{

 while(i--);

}

/******************************************************************/

/微秒延时函数

/******************************************************************/

void DelayUs(unsigned char us)//delay us

{

}

/******************************************************************/

/毫秒函数声明

/******************************************************************/

void DelayMs(unsigned char ms)//delay Ms

{

 while(--ms)

}下载本文

显示全文
专题