基于单片机的温控报警器设计内容摘要:
部分设计用到了温度传感器 DS18B20,这种传感器是单数据总线传感器,一共有三只引脚,一个引脚接电源 VCC,一个引脚接地 GND,还有一个就是数据总线引脚 DQ 接到单片机的其中一只引脚。 设计图如下。 图 5 DS18B20 原理图 14 这个是 DS18B20 传感器的硬件设计。 1 脚接电源 VCC, 2 脚是数据总线的引脚用于接到单片机 ATmega16 的 PB3 引脚, 3 脚用于接地 GND。 还有在设计里面考虑到电源的不稳定,所以在接近插槽的电源 VCC 和 地 GND 之间加了一个 的电容用于滤波 ,稳定电源。 LCD1602 显示部分设计 这部分设计用到了带字符的液晶显示器 LCD1602,这种液晶显示器是16*2 显示规格的带字符显示器。 这里带字符显示 的 液晶显示器里面已经有一个解释芯片,当收到字符数据时,自动识别出字符, 不 需要在单片机作解释,但缺点就是这种带字符的显示器不能按照设计者的意思随心所欲地显示需要的图案。 不过今次设计液晶显示器的功能是用于显示实时温度和设定温度,并不需要特殊图案。 因此,带字符的 lcd1602 液晶显示器对于今次设计来说, 简单直观地 实 现效果。 所以 我选择用带字符的液晶显示器。 LCD1602 原理图如下: 图 6 LCD1602 原理图 15 设计按照 LCD1602 的接口信号来连接引脚。 1 脚是电源地 GND; 2 脚接电源正极 VCC; 3脚接液晶显示偏压信号,利用两个 1k 的电阻进行分压; 4脚到 6脚接单片机 ATmega16 的 PD5到 PD7,分别代表接到 LCD1602 的 RS、 RW、 EN的引脚;7脚到 14 脚接按顺序接到单片机 ATmega16 的 PB0到 PB7 引脚, 15 脚背光源正极接电源正极 VCC; 16 脚背光源负极接正源地 GND。 下表显示 LCD1602 的 4脚到 14脚和单片机引脚对应关系。 表 单片机与 LCD1602 引脚对应表 单片机 ATmega16 LCD1602 单片机 ATmega16 LCD1602 PD5 引脚 4( RS) PB3 引脚 10( Data3) PD6 引脚 5( RW) PB4 引脚 11( Data4) PD7 引脚 6( EN) PB5 引脚 12( Data5) PB0 引脚 7( Data0) PB6 引脚 13( Data6) PB1 引脚 8( Data1) PB7 引脚 14( Data7) PB2 引脚 9( Data2) ATmega16 原理图设计 这部分是整个单片机 ATmega16 的设计 总图。 包含了程序烧写下载端口, 3个按键,电源端口,预留串口通讯端、复位模块和声光报警模块。 图 7 设计部分原理图 16 程序烧写 这部分设计是用于将在电脑端的编写好的程序烧写到单片机 ATmega16,今次设计的下载用 ASP 下载方式。 如下图,采用的是 10PIN 插针。 1脚连接单片机的 MOSI 端; 2 脚空接; 3脚接单片机 RESET 端; 4脚接单片机 SCK 端; 5脚接单片机 MISO 端; 6脚到 9 脚均接电源地 GND; 10 脚接 VCC。 图 8 程序烧写 电源端口 这部分只需要外接一个 2PIN 的端子用于连接 5V 开关。 用一个 100u 和一个 的电容接电源和电源正极。 如下图: 图 9 电源端口接线原理图 串口通讯端的设计 此设计目的是为了能够使系统在硬件上得到扩展型设计,方便通过串口RS485 或者 RS232 上传数据。 图 10 串口设计图 17 如图显示有两个引脚,分别是数据发送和接收。 1脚 RXD连接到单片机 mega16港口 PD0,引脚 2连接到端口 TXD 单片机 mega16 PD1。 这里的 mega16 单片机 PD0口和 PD1 口是一种特殊的串行通信口, 这俩 端口可实现计算机与单片机之间的串口通信。 报警设计 采用的是声光报警的方式来提示实时温度已经达到设定的温度。 硬件上,利用一个有源蜂鸣器和一个 led 灯来进行声光报警。 当实时温度到了设定的温度,那么蜂鸣器响 led 灯亮。 如下图 11 是蜂鸣器部分, 1 脚接单片机的 PD4 端口, 2脚接电源地 ,这里用单片机高电平驱动蜂鸣器的方法。 如图 12 是 led 灯部分,连接电源正极和单片机的 PB4 端口,这里用单片机低电平驱动 led 的方法。 图 11 蜂鸣器 图 12 LED 灯 按键设计 本设计采用 4 个按钮,其中之一是用于重置。 其他三个按钮用来设置设定温度。 2 键是用来设置温度增加, 3 键来设定温度下降, 而 4 键是用于切换位数。 18 4 系统软件设计 开始 初始化芯片 声光报警 初始化 DS18B20 设定数值加 1 设定数值减 1 设定数值位数切换 键 4 是否按下 键 2 是否按下 键 3 是否按下 判断数值是否达到设定数值 初始化 LCD1602 19 5 温度 数据处理函数 初始化函数 程序代码如下: void init_18b20(void) { DQ_OUT。 //设置 PB3 为输出 DQ_SET。 //拉高 PB3 电平 delay_10us(1)。 //延时 DQ_CLR。 //拉低 PB3 电平 delay_10us(75)。 //延时 DQ_SET。 //再次拉高 PB3 电平 delay_10us(6)。 //延时 DQ_IN。 //设置 PB3为输入 while(DQ_R)。 //等待 DS18B20 返回来的高电平 while(!(DQ_R))。 //等待 DS18B20 初始化完毕 DS18B20 的子函数 程序代码如 下: uint read_18b20_temp(void) { uchar temp1,temp2。 int temp。 init_18b20()。 //复位 18b20 20 write_18b20_(0xcc)。 //忽略 rom 配置 write_18b20_(0x44)。 //发出转换命令 init_18b20()。 write_18b20_(0xcc)。 write_18b20_(0xbe)。 //发出读温度命令 temp1=read_18b20_byte()。 //读取到温度的前两个字节 temp2=read_18b20_byte()。 init_18b20()。 //复位 18b20 temp=(((temp28)|temp1)*)。 //设置输出形式为小数点后一位 return temp。 这是一个有返回值的函数。 由单片机发出信号,等待传感器返回温度数值,再将返回的数值进行处理。 这里首先要初始化传感器,等待初始化完毕,我们发送转换命令 0x44。 这里有个需要注意的是命令 0xcc,这是一个忽略单片机 rom配 置噶命令,原本 rom 配置命令是当有多个传感器的时候要用到选择传感器的ID,但设计中只有一个传感器,所以就不需要理会 rom配置了。 接着发出转换命令之后,再次初始化传感器,再发出读温度命令 0xbe。 接着就是将读回来两次数据分别装进两个全部变量里面。 接着是初始化传感器,说明一次的温度转换完成了。 传感器 DS18B20 写命令子函数 程序代码如下: void write_18b20_(uchar ) { uchar i。 for(i=0。 i8。 i++) //分别写 8次,这里一次写一位 { DQ_OUT。 //设置 PB3 为输出 21 DQ_CLR。 //拉低 PB3 电平 NOP()。 if(amp。 0x01) //当命令的最低位为 1 { DQ_SET。 //拉高 PB3电平 } else //当命令的最低位不为 1 { DQ_CLR。 //拉低电平 } delay_10us(5)。 //延时 DQ_SET。 //拉高电平 =1。 //命令右移一位 } delay_10us(5)。 //延时 这个是单片机向传感器写 命令的函数。 这里我们一开始就是一个循环语句,因为这里需要传送的命令都为 8 位,一次只能传送一位到传感器,所以需要分别传送 8次。 进入循环语句之后,我们将引脚设置为输出并拉低引脚电平。 之后就是进入一个判断语句,判断命令的最后一位是否为 1,当为 1拉高引脚电平,但不为 1拉低引脚电平。 接着就是延时 50us 等待传感器反应,再接着是拉高电平指示这次的传送完毕,后面跟着就是需要将命令右移一位。 这样直到整个命令完全传送到传感器中,再然后延时等待传感器反应。 DS18B20 读一个字节数据子函数 程序代码如下: uchar read_18b20_byte(void) { 22 uchar i,retd=0。 for(i=0。 i8。 i++) //分别读 8次,这里一次读一位 { retd=1。 //数据右移一位 DQ_OUT。 //设置 PB3 为输出 DQ_CLR。 //拉低电平 DQ_SET。 //拉高电平 NOP()。 NOP()。 NOP()。 NOP()。 //延时 DQ_IN。 //设置 PB3 为输入 if(DQ_R) //判断输入数据是否为 1 { retd|=0x80。 //数据变量的最高位为 1 } delay_10us(5)。 } return retd。 //返回数据变量 } 这个函数是用于读取传感器一个字节的数据,就是一个 8 位数据。 首先,定义一个 8位局部变量用于数值的返回。 这里有一个循环语句,同样是 8次,一次只能读一位的数据。 进入循环语句之后,首先要将变量右移一位,这里值得注意的是这个变量不需要给一个它初始值,因为无论初始值是什么并不影响数据的读出。 右移一位之后,设置引脚为输出并拉低电平,紧接就是拉高电平,延时等待传感器反应。 再之后是设置引脚为输入,读一位 数据,当这位数据是 1,我们便将变量的最高位设置为 1。 延时 50us 等待传感器,当循环语句结束,返回数据变量给相关的函数、语句使用。 23 显示函数 LCD1602 初始化子函数 程序代码如下: void lcd_init(void) { lcd_w_(0x38,0)。 //8 位数据传输, 2 行显示, 5*7 字形,不检测忙信号 delay_ms(5)。 //延时 5ms lcd_w_(0x38,0)。 delay_ms(5)。 lcd_w_(0x38,0)。 delay_ms(5)。 lcd_w_(0x38,1)。 //8 位数据传输, 2 行显示, 5*7 字形,检测忙信号 lcd_w_(0x08,1)。 //关闭显示,检测忙信号 lcd_w_(0x01,1)。 //清屏,检测忙信号 lcd_w_(0x06,1)。 //显示光标右移设置,检测忙信号 lcd_w_(0x0c,1)。 //显示屏打开,光标不显示,不闪烁,检测忙信号 delay_ms(5)。 display_str(0,0,realtime T:)。 //第一行要显示的初始内容 delay_ms(5)。 display_str(0,1,set T:)。 //第二行要显示的初始内容 24 delay_ms(5)。 } LCD1602 写数据子函数 程序代码如下: void lcd_w_data(uchar w_data) { lcd_busy()。 //检测 lcd 是否处于忙状态 lcd_rs_1。 //拉高 rs 电平 lcd_rw_0。 //拉低 rw 电平 _NOP()。 //空命令,用于延时 dataport=w_data。 //将要输入到 lcd1602 的数据放到 PC端口 _NOP()。 lcd_en_1。 //拉高 en 电平 _NOP()。 _NOP()。 lcd_en_0。 //拉低 en 电平 } 此功能的作用,微控制器,显示数据输入到 LCD1602。 检测 LCD1602 是在一个繁忙的状态,当 LCD1602 闲置无效的 RS 级别(对应引脚查找表 ),并拉低的 RW 级延时等待 LCD1602 反应。 lcd1602 的成在写入数据的状态,将准备写入的数据 分配给 PC 口,延迟等待写数据,然后连接到一个下降沿完整的 lcd1602。基于单片机的温控报警器设计
相关推荐
组键或一个键盘,总有一个接口电路与 CPU 相连。 CPU 可以采用查询或中断方式了解有无将键输入并检查是哪一个键按下,将该键号送入累加器 ACC,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。 3)按键结构与特点 微机键盘通常使用机械触点式按键开关,其主要功能是把机械上的 通断转换成为电气上的逻辑关系。 也就是说,它能提供标准的 TTL 逻辑电平
D1330 在进行显示驱动设计时需要为其设计一个显示数据存储器,这里选择了随机存储器 RAM 芯片 62256,该芯片具有 32K8 的存 储空间, SED1330 接口部分具有功能较强的 I/O 缓冲器,这使得 MPU 访问 SED1330,它不需要判断其是否忙, SED1330 随时准备接受 MPU 的访问并在内部时序控制下及时地把 MPU 发来的指令数据传输就位。 8 图 控制部硬件电路图
CS 一 51 指令系统 及 8052 产品引脚兼容 ,片内置通用 8 位中央处理器( CPU)和 Flash 存储单 元,功能强大 AT89C52 单 片机 适应于 许多高性价比的应用场合。 5 图 AT89C52 引脚 AT89C52 主要性能参数 与 Mcs 一 51 产品指令系统 和引脚 完全兼容 8k 字节可重擦写 Flash 闪 速存储器 1000 次擦写周期 全静态操作: OHz
时进行高低电平的转变,而不 为 用软件延时。 应用此 方案 时编程相对复杂。 (3) 利用单片机自带的 PWM控制器。 在 STC12系列单片机中自身带有 PWM控制器,但本系统所用到得 AT89系列单片机无此 性能。 对于方案一,该方案能够实现对直流风扇电机的无级调 速, 速率 变化灵敏,但 为 D/A转化 芯片的价格较高,与其温控状态下无级调速 性能 相比性价比不高。 对于方案二
本;温度传感器采用的总线负载能力如何,能否满足多点测温的需要;占用 MCU 的 I/O 引脚数情况如何,因为 MCU 的系统资源非常宝贵,输入通道有限,多点温度测量时,如果测量的点数超过了输入通道时,就要添加多路复用器,这将增加成本和开发时间,应尽量节约;与 MCU 的通信协议应尽量简单,温度测量的软件开发难度、成本要尽量小。 目前在数字温度传感器中采用的串行总线主要有 Philips 公司的
方案二: 采用 AT89S52 单片机 AT89S52 是美国 ATMEL 公司生产的低功耗、高性能 CMOS 8 位单片机,片内含 8k bytes 的可反复擦写的只读程序存储器 (PEROM)和256 bytes 的随机存取数据存储器 (RAM ),器件采用 ATMEL 公司的高密度、非易失性存储技术生产,与标准 MCS51 指令系统及 8052 产品引脚兼容,片内置通用 8位中央处理器