摘
设计种智温控湿控风扇系统具灵敏温度感测湿度感测显示功系统STC89C52单片机作控制台风扇转速进行控制户设置高低温度值测温度值高低温度间时开风扇弱风档温度升高超设定温度时动切换风档温度设定温度时动关闭风扇控制状态外界温度定设高低温值保存温度传感器DS18B20部E2ROM中掉电然保存次设定值性稳定控制准确通温湿度传感器DHT11监测温度湿度超设定高湿度值时动开加热片湿湿度设定低湿度值时动开水泵加湿
关键词:STC89C51单片机STC89C52单片机温湿度传感器智控制
Abstract
This design is an intelligent temperature control and humidity control fan system with sensitive temperature sensing humidity sensing and display functions the system STC89C52 microcontroller as a control platform to control the fan speed High and low temperature values can be set by the user When the measured temperature value is between high and low temperature the weak wind shield of the fan will be opened When the temperature rises beyond the set temperature the fan will be automatically switched to the high wind shield The set high and low temperature value is saved in the internal E2ROM of the temperature sensor DS18B20
After power off the last set value can still be saved with stable performance and accurate control The temperature is monitored through the temperature and humidity sensor DHT11 When the humidity exceeds the set high humidity value the heating element is automatically opened to dehumidify when the humidity is less than the set low humidity value the water pump is automatically opened to humidify
Key words STC89C51 singlechip microcomputer STC89C52 single chip microcomputer Temperature and humidity sensor Intelligent control
目 录
摘 I
Abstract II
第1章 绪 1
第1节 智遥控感应风扇背景 1
第2节 智遥控感应风扇容 1
第3节 智遥控感应风扇创新点 2
第2章 智遥控感应风扇设计程 3
第1节 风扇硬件设计 5
第2节 风扇软件设计 9
第3章 智遥控感应风扇功测试结果 14
第1节 智遥控感应风扇功 14
第2节 智遥控感应风扇功测试结果 15
结 18
参考文献 19
致 谢 20
附 录 21
第章 绪
第1节 智遥控感应风扇背景
年然空调强制冷效果赶超电风扇着绿色生活低碳生活意识普空调高耗电量加剧温室效应破坏臭氧层等弊端低功耗低污染电风扇市场需求传统电风扇采机械方式进行控制部分手动调速功单存隐患足电风扇作降温防暑设备春夏(夏秋)交时节白天温度旧高电风扇应高转速风量感清凉晚气温降低入睡应该逐步减转速免感然风扇调节档位功必须手动换档睡着力普遍采定时器关闭做法方面定时时间长短限制般两时方面两时气温旧没降低风扇关闭睡梦中热醒起床重新开风扇增加定时器时间非常麻烦次定时次定时时间太长温度降低风扇旧继续吹风感第三方面简单定时时间关闭风扇电源单功满足气温变化风扇风速求较功率电子产品散热方面现绝数采风冷系统利风扇引起空气流动带走热量电子产品发热烧坏电子产品保持较低温度必须功率高转速风量风扇风扇噪音功率成正果低噪音减风扇转速会引起电子设备温度升两全美解决述问题设计套温控动风扇系统
系统采高精度集成温湿度传感器单片机控制显示实时温度根者设定温度动相应温度时作出风风停机动作精确度高动作准确广泛应普日常生活带极方便发展趋势根性质进行相应改进运场合温度监测控制带量济效益
第2节 智遥控感应风扇完成容
文STC89C52单片机核心通数字温度传感器外界环境温度进行数采集建立控制系统电风扇温度变化动调节档位实现温度高风力温度低风力弱性外通红外发射接收装置键实现种功启动关闭种功实现遥控户定范围设置电风扇低工作温度温度低设置温度时电风扇动关闭高温度时电风扇重新启动通DHT11温湿度传感器检测湿度湿度超设定湿度值时动开水泵(加湿)温度设定湿度值时动开加热片(湿)控制状态外界湿度定
设计容:
(1)风速设低高2档位户通键盘设定
(2)温度低限值时电风扇风速关闭
(3)温度限限间时电风扇转速缓慢
(4)温度高限值时电风扇风速全速运转
(5)室湿度高限值时电风扇运转湿
(6)室湿度低限值时电风扇运转加湿
第3节 智遥控感应风扇创新点
次智遥控感应风扇设计优点18B20温度传感器红外接收LCD1602显示系统STC89C52单片机独立式键等组成创新点示:
1 风扇监测室湿度具湿加湿功
2 者通红外遥控设置温度限
3 采PWM调速原理实现风扇速度控制
4 温度精确数点显示通LCD1602显示出
第2章 智遥控感应风扇设计程
第节 风扇硬件设计
11 STC89C52单片机简介
STC89C52美国ATMEL公司生产低电压高性CMOS8位单片机片4bytes反复擦写读程序存储器(PEROM)128 bytes机存取数存储器(RAM)器件采ATMEL公司高密度非易失性存储技术生产兼容标准MCS51指令系统片置8位中央处理器(CPU)Flash存储单元功强STC89C52单片机灵活应种控制领域
STC89C52单片机提供标准功:4K字节Flash闪速存储器128字节部RAM32IO口线两16位定时计数器5量两级中断结构全双工串行通信口片振荡器时钟电路时STC89C52单片机降0Hz静态逻辑操作支持两种软件选节电工作模式空闲方式停止CPU工作允许RAM定时计数器串行通行口中断系统继续工作掉电方式保存RAM中容振荡器停止工作禁止部件工作直硬件复位
12 DS18B20温度传感器简介
DS18B20常数字温度传感器输出数字信号具体积硬件开销低抗干扰力强精度高特点
(1)独特单线接口方式:DS18B20微处理器连接时仅需条口线实现微处理器DS18B20双通讯
(2)中需外围元件
(3)数线供电电压范围:+30~ +55 V
(4)测温范围:55 ~+125 ℃固测温分辨率05 ℃
(5)通编程实现9~12位数字读数方式
(6)户设定非易失性报警限值
(7)支持点组网功DS18B20联惟三线实现点测温
(8)负压特性电源极性接反时温度计会发热烧毁正常工作
单线(1—wire)技术:
该技术采单根信号线传输时钟传输数双传输适单机系统机够控制机设备通漏极开路三态端口连该数线允许设备发送数时释放该线设备单线通常求外接5K拉电阻样该线空闲时状态高电
机机间通讯分成三步骤:初始化单线器件识单线器件单线数传输
单线1—wire协议复位脉应答脉写0写1读0读1种信号类型实现信号中应答脉机发起指令数字节低位前
温度值℃ 数字输出(二进制) 数字输出(十六进制)
+125 0000 0111 1101 0000 07D0H
+85 0000 0101 0101 0000 0550H
+25625 0000 0001 1001 0001 0191H
+10125 0000 0000 1010 0010 00A2H
+05 0000 0000 0000 1000 0008H
0 0000 0000 0000 0000 0000H
05 1111 1111 1111 1000 FFF8H
10125 1111 1111 0110 1110 FF5EH
25625 1111 1111 0110 1111 FF6FH
55 1111 1100 1001 0000 FC90H
DS18B20直接测量温度值转化数字量提交单片机工作时必须严格遵守单总线器件工作时序
表21 部分温度值DS18B20输出数字量表
13 DHT11数字温湿度传感器介绍
DHT11数字温湿度传感器款含已校准数字信号输出温湿度复合传感器应专数字模块采集技术温湿度传感技术确保产品具极高性卓越长期稳定性传感器包括电阻式感湿元件NTC测温元件高性8位单片机相连接该产品具
品质卓越超快响应抗干扰力强性价极高等优点DHT11传感器极精确湿度校验室中进行校准校准系数程序形式存OTP存中传感器部检测信号处理程中调校准系数单线制串行接口系统集成变简易快捷超体积极低功耗成该类应中苛刻应场合佳选择产品4针单排引脚封装连接方便
14 系统总体设计
键盘输入
温湿度显示
单片机系统
电机控制模块
温湿度传感模块
图21 系统总体结构框图
15 控制装置设计原理
传统电风扇供电采220V交流电电机转速分档位通工手动调整电机转速达改变风速目改变次风力必然参操作功单样会带诸便
设计种基单片机智电风扇调速器设计该设计巧妙利红外线遥控技术单片机控制技术级调速技术温度传感技术智控制技术应家电器控制中电风扇电机转速作控制量单片机分析采集数字温度信号通控硅风扇电机进行调速达须控制便动调整风扇速度控制温湿度效果
16 温湿度传感器显示电路组成
模块更优秀DS18B20温度传感器DHT11温湿度传感器STC89C52单片机作处理器配温度显示作温度控制输出单元整系统力求结构简单功完善电路图图12示
系统工作原理:
DS18B20数字温度传感器采集现场温度测量数送入STC89C52单片机P24口单片机处理显示前温度值设定温度值限值作较高设定限值低设定限值控制电机转速进行动调整
DHT11温湿度传感器检测湿度湿度超设定湿度值时动开水泵(加湿)温度设定湿度值时动开加热片(湿)控制状态外界湿度定
图22 DS18B20温湿度原理图
图23 LCD1602原理图
17 电机调速电路
电机调速整控制装置中相重方面通控制改变三极翻出导输出端电压发生改变施加电风扇输入电压发生改变调节风扇转速实现档位风速级调速
双控硅导通条件:
(1)阳阴极间加正电压
(2)控制极阴极间加正触发电压
(3)阳极电流IA 控硅维持电流IH
电风扇风速高低设54321档档风速限定值额定电压额定功率高转速运转时求风叶圆周线速度2150mmin线速度列公式求
VπDn×103 (1)
式(1)中V扇叶圆周线速度(mmin)D扇中顶端扫出圆直径(mm)n电风扇高转速(rmin)
代入数求n5≤1555rmin取n51250 rmin:
取n1875rmin出五档位转速值:
n1875rminn2980rminn31063rminn41150 rminn51250rmin
负载电压效值
u0u1 (2)
式(2)中u1输入交流电压效值α控制角解:
(1) α50°时t0ms
(2) α4235°时t170ms
(3) α3465°时t258ms
(4) α2615°时t343ms
(5) α1765°时t430ms
述计算出控制角触发时间检测零点时求触发时间延时发脉便实现预期转速
模块电路中采零双控硅型光耦MOC3041M 集光电隔离零检测零触发等功身避免输入输出通道时控制双控硅触发缺陷 简化输出通道隔离2驱动电路结构设计控硅触发电路原理图见图13中RL电机负载工作原理单片机响应户参数设置 I O 口输出高电 反器反 送出低电光电耦合器导通 时触发双控硅 工作电路导通工作定时间负载功率
(3)
式中 P 负载功率( kW) n 定时间控硅导通正弦波数 N 定时间交流正弦波总数 U控硅电源周期全导通时应电压效值(V) I 控硅电源周期全导通时应电流效值(A)式(3) 知U I N 定值时 改变n 值控制功率输出达调节电机目
图24 电机控制原理图
18 红外遥控
红外遥控单工红外通信方式设计红外遥控采通信方式基础红外遥控设计红外通信技术着重分析红外通信基原理
红外通信利红外技术实现两点间距离保密通信信息转发般红外发射接收系统两部分组成发射系统红外辐射源进行调制发射红外信号接收系统光学装置红外探测器进行接收构成红外通信系统
红外线波长750nm1mm间电磁波频率高微波低见光种眼光线红外通信般采红外波段红外线波长075um25um间红外数协会(IRDA)成立保证厂商红外产品够获佳通信效果红外通信协议红外数通信采光波波长范围限定850900nm
红外通信基原理发送端基带二进制信号调制系列脉串信号(载
波信号)通红外发射发射红外信号常通脉宽度实现信号调制脉宽调制(PWM)通脉串间时间间隔实现信号调制脉时调制(PPM)两种方法脉时调制(PPM)红外数协会(IRDA)国际电子电工委员会(IEEE)推荐调制方式设计采脉时调制方法两脉串间时间间隔表示二进制信息数特传送仿带奇偶校验RS232通信首先产生步头然接着8位数特图14示
图25 PPM调制波形图
t1
t1
t2
t3
二进制0
二进制1
载波信号频率ƒ38kHz载波周期T2632us
载波信号频率ƒ38kHz载波周期T2632us设计单片机软件产生载波取T26us脉宽度t110T260us二进制数0脉串周期t2500us二进制数1脉串周期t31000us
普通红外遥控采面指令帧结构数帧步码址码指令码组成指令码长度8~16特传送字节遥控协议时效率偏低增加指令码长度利接收器步设计选种面字节帧结构采类似异步串行通信帧结构帧起始位(二进制数0)8数位2停止位(二进制数1)构成图15示帧传送1字节数帧帧间隔2ms帧结构含图26 数帧结构示意图
……
数帖
停止位
数位(8位)
帖间隔
起始位
停止位
址信息寻址问题高层协议解决
红外光存反射红外通信应采异步半双全双工方式发送信号会身接收工方式通信某方发送接收交进行
第二节 风扇软件设计
21 控制器软件控制
系统运行程序采C语言编写采模块化设计整体程序程序显示键盘扫描红外线接收电机控制等子程序模块组成
22 程序
程序进行初始化开始反复检测模块相关部分缓区标志果缓区置位说明相应数需处理然程序调相应处理子模块图27示
系统初始化
温湿度变化?
温湿度控制子模块
键盘输入?
键盘处理子模块
开始
红外信号?
红外接收处理模块
Y
N
Y
N
Y
N
显示子模块
图27 程序模块流程图
23 数字温度传感器模块显示子模块
开始
DS18B20初始化
启动DS18B20测温
部判断
调读子程序
显示子程序
结束
调相应控制程序
调相应键值处理程序
调写子程序
异常
正常
图28示机控制DS18B20数字温度传感器完成温度转换工作必须三步骤:初始化ROM操作指令存储器操作指令单片机系统频率12MHz
根DS18B20数字温度传感器进行初始化时序读时序写时序分编写3子程序:初始化子程序写子程序读子程序
图28 数字温度传感器模块程序流程图
DS18B20芯片功命令表:
命令 说明 协议
READ ROM 读取激光ROM64位 33H
MATCH ROM 匹配ROM 55H
SKIP ROM 跳ROM CCH
SEARCH ROM 搜索ROM F0H
ALARM SEARCH 告警搜索 ECH
WRITE SCRATCHPAD 字节写入暂存器址23 4EH
READ SCRATCHPAD 读取暂存器CRC字节 BEH
COPY SCRATCHPAD 暂存器容拷贝非易失性存储器中 48H
CONVERT T 开始温度转换 44H
RECALL E2 非易失性存储器中值召回暂存器 B8H
READ POWER SUPPLY 读电源供电方式:0寄生电源1外电源 B4H
表22 DS18B20功命令表
24 电机调速控制子模块
模块采双控硅零触发方式单片机控制双控硅通断通改变控制周期控硅导通关断交流完整全波信号数调节负载功率进达调速目
INT0信号反映工频电压零时刻外中断0中断服务程序中完成控制门开启关闭利中断服务次数控制量n进行计数判断中断次n进行减1计数果n等0保持控制电1继续开控制门n0控制电复位0关闭控制门控硅零触发脉通样控制处理控制量求实现控硅零控制达控制量控制效果实现速度调
(1)中断服务程序:执行中断服务程序时首先保护现场INT0中断标志置位禁止程序修改工作参数然开始减1计数判断否关断控硅INT0中断标志位清零原初始化数恢复现场中断返回(设1秒钟通波形数N100)
EX0中断
温度等限值限值
控制控硅
截止
中断返回
设置T0参数
启动定时
T0中断
控制控硅导通
停止T0定时
中断返回
b
(2)回路控制执行程序:回路控制执行程序务初始化数存储单元确定电机工作参数nminnmax换算成效零脉数确定中断优先级开中断保证正弦波完整工频零步中断INT0确定高级中断源a
图29电机控制模块中断响应流程图
第3章 智遥控感应风扇功测试结果
第1节 智遥控感应风扇实现功
STC89C52单片机核心通数字温度传感器外界环境温湿度进行数采集LCD1602液晶显示建立控制系统电风扇温度变化动调节档位采PWM调速原理实现温度高风力温度低风力弱性体感应传感器感应液晶会显示Y没感应会显示N具智延时关闭风扇功没感应延时30秒系统会动关闭风扇外通红外发射接收装置键实现种功启动关闭种功实现遥控户定范围设置电风扇低工作温度温度低设置温度时电风扇动关闭高温度时电风扇重新启动通DHT11温湿度传感器检测湿度湿度超设定湿度值时动开水泵(加湿)温度设定湿度值时动开加热片(湿)控制状态外界湿度定
第2节 智遥控感应风扇功测试结果
完成焊接实物调试根实物达具体设计求功进行断修调试电源接通时先测试显示装置否显示正常数字然通测试查问题出现运行效果图
结
设计完成工作
系统STC89C52单片机核心单片机完成外界环境温湿度信号采集处理显示等功
运行程序该系统特点
(1)适性强户需界面参数进行设置启动系统正常运行便满足户适合温湿度求实现适温湿度实时监控
(2)时根软件编写新功加入产品操作界面扩展性强稍加改变增加键功
系统温度控制采DS18B20数字温度传感器作感温元件控硅串接电源负载电风扇改变定周期控硅导通截止时间实现调速功设计完方便适应睡办公等场合
基STC89C52单片机设计研制电风扇智调速系统造价低具稳定性高性优越节约电等优点夜间需定时样带更方便
设计模拟检测中运行较采样太稳定功缺憾两档间界温度处理档位太少改进
课题研究程中单片机传感器定解设计智电风扇总体设计思路中芯片没学通设计中学查阅量资料尤图书馆询问老师通校园网网站查许帮助资料学起讨芯片深刻解学会运具体实践中方面进步改进完善工作学中需更加努力学理知识身掌握知识基础量书籍提高实践力专业知识做进步学研究
a
参考文献
[1] 曹巧媛单片机原理应北京:电子工业出版社20022
[2] 王伦电风扇原理维修技术[M]北京:新时代出版社1999
[3] 张毅刚新编MCS51单片机应设计哈尔滨工业学出版社200610
[4] 梁廷贵王裕琛控硅触发电路语音电路分册[M]北京:科学技术文献出版社2003
[5]陈杰黄鸿等传感器检测技术北京高等教育出版社2002 8 ~25
[6]张肇富采温度传感器电扇江苏电器1994 2
[7]胡乾斌单片微型计算机原理应武汉华中理工学出版社1997
[8]陈丽芳单片机原理控制技术南京东南学出版社2003
[9]刘迎春叶湘滨传感器原理设计应长沙国防科技学出版社2002
[10]立民单片机应技术选编北京北京航空航天学出版社2004
[11]李昔华王延川电风扇智控制模块设计渝州学学报(然科学版)2000
致谢
设计完成际首先教毕业文指导老师付兴烨老师表示真挚谢意扎实理知识传授果没谆谆教海没篇文设计思路文写作期间付兴烨老师指导帮助提中肯意见次修改期激励勇气克服心理压力完成文文稿然写作程中遇麻烦付老师厌烦帮修改提出建议里忠诚感谢 毕业设计学四年学容总结感学知识远远够需工作生活中进行学提高设计中学知识运实际中解理实践差距工作中弥补种差距
次设计中时间关系文基已完成学识限现知识限加时间仓促文中免错误改进处真诚欢迎位老师学提出宝贵意见
附 录
原理图
数字温度传感器模块显示子模块程序
#include
#define uchar unsigned char 符号字符型 宏定义 变量范围0~255
#define uint unsigned int 符号整型 宏定义 变量范围0~65535
#include
sbit dq P1^5 18b20 IO口定义
sbit hw P1^3
bit flag_lj_en 键连加
bit flag_lj_3_en 键连3次连加 加数越
uchar key_timekey_value 做连加中间变量
bit key_500ms
uint temperature
bit flag_200ms
uchar miao 30
uchar flag_en
uchar code table_num[]0123456789abcdefg
sbit rsP1^0 寄存器选择信号 H数寄存器 L指令寄存器
sbit rwP1^1 寄存器选择信号 H数寄存器 L指令寄存器
sbit e P1^2 片选信号 降触发
sbit pwm P1^4
uchar f_pwm_l 越越慢
uchar menu_1 菜单设计变量
uint t_high 300t_low 100
***********100us延时函数***12M晶振**************
void delay_100us(uchar z)
{ 12M
uchar xy
for(x0x
}
sbit hw_P32P3^2 红外遥控IO口定义
bit flag_jiema_en 0 红外解码成功标志位
uchar hw_table[4] 红外解码数缓区
***********************1ms延时函数*****************************
void delay_1ms(uint q)
{
uint ij
for(i0i
}
********************************************************************
* 名称 delay_uint()
* 功 延时
* 输入
* 输出
***********************************************************************
void delay_uint(uint q)
{
while(q)
}
********************************************************************
* 名称 write_com(uchar com)
* 功 1602命令函数
* 输入 输入命令值
* 输出
***********************************************************************
void write_com(uchar com)
{
e0
rs0
rw0
P0com
delay_uint(25)
e1
delay_uint(100)
e0
}
********************************************************************
* 名称 write_data(uchar dat)
* 功 1602写数函数
* 输入 需写入1602数
* 输出
***********************************************************************
void write_data(uchar dat)
{
e0
rs1
rw0
P0dat
delay_uint(25)
e1
delay_uint(100)
e0
}
********************************************************************
* 名称 write_string(uchar hanguchar adduchar *p)
* 功 改变液晶中某位值果第行第五字符开始显示ab cd ef 调该函数
write_string(15ab cd ef)
* 输入 行列需输入1602数
* 输出
***********************************************************************
void write_string(uchar hanguchar adduchar *p)
{
if(hang1)
write_com(0x80+add)
else
write_com(0x80+0x40+add)
while(1)
{
if(*p '\0') break
write_data(*p)
p++
}
}
***********************lcd1602显示特定字符************************
void write_zifu(uchar hanguchar adduchar date)
{
if(hang1)
write_com(0x80+add)
else
write_com(0x80+0x40+add)
write_data(date)
}
***********************lcd1602显示两位十进制数************************
void write_sfm3_18B20(uchar hanguchar adduint date)
{
if(hang1)
write_com(0x80+add)
else
write_com(0x80+0x40+add)
write_data(0x30+date10010)
write_data(0x30+date1010)
write_data('')
write_data(0x30+date10)
}
***********************lcd1602显示两位十进制数************************
void write_sfm2(uchar hanguchar adduint date)
{
if(hang1)
write_com(0x80+add)
else
write_com(0x80+0x40+add)
write_data(0x30+date1010)
write_data(0x30+date10)
}
***********************lcd1602初始化设置************************
void init_1602()
{
write_com(0x38)
write_com(0x0c)
write_com(0x06)
delay_uint(1000)
write_string(10 temp )
write_string(20H L )
write_zifu(1120xdf) 显示度
write_zifu(26 0xdf) 显示度
write_zifu(2140xdf) 显示度
}
***********************18b20初始化函数*****************************
void init_18b20()
{
bit q
dq 1 总线高
delay_uint(1) 15us
dq 0 复位脉
delay_uint(80) 750us
dq 1 总线高 等
delay_uint(10) 110us
q dq 读取18b20初始化信号
delay_uint(20) 200us
dq 1 总线高 释放总线
}
*************写18b20数***************
void write_18b20(uchar dat)
{
uchar i
for(i0i<8i++)
{ 写数低位开始
dq 0 总线低写时间隙开始
dq dat & 0x01 18b20总线写数
delay_uint(5) 60us
dq 1 释放总线
dat >> 1
}
}
*************读取18b20数***************
uchar read_18b20()
{
uchar ivalue
for(i0i<8i++)
{
dq 0 总线低读时间隙开始
value >> 1 读数低位开始
dq 1 释放总线
if(dq 1) 开始读写数
value | 0x80
delay_uint(5) 60us 读时间隙少保持60us时间
}
return value 返回数
}
*************读取温度值 读出数***************
uint read_temp()
{
uint value
uchar low 读取温度时候果中断太频繁应该中断关否会影响18b20时序
init_18b20() 初始化18b20
write_18b20(0xcc) 跳64位ROM
write_18b20(0x44) 启动次温度转换命令
delay_uint(50) 500us
init_18b20() 初始化18b20
write_18b20(0xcc) 跳64位ROM
write_18b20(0xbe) 发出读取暂存器命令
low read_18b20() 读温度低字节
value read_18b20() 读温度高字节
value << 8 温度高位左移8位
value | low 读出温度低位放value低八位中
value * 0625 转换温度值 数
return value 返回读出温度 带数
}
*************定时器0初始化程序***************
void time_init()
{
EA 1 开总中断
TMOD 0X11 定时器0定时器1工作方式1
ET0 1 开定时器0中断
TR0 1 允许定时器0定时
ET1 1 开定时器0中断
TR1 0 允许定时器0定时
}
********************独立键程序*****************
uchar key_can 键值
void key() 独立键程序
{
static uchar key_new
key_can 20 键值原
P3 | 0xf0
if(key_500ms 1) 连加
{
key_500ms 0
key_new 1
}
if((P3 & 0xf0) 0xf0) 键
{
delay_1ms(1) 键消抖动
if(((P3 & 0xf0) 0xf0) && (key_new 1))
{ 确认键
key_new 0
switch(P3 & 0xf0)
{
case 0xc0 key_can 1 break k1键值
case 0xa0 key_can 2 break K2键值
case 0x80 key_can 3 break k3键值
}
}
}
else
{
if(key_new 0)
{
key_new 1
flag_lj_en 0 关闭连加
flag_lj_3_en 0 关闭3秒
key_value 0 清零
key_time 0
}
}
}
****************键显示函数***************
void key_with()
{
if(key_can 1) 设置键
{
menu_1 ++
if(menu_1 > 3)
{
menu_1 0
}
if(menu_1 0)
{
write_com(0x0c) 关闭光标
}
}
if(menu_1 1) 设置高温
{
if(key_can 2)
{
if(flag_lj_3_en 0)
t_high ++ 键未松开动加三次
else
t_high + 10 键未松开动加三次次动加10
if(t_high > 990)
t_high 990
}
if(key_can 3)
{
if(flag_lj_3_en 0)
t_high 键未松开动减三次
else
t_high 10 键未松开动减三次次动减10
if(t_high < t_low)
t_high t_low + 1
}
write_sfm3_18B20(22t_high)
write_com(0x80+0x40+2) 光标移动秒位
write_com(0x0f) 显示光标闪烁
}
if(menu_1 2) 设置低温
{
if(key_can 2)
{
if(flag_lj_3_en 0)
t_low ++ 键未松开动加三次
else
t_low + 10 键未松开动加三次次动加10
if(t_low > t_high)
t_low t_high 1
}
if(key_can 3)
{
if(flag_lj_3_en 0)
t_low 键未松开动减三次
else
t_low 10 键未松开动加三次次动加10
if(t_low < 10)
t_low 10
}
write_sfm3_18B20(210t_low)
write_com(0x80+0x40+10) 光标移动秒位
write_com(0x0f) 显示光标闪烁
}
}
****************风扇控制函数***************
void fengshan_kz()
{
if(flag_en 1)
{
if(temperature > t_high) 风扇全开
{
TR1 1
pwm 0
}
else if((temperature < t_high) && (temperature > t_low)) 风扇缓慢
{
f_pwm_l 65
TR1 1
}
else if(temperature < t_low) 关闭风扇
{
TR1 0
pwm 1
}
}else 关闭风扇
{
TR1 0
pwm 1
}
}
***********外部中断0初始化程序****************
void init_int0() 外部中断0初始化程序
{
EX01 允许外部中断0中断
EA1 开总中断
IT0 1 外部中断0负跳变中断
}
***********红外遥控程序**************
void hongwai_dis()
{
if(flag_jiema_en 1)
{
flag_jiema_en 0
if(hw_table[2] 0x09) 设置键
{
key_can 1
}
if(hw_table[2] 0x15) 加键
{
key_can 2
}
if(hw_table[2] 0x07) 减键
{
key_can 3
}
hw_table[2] 0 数清零
}
}
****************函数***************
void main()
{
static uchar value
init_1602() 1602初始化
time_init() 初始化定时器
init_int0() 外部中断0初始化程序
while(1)
{
if(flag_200ms 1) 300ms 处理次温度程序
{
flag_200ms 0
value ++
if(value > 4)
{
value 0
if(miao 0)
{
miao 时间减1
}
if(miao 0)
flag_en 0
}
if(hw 1) 感应
{
miao 30
write_string(114Y )
flag_en 1
}
else
write_string(114N )
write_sfm2(10miao)
temperature read_temp() 先读出温度值
fengshan_kz() 风扇控制函数
write_sfm3_18B20(18temperature)
}
key() 键程序
hongwai_dis() 红外遥控程序
if(key_can < 10)
{
key_with() 设置报警温度
}
}
}
**********************红外解码中断程序***********************
void int0() interrupt 0
{
unsigned char ij
delay_100us(20) 防止干扰
if(hw_P32 0)
{ 引导码
while(hw_P32 0) 等低电完
delay_100us(20)
if(hw_P32 1) 引码结束
{
delay_100us(20) 说明高电已完 引导码已结束
for(i0i<4i++)
for(j0j<8j++)
{
while(hw_P32 0) 等完
delay_100us(5)
if(hw_P32 0) 数0时间
{ 数1时间
hw_table[i] >> 1 低位前
}
else
{
delay_100us(5) 高电时间完
hw_table[i] >> 1 低位前
hw_table[i] | 0x80 数值1
}
}
flag_jiema_en 1 红外解码成功
}
}
}
*************定时器0中断服务程序***************
void time0_int() interrupt 1
{
static uchar value
TH0 0x3c
TL0 0xb0 50ms
value ++
if(value 4 0)
{
flag_200ms 1 300ms
value 0
}
if(flag_lj_en 1) 键
{
key_time ++
if(key_time > 10) 500ms
{
key_time 0
key_500ms 1 500ms
key_value ++
if(key_value > 3)
{
key_value 10
flag_lj_3_en 1 3次15秒连加
}
}
}
}
*******************定时器1做单片机模拟PWM 调节***********************
void Timer1() interrupt 3 调定时器1
{
static uchar value_l
TH10xfe
TL10x0c 500us
if(pwm1)
{
value_l+3
if(value_l > f_pwm_l) 高电
{
value_l0
if(f_pwm_l 0)
pwm0
}
}
else
{
value_l+3
if(value_l > 100 f_pwm_l) 低电
{
value_l0
pwm1
}
}
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档