硬件电路设计技术报告 本文关键词:电路设计,硬件,报告,技术
硬件电路设计技术报告 本文简介:一、基本功能(1)测量范围0-99℃(2)测量精度0.1℃(3)显示测量结果(4)能将结果上传PC(5)设置温度测试范围(6)控制一个电阻附近的温度二、方案设计1.系统框图AT89S51cpuLCD1602MAX232PCDS18B203*4键盘2.各部分硬件功能描述(1)DS18B20用来收集温度
硬件电路设计技术报告 本文内容:
一、基本功能
(1)测量范围0-99℃
(2)测量精度0.1℃
(3)显示测量结果
(4)能将结果上传PC
(5)设置温度测试范围(6)控制一个电阻附近的温度
二、方案设计
1.系统框图
AT89S51
cpu
LCD1602
MAX232
PC
DS18B20
3*4键盘
2.各部分硬件功能描述
(1)DS18B20用来收集温度信息
(2)LCD1602用来显示温度读数
(3)键盘用来输入预设温度
(4)AT89S51用来作为CPU控制
(5)MAX232作为接口实现与PC的交互
3.
分析硬件
AT89S51是一个低功耗,高性能4位单片机,片内含4k的可反复擦写1000次的Flash只读程序存储器,满足实验要求。89S51相对于89C51
新增加很多功能,性能有了较大提升,价格只比89C51稍高一些
最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
LCD1602微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。可以显示多种数字、字母以及其它符号,所以而满足实验要求。
DS18B20温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。可编程
的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。在9位分辨率时最多在
93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快,所以而满足实验要求。
三、硬件电路设计
1.硬件选择
⑴
温度传感器DS18B20
⑵
单片机AT89S51
⑶
3*4规格键盘
⑷
LCD1602
⑸
MAX232
2.
显示部分
1602字符型LCD液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图
字符型液晶显示器实物图
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图所示:
1602LCD尺寸图
1602LCD主要技术参数:
显示容量:16×2个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
字符尺寸:2.95×4.35(W×H)mm
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
引脚接口说明表
1602液晶模块内部的控制器共有11条控制指令,如表所示:
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
6
置功能
0
0
0
0
1
DL
N
F
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM或DDRAM)
1
0
要写的数据内容
11
从CGRAM或DDRAM读数
1
1
读出的数据内容
控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
与HD44780相兼容的芯片时序表如下:
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
输出
无
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入
RS=H,R/W=L,D0—D7=数据,E=高脉冲
输出
无
基本操作时序表
读
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图是1602的内部显示地址。
3.
测温部分
DSl8B20引脚结构DS18B20采用3脚TO-92封装或8脚的SOIC封装,如图所示。各引脚的功能:GND为电压地;DQ为单数据总线;VDD
为电源电压;NC
为空引脚。2.3
DSl8B20工作原理及应用
DS18B20
的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20
的内部存储器资源。18B20
共有三种形态的存储器资源,它们分别是:
(1)ROM
只读存储器,用于存放DS18B20ID编码,其前8
位是单线系列编码(DS18B20
的编码是19H),后面48
位是芯片唯一的序列号,最后8
位是以上56
位的CRC
码(冗余校验)。数据在出厂时设置不由用户更改。DS18B20
共64
位ROM。
(2)RAM
数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20
共9
个字节R每个字节为8
位。如图所示。第1、2
个字节是温度转换后的数据值信息,第3
和第4
字节是高温触发器TH
和低温触发器TL
的易失性拷贝,第5
个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率,DS18B20
工作时寄存器中的分辨率转换为相应精度的温度数值。以上字节内容每次上电复位时被刷新。配置寄存器字节各位的定义如图所示。低5位一直为1,TM是工作模式位,用于设置DS18B20
在工作模式还是在测试模式,DS18B20
出厂时该位被设置为0,用户不要去改动;R1和R0用来设置分数。
4.
键盘
触点式开关按键(机械式开关),按键按照接口原理为非编码键盘,非编码键盘主要是由软件来实现键盘的识别。非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。这次实验使用的是矩阵式键盘。
按键的输入原理:
在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL
逻辑电平,以便与通用数字系统的逻辑电平相容。此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。因此,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,通过接口电路与单片机相连。单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。
按键的特点与去抖:
机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图所示,抖动时间的长短与开关的机械特性有关,一般为5
~
10
ms。从图中可以看出,在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。(
本学习板采用软件去抖方式)。软件去抖的流程图如图所示。
图1
从按键的去抖流程图我们可以知道,检测到有键按下时,应延时等待一段时间(可调用一个5ms~10ms的延迟子程序),然后再次判断按键是否被按下,若此时判断按键仍被按下,则认为按键有效,若此时判断按键没有被按下,说明为按键抖动或干扰,应返回重新判断。键盘真正被按下才可进行相应的处理程序,此时基本就算实现了按键输入,进一步的话可以判断按键是否释放。
3*4键盘的工作原理:
3*4
的矩阵式键盘由4
根行线和3
根列线交叉构成,按键位于行列的交叉点上,这样就构成了12
个按键。其中交叉点的行列线是不连接的,当按键按下的时候,此交叉点处的行线和列线导通。行线通过上拉电阻接到VCC
上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线在交点导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的每条行线与4
条列线相交,交点的按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,键分析时必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
5.
控制部分
AT89S51是一个低功耗,高性能CMOS
8位单片机,片内含4k
Bytes
ISP(In-system
programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP
Flash存储单元。AT89S51具有完整的输入输出、控制端口、以及内部程序存储空间。与我们通常意义上的微机原理类似,可以通过外接A/D,D/A转换电路及运放芯片实现对传感器传送信息的采集,且能够提供以点阵或LCD液晶及外接按键实现人机交互,能对内部众多I/O端口连接步进电机对外围设备进行精确操控,具有强大的工控能力。
主要性能特点
1、4k
Bytes
Flash片内程序存储器;
2、128
bytes的随机存取数据存储器(RAM);
3、32个外部双向输入/输出(I/O)口;
4、2个中断优先级、2层中断嵌套中断;
5、6个中断源;
6、2个16位可编程定时器/计数器;
7、2个全双工串行通信口;
8、看门狗(WDT)电路;
9、片内振荡器和时钟电路;
10、与MCS-51兼容;
11、全静态工作:0Hz-33MHz;
12、三级程序存储器保密锁定;
13、可编程串行通道;
14、低功耗的闲置和掉电模式。
管脚说明
VCC:电源电压输入端。
GND:电源地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0
口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
PDIP封装的AT89S51管脚图
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口除了作为普通I/O口,还有第二功能:
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外部中断0)
P3.3
/INT1(外部中断1)
P3.4
T0(T0定时器的外部计数输入)
P3.5
T1(T1定时器的外部计数输入)
P3.6
/WR(外部数据存储器的写选通)
P3.7
/RD(外部数据存储器的读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。89C51的P0、P1、P2、P3口作为输入时都是准双向口。除了P1口外P0、P2、P3口都还有其他的功能。
RST:复位输入端,高电平有效。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:地址锁存允许/编程脉冲信号端。当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,
ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号,低电平有效。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:外部程序存储器访问允许。当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:片内振荡器反相放大器和时钟发生器的输入端。
XTAL2:片内振荡器反相放大器的输出端。
6.
串口
MAX232芯片是美信(MAXIM)公司专为RS—232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。
引脚部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。15脚GND、16脚VCC(+5v)。
MAX232特点:1、符合所有的RS—232技术标准
2、只需要单一
+5V电源供电
3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-
4、功耗低,典型供电电流5mA
5、内部集成2个RS-232C驱动器
6、高集成度,片外最低只需4个电容即可工作。
实验总电路图:
PCB板图:
四、软件设计
1.设计思路
软件共四个模块:DS18B20模块,LCD1602显示模块,键盘扫描模块,89C51主程序模块。
开始后,先调用DS18B20模块每5s测一次温度值,接着更新显示缓存,刷新显示,每20s扫描键盘一次,循环操作。
2.
总流程图
测量程序流程图:
初始化DS18B20
写转换命令给DS18B20
读温度值
十六进制→十进制
十进制→断码
填充显示缓存
①写跨过ROM命令
②写启动转换命令
③写读命令
读取温度DS18B20模块流程图:
3.
各部分程序设计
#include
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
sbit
DQ
=P3^3;
//定义通信端口
uchar
code
num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
Void
main()
{EA=1;
EX0=1;
EX1=1;
IT1=1;
IT0=1;
Init_display9);
While(1)
{
Read_temperture();
Comp();
Ds18b20
display();
}
}
void
Init_DS18B20(void)
{
unsigned
char
x=0;
DQ
=
1;
//DQ复位
delay(8);
//稍做延时
DQ
=
0;
//单片机将DQ拉低
delay(80);
//精确延时
大于
480us
DQ
=
1;
//拉高总线
delay(14);
x=DQ;
//稍做延时后
如果x=0则初始化成功
x=1则初始化失败
delay(20);
}
Void
DS18B20
wr(wdat)
//读一个字节
{
uchar
i=0;
for
(i=8;i>0;i--)
{
DQ
=
0;
DQ=wdat+
//
给脉冲信号
Delay10us(5);
DQ=1;
}wdat>>=1;
}
Void
DS18b20
rd()
//写一个字节
{
uchar
i=0;
uchar
dat=0;
for
(i=8;
i>0;
i--)
{
DQ
=
0;
Dat>>=1;
DQ=1;
If(DQ)
Dat=dat|0x80;
Delay10us(5);
}
}
ReadTemperature()
//读取温度
{
Uchar
a,b;
Ds18b20
rst();
Ds18b20
wr(oxcc);
Ds18b20
wr(0x44);
Delay(750);
Ds18b20
rst();
Ds18b20
wr(oxcc);
Ds18b20
wr(0xBE);
a=ds18b20();
b=ds18b20
rd();
tvalue=b;
tvalue=max_int)
{w=1;TR1=1;}
if((temp+temp_d*0.0625)min_int)
{w=0;}
}
if(f==1){w=1;TR1=1;}
}
if(f_min==1)
{
if(f==0)
{
if((temp+temp_d*0.0625)>=max_int)
{w=1;TR1=1;}
if((temp+temp_d*0.0625)=min_int)
{w=1;TR1=1;}
if((temp+temp_d*0.0625)=min_int)
{w=1;TR1=1;}
if((temp+temp_d*0.0625)max_int)
{w=0;}
}
if(f==0){w=1;TR1=1;}
}
}
}
void
delay(uint
c)
//延时子程序
{
uint
a,b;
for(a=0;a for(b=0;b<120;b++); } void main () //初始化子程序 { int(); delay(50); EA=1; EX0=1; EX1=1; IT0=1; IT1=1; while(1); } int LCD; { Wr_Com(0xc0) Wr_dat(disdat[0]); Wr_com(0xc1); Wr_dat(disdat[1]); Wr_com(0xc2); Wr_dat(disdat[2]); Wr_com(0xc3); Wr_dat(0x2e]); Wr_com(0xc4); Wr_dat(disdat[3]); Void int_LCD( ) { Wr_com(0x38);delay(5); Wr_com(0x08);delay(5); Wr_com(0x01);delay(5); Wr_com(0x06);delay(5); Wr_com(0x0c);delay(5); } Void wr_com(com) { RS=0;R/W=0,EN=0; P0=COM; delay(1); EN=1; delay(1) EN=0; } Void wr_dat(uchar dat) { RS=1; R/W=0; EN=0; P0=dat; Display(1); EN=1; Display(1); EN=0; } void delayl() { uint n= 50000;while(n--); } void delays() { unit n= 10000;while(n--); } main () { P2=0xf0; EA=1; EX0=1; IT0=1; } void int_0() interrup 0 unchar temp,key; { P2=0xf0; temp=P2; P2=0x0f; key=temp|p2; for(i=0,i<16,i++) { if(key==key_table(i)) {num=i; break; } } P0=LED_table[num]; } 五、实验总结 总结本次课程设计, 这是我们第一个完成的单片机综合实验, 我们一组三人, 共同完成了它, 在本次综合实验过程中,我们发现很多的问题,让我们长进了很多。我们一起探 讨问题, 然后不懂的就问, 力所能及做到应该做的, 不仅使我们增强了团队意识, 而且我们良好的分配工作方式促进了实验的进程, 又通过编写实验报告让我们掌 握了很多课余的小技能,多动手多动脑,才会有收获! 本设计利用89S51芯片控制温度传感器DS18B52,再辅之以部分外围电路实现对环境温度的控制,性能稳定,精度较高,而且扩展性很强。由于DS18B20支持单总线协议,我们可以将多个DS18B52并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B52通信,占用较少的微处理器的端口就可以实现多点测温监控系统。 从这次的温度传感器的设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们学习的理论知识用到实际中,学习单片机更是如此。