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) }下载本文