家用报警器——驱动程序毕业论文(编辑修改稿)内容摘要:

烟雾传感器的简介 图 35为烟雾传感器模块实物。 这类传感器在干净的气体 中电导率是比较低的。 这种烟雾传感器可以检测很多可燃气体和有毒气体和烟雾,非常合适一些厨房、工厂等一些需要注意气体泄漏的场所。 10 图 35 烟雾传感器模块 图 36传感器模块的引脚图。 图 36 烟雾传感器引脚图 GSM 模块( TC35i)概述 这个模块能够工作在两个不同的网络中,并且可以发送信息。 工作的电压范围为 ,电流耗损则分三个种情况。 电话卡工作的电压是 3V/,模块的串口可以使用 AT 命令实现数据和指令的传输,不但支持 Text 格式的短信息传送,还支持中文的短消息传输, 并且可以通过 AT 指令拨打电话和挂电话。 原理图绘制与 PCB 线路板的制作 使用 Altium Designer 绘制原理图 学会使用 Altium Designer,如图 38为本次家用报警器设计的原理图: 11 图 38 原理图 生成 PCB 图并排版 新建一个 PCB文件并保存为家用报警器,然后: Design—— Update Schematics in 家用报警器 .PRJPCB—— Yes—— Create Engineering Order —— Report Differences,结果如图 39 所示: 图 39 家用报警器 PCB 制作板 制作流程为:打印 —— 过机 —— 腐蚀 —— 打孔。 元件的安装与焊接 大体顺序,要从小到大,从低到高。 12 4 系统软件设计 系统编程软件 Keil uVision4 简介 Keil uVision4 是一款编程软件,它能够编写 C 语言代码,供开发者对程序的编写、调试运用,操作简单实用。 使用说明: ( 1)新创建一个文件夹命名为“测试” ( 2)点击 桌面上的 Keil uVision4 图标 ; ( 3)点击“工程” —— “新建工程”; ( 4)将文件放在“测试”中,然后保存; ( 5) 找到 “Atmel” ,选定 AT89S52 芯片 ; ( 6) 建立一个源程序文本 ; ( 7)编 写 我们的 程序 ; ( 8)填写源程序名称,再加上合适的后缀,比如是 C 语音就要在名字后面加上 .c,然后就 点击保存; ( 9)将文件添加到工程中; ( 10)最后设置,点击 ,在弹出来的框中将晶振设置为 ,然后 在Output 栏中 将 Create HEX File 前面的框打勾 , 既选定, 使编译器输出单片机需要的 HEX 文件 ; ( 11) 点击保持并编译。 系统软件主程序流程图 软件主程序流程图如图 41 所示: 13 图 41 主程序流程图 系统子程序设计 按键扫描的实现 在这个系统中,我们设计了 5 个键,从右到左依次是设置温度上升键 、设置温度下降键、停止键、备用键和复位键。 按键扫描程序如下: void key() { rd=0。 if(key1==0) //当 key1 按下时,单片机检测单 P10 口是低电平“ 0”。 { while(!key1)。 //只有当 key1 松开时, tempH 才能++; N Y Y 开始 扫描键盘 初始化 LCD 并显示 读取数据 检测 热释电红外传感器 温度传感器 烟雾传感器 是否有信号 是否有信号 蜂鸣器报警 启动花洒 键盘设置温度上线值 N 按键停止 拨打电话 14 tempH++。 if(tempH==125) //当设置温度加至 125 时,预设温度值变为 32; tempH=32。 display(0xcd,tempH)。 } if(key2==0) //当 key2 按下时,单片机检测单 P11 口是低电平“ 0”。 { while(!key2)。 //只有当 key2 松开时, tempH 才能--; tempH。 if(tempH==10) //当设置温度加至 10 时,预设温度值变为 32; tempH=32。 display(0xcd,tempH)。 } 蜂鸣器的实现 在这个系统我们采用了滴答滴答的声音,原理就是给蜂鸣器一个连续的正弦波,主要要延时程序实现。 延时程序如下: void Delay1(uint z) { uint x,y。 for(x=z。 x0。 x) for(y=110。 y0。 y)。 蜂鸣器设计程序如下: void bell() { beep=1。 //给蜂鸣器一个高电平; DelayMs(100)。 //延时 100ms; beep=0。 //给蜂鸣器一个低电平; DelayMs(100)。 //延时 100ms; } 温度传感器的实现 温度传感器的子程序流程图如图 42 所示: 15 图 42 温度传感器子程序流程图 DS18B20 初始化程序如下: bit Init_DS18B20(void) { bit dat=0。 DQ = 1。 //DQ 复位 DelayUs2x(5)。 //稍做延时 DQ = 0。 //单片机将 DQ拉低 DelayUs2x(200)。 //延时 DelayUs2x(200)。 DQ = 1。 //拉高总线 DelayUs2x(50)。 //15~60us 后 接收 60240us 的存在脉冲 dat=DQ。 //如果 x=0 则初始化成功 , x=1 则初始化失败 DelayUs2x(25)。 //稍作延时返回 return dat。 } 读取温度程序如下: unsigned int ReadTemperature(void) { unsigned char a=0。 unsigned int b=0。 unsigned int t=0。 Init_DS18B20()。 WriteOneChar(0xCC)。 // 跳过读序号列号的操作 WriteOneChar(0x44)。 // 启动温度转换 DelayMs(10)。 Init_DS18B20()。 开始 DS18B20 初始化CHU 读取一个字节 写入一个字节 读取温度 16 WriteOneChar(0xCC)。 //跳过读序号列号的操作 WriteOneChar(0xBE)。 //读取温度寄存器等(共可读 9 个寄存器) 前两个就是温度 a=ReadOneChar()。 //低位 b=ReadOneChar()。 //高位 b=8。 t=a+b。 return(t)。 } 红外传感器的实现 在 LCD 中显示热释电红外传感器的状态,报警时显示: HONG: ON,静止时显示:H:OFF,其子程序流程图如图 43 所示: 图 43 热释电红外传感器子程序流程图 程序如下: IR_IN=0。 //赋初始值; LCD_Clear()。 //清屏 ; model=1。 //正常模式; flag=1。 if(IR_IN==1) { num=1。 // 选择显示模式 1; LCD_Write_String(0,0,HONG:On)。 //显示 HONG:On ; Y 开始 读取数据 LCD 显示 是否有人 报警 N 17 Delay1(20xx)。 //延时; } 烟雾传感器的实现 在 LCD 中显示烟雾传感器的状态,报警时显示: YAN: ON,静止时显示: Y:OFF,其子程序流程图如图 44所示: 图 44 烟雾传感器子程序流程图 程序如下: YAN=1。 //赋初始值; if(YAN==0) { num=2。 //选择显示模式 2; LCD_Write_String(0,0,YANWU:On)。 //显示 YANWU:On; Delay1(20xx)。 } 液晶显示器的实现 1602 是一个启动比较慢的元件,故在刚开启后最好能执行一段时间延时,稍微等待一下。 然后先看看显示器的时序再对他进行编码。 初始化过程如图 45所示: Y Y 开始 读取数据 LCD 显示 是否有烟雾或者可燃气体 蜂鸣器报警 N 18 图 45 初始化 LCD 流程图 初始化程序如下: void LCD_Init(void) { LCD_Write_Com(0x38)。 /*显示模式设置 */ DelayMs(5)。 LCD_Write_Com(0x38)。 DelayMs(5)。 LCD_Write_Com(0x38)。 DelayMs(5)。 LCD_Write_Com(0x38)。 LCD_Write_Com(0x08)。 /*显示关闭 */ LCD_Write_Com(0x01)。 /*显示清屏 */ LCD_Write_Com(0x06)。 /*显示光标移动设置 */ DelayMs(5)。 LCD_Write_Com(0x0C)。 /*显示开及光标设置 */ } 显示器显示温度值的设计程序如下: 开始 写入命令函数 写入数据函数 清屏 写入字符串 初始化 19 void display(uchar add, uchar date) { LCD_Write_Com(add)。 LCD_Write_Data(0x30+date/100)。 //读出温度的百位 LCD_Write_Data(0x30+date/100/10)。 //读出温度的十位 LCD_Write_Data(0x30+date/100%10)。 //读出温度的个位 } 模块( TC35i)的实现 GSM 模块子程序实现流程图 如图 46 所示 图 46 GSM 模块的实现 打电话程序如下: void ATD(void) { Uchar code mode[]={0x41,0x54,0x44,0x31,0x33,0x35,0x38,0x30,0x31,0x32,0x39,0x32,0x38,0x34,0x3B,0X0D}。 uint i。 for(i=0。 i16。 i++) { N Y 开始 建立连接 是否报警 拨打电话 20 SBUF=mode[i]。 while(TI==0)。 TI=0。 } } 挂电话程序如下: void ATH(void) { uchar code mode[]= {0x41,0x54,0x48,0X0D}。 uint i。 for(i=0。 i4。 i++) { SBUF=mode[i]。 while(TI==0)。 TI=0。 } } 系统主程序设计 系统的主程序就像一个人的心脏,没有它其它做得再好也无法实现。 程序如下: void main (void) { if((IR_IN==1||YAN==0||WEN==1)amp。 amp。 (model==0)) { LCD_Clear()。 //清显示, model=1。 //model 赋值 1,即将执行报警状态 flag=1。 //打电话标志位置“ 1”,即将执行打电话函数,打电话 if(IR_IN==1) { num=1。 //num 赋值 1 LCD_Write_String(0,0,HONG:On)。 //暂显示系检测红外传感器报警 21 Delay1(20xx)。 } if(YAN==0) { num=2。 //num 赋值 2 LCD_Write_String(0,0,YANWU:On)。 //暂显示系检测烟雾传感器报警Delay1(20xx)。 } if(WEN==1) { num=3。 //num 赋值 3 WEN=0。 //重置超温标志位为“ 0” LCD_Write_String(0,0,WEN:On)。 //暂显示系检测超温报警 Delay1(20xx)。 } } if(flag==1) //打电话标志位 flag=1 时,执行打电话函数 { LCD_Clear()。 //清屏 flag=0。 //重置打电话标志位 flag=0 LCD_Write_String(0,0,DaDianHua)。 //在液晶显示打电话状态 LCD_Write_String(0,1, .......)。 //在液晶显示打电话状态ATD()。 //打电话函数 Delay()。 //延时 Delay1(10000)。 //延时 } if(model==1) //当 model=1 时,进入报警状态 { LCD_Clear()。 //清屏 „„。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。