毕业设计 基于51单片机的数字温度计的设计


🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机的数字温度计的设计

1 系统的硬件电路设计

1.1 单片机系统设计

1.1.1 单片机型号的选择 

为了保证系统更好更快的运行,应该选择性价比高,可靠性高,低功耗的控制器。由于温度测量需要掉电保护来防止温度测量时出现太大误差所以需要使用掉电存储数据的时候可以直接使用单片机内部的存储,因此应选择含有2k字节的EEPROM存储的单片机。基于此有以下方案可供选择:

方案一:使用STC89C51单片机作为主控制器。它采用8051内核,它是一个8位通用CPU外加一些闪存单元组成。用户代码可以通过串行通信口下载到芯片中,成本低是它的一个优势。

方案二:使用MSP430混合信号处理器作为它的主控单元,它是一个16位能量消耗超低精简指令集[5] 的CPU。一般来说,需要使用电池供电的设备仪表使用该系列的单片机。开发难度一般比较大、价格稍微贵些。

方案三:使用STM32F103C8T6单片机作为主控单元,STM32F103是以低功耗、高性能、高稳定性32位的CONTESTM3内核的单片机,满足高稳定系和后续处理复杂控制的可扩展性。

MSP430单片机价格稍微贵些,且属于16位CPU,STC89C51单片机开发难度较低但是满足不了复杂程度高的处理,STM32系列单片机价格低,性能出众满足设计所需,因此本系统使用STM32系列单片机。

1.1.2 单片机的引脚说明

本设计是以STM32F103C8T6为最小系统作为主控单元,主要引脚说明见表2.1。它将所有的引脚以插针形式全部引出,板载晶振和复位逻辑,采用3.3V供电。该封装在焊接的时候可以采用一个IC插座进行先焊接然后焊接完成后再将芯片插到IC插座上这样做方便更换单片机单元STM32F103一共具有48只引脚,其中可以用来控制的引脚有32个分别是PA0-15、PB0-15、PC13-15这些引脚默认都可以当做GPIO来使用,可输入可输出,在这些引脚上同时也提供了第二功能,比如SPI,IIC,AD等等

图1.1 STM32封装形式

表1.1 单片机引脚功能

引脚

功能

PA12

普通I/O口,与DS18B20相连

PA11

普通I/O口输入,与按键相连

PA10

普通I/O口,与DS18B20相连

PA9

普通I/O口输出,与LED相连

PA8

普通I/O口,与ISD4004相连

PB13

IPU(上拉输入口),上拉输入

PB12

OD(开漏输出口),开漏输出

1.1.3 单片机的最小系统

一个芯片的最小系统主要包括电源电路、晶振电路复位电路和调试电路

本设计中STM32单片机的工作电压在3.3V可以正常工作。电源部分使用的是5V电源适配器通过一个mini USB口供给最小系统使用

在晶振电路中使用了两个无源晶振8MHZ晶振是给HSE用,主时钟,32.768KHZ晶振是外部低频晶振,用于计时或者系统在待机低功耗时使用。两个晶振通过输入端两个负载电容进入单片机图2.2。

图1.2 晶振电路

复位电路分为手动按键复位和上电自动复位。如图2.3所示,电容器C2两端的电压在上电时不会快速变化。此时,电容器的负端子连接到RST,并且电压全部施加到电阻器R2,RESET输入高电平,芯片复位。由于之后3.3V直流电源对电容供电,导致电阻两端电压不断降低,直到变为0的时候芯片开始照常工作。有一个与电容器C2并联的复位按钮,当它没有被按下的时候,系统完成上电复位。在系统照常工作后,可以通过按钮使RST引脚变为高电平,完成手动复位。

图1.3复位电路

调试电路采用SWD模式,其中只使用4根线就可以很方便的通过JLINK调试器进行在线调试程序,原理图如图1.4

图1.4 SWD调试电路

图1.5STM32单片机最小系统的电路图。

图1.5 单片机最小系统

1.2 显示模块设计

1.2.1 显示器件的选择

数字温度计为了方便用户读取当前实时温度,直观的展现出温度数据需要通过显示器件将温度信息显示出来,温度信息占用两位数字,不用太过复杂的显示器件,显示器件可以有以下选择:

方案:使用LCD1602液晶显示屏[4]作为用于显示的设备。LCD1602液晶显示器将最多32个字母分成两行显示,也称为文字液晶显示器,显示数字、字母、符号或文字。LCD1602液晶显示器由大量的位图字符构成,每个位图字符可以显示一个字符,字符与每个位的每行分开,这称为字符间距和行间距。因此,图像在画面上不能很好地工作。而为了更完美的显示,该液晶需要采用控制器,大多使用的是HD44780,才能完成字符的功能。

方案二:使用LED数码管[5]作为系统的显示设备。其对于展示数字和字母有很好的效果,并且价位低廉。本设计显示温度只有两位数字位,因此直接将所有16位引脚可以直接接到单片机上,为了克服主控制器端口的电流输出不足问题,可以用三极管对电流进行放大后控制数码管。实现简单方便。

液晶显示屏造成资源浪费,且实现方式比较复杂,使用LED数码管可以满足本设计的功能要求。因此本系统采用LED数码管实现。

1.2.2 显示模块的工作原理

LED数码管分为共阳极和共阴极两种,共阳极就是把每位数码管的8个显示LED的正极连接到一起,用控制端把每个段的负极连接,控制端为低有效;共阴极就是讲每位数码管的8个显示LED的负极连接到一起,控制端连接每个段的正极,控制端为高有效,本设计采用共阳极设计;

因为单片机输出引脚的驱动电流太小,不足以驱动LED数码管或者驱动LED数码管太暗,就需要通过三极管增加驱动电流[6],现选型C9012 PNP型三极管,封装如2.6图所示,发射级接VCC,基级接GND,集电极接数码管公共脚。LED接线原理图如图1.7所示;

图1.6 C9012三极管封装

图1.7显示部分电路原理

1.3 温度读取电路的设计

1.3.1 温感芯片的选择

本设计选择的单线数字温度传感器DS18B20[7]为主要的温感器件,这种器件是一种新型的“一线器件”,它适用的电压范围比较宽,外型小巧,价格经济实惠,也是世界上第一片支持一线总线接口的温度传感器,多片温度传感器还可以使用一个接口并联在一起做多点温度检测,线路简单节省逻辑电路和引线,扩展性强。

DS18B20的通常可以采用的供电方式有两种。一种是寄生电源供电方式见图2.8[8],寄生电源供电方式,DS18B20从单线信号线上汲取能量;在信号线DQ处于高电平期间把能量储存在内部电容里,信号线在低电平时,消耗电容器上的电能,工作到高电平,再对寄生电源(电容器)充电。

图1.8寄生电源供电

这种供电方式带来的好处有:

(1)电路简单,连接单一,一根线连接就可以;

(2)在进行远距离测温的时候,无需主机电源支持。

另外一种供电方式就是对外部的电源进行供电的方法,如图2.9所示,DS18B20的工作电源通过VDD引脚连接。此时,I/O线不需要强上拉,也不存在供电电流不足的问题,保证了转换精度。同时,任意数量的DS18B20传感器理论上可以连接在总线上,形成多点温度测量系统;

图1.9 外部电源方式供电

本系统采用外部电源供电方式,一是为了以后扩张多节点系统做准备,二是保证充足的电源供应,可以保证转换精度,同时工作稳定可靠,抗干扰能力强

1.3.2 温度传感器电路设计

DS18B20的工作电源可以在3V~5.5V之间,STM32的工作电源为3.3V,同样IO支持3.3V驱动,因此可以直接将DS18B20连接到单片机的通用IO口上,虽然STM32有些IO口可以支持5V驱动电压,不过为了电路原理图简单,现用3.3V驱动方式,原理图如图2.10所示;

图1.10温度传感器电路设计

DS18B20引脚3接供电电源3.3V,引脚2(数据口)通过供电电源3.3V接入到单片机PB5上,引脚1接入电源地。

2 系统调试

2.1 系统硬件测试

在系统的焊接过程中,上电前需要对系统进行开路和短路测试,尤其是电源的两极是不是有短路现象,找出一些具有方向的元件,查看是否有设计和焊接出错的。需要将实物电路板对照着原理图,首先检查每一个器件的位置以及焊接时候是否虚焊的地方。然后对于短路、短路、虚焊这些情况,只能采用仪器进行测量,如数字万用表,将数字万用表打到蜂鸣档,检测短路、断路、虚焊。

在使用万用表检测时,将数字万用表打到蜂鸣档,如果红笔和黑笔出现短路,万用表就会给出嘟嘟提示,根据这个原理可以用来检测电路短路、断路、虚焊。在需要检测元件或电线两端是否连接有两支笔时,蜂鸣器的声音是正常的,反之异常。

确认硬件没有问题以后就可以上电,注意观察电流值,如果电流值过大肯定电路板有短路的地方,用手可以触碰一下芯片,如果瞬间发热严重也代表有问题。

系统硬件调试遇到的问题:

(1)DS18B20过热

初次上电后,发现DS18B20芯片瞬间发热严重,断电检查电路发现官方器件原理图画法有问题,特别容易让用户搞反1脚和3脚,重新焊接问题解决。所以在画原理图部分时候一定要仔细核对各个引脚的相对位置。

(2)测温距离过短

在项目初期测温时测温距离过短,与设计预期相差甚远,后经过查阅资料发现连接DS18B20的总线电缆长度有限。当电缆每米扭转次数越多,通信距离越远。因此,在设计使用DS18B20的远程温度测量系统时,要充分考虑母线分布电容与阻抗的匹配问题。

2.2 系统软件测试

系统软件用Keil5集成开发工具编写,Keil5集成开发工具可以连接JLINK ARM调试工具,通过SWD调试口可以非常方便的进行系统软件在线调试。SWD调试口为串行线调试口,我们常见的JTAG有20pin接口,拥有太多的Pin接口自然会会导致PCB布线会非常麻烦,而支持SWD接口调试,只需要使用4个Pin口:GND、3.3V、SWIO、SWCLK。

程序同样可以通过SWD调试口下载到单片机中。

系统软件调试主要遇到以下问题:

(1)DS18B20双向口实时切换问题

GPIO可以设置IO方向,在51单片机,如果需要输入则直接给引脚赋值1即可读取引脚数据,对于STM32单片机来说,如果是双向口,就不可以这样处理,最开始DS18B20一直没有发现回应,数据口是双向的,必须要随着逻辑变化GPIO口的方向,通过查找资料,用寄存器赋值方式简化了切换方向的方式,解决了问题

(2)DS18B20返回信号问题。

在DS18B20测温程序设计过程中,系统向DS18B20发出温度转换的命令之后,程序通常会等待来自DS18B20的返回信号。但是如果DS18B20中有不不恰当的接触或错误的断线,会在读DS18B20时无法接收到返回信号,程序就会陷入死循环,不能继续进行。因此,调试前应该仔细检查硬件的连接。

图2.1 软件调试成功图

系统流程图

流程图

如果你需要帮助、建议或解决问题,不要犹豫,可以随时向老师提问或寻求支持。专注于单片机的解决方案可以为你提供有关电子设计、嵌入式系统、编程和硬件方面的宝贵信息。无论你的问题涉及到哪个方面,都可以向老师咨询,以获得有针对性的建议和指导。祝愿你在单片机设计领域取得成功!

51单片机温度计的原理图主要包括以下几个部分:温度传感器、信号调理电路、模数转换器(ADC)、单片机、显示模块和电源模块。以下是各个部分的功能和连接方式: 1. **温度传感器**:常用的温度传感器有DS18B20、NTC热敏电阻等。温度传感器用于检测环境温度,并将温度信号转换为电信号。 2. **信号调理电路**:信号调理电路用于对传感器输出的电信号进行放大、滤波等处理,以确保信号的稳定性和准确性。 3. **模数转换器(ADC)**:由于单片机通常只能处理数字信号,因此需要将模拟信号转换为数字信号。常用的ADC有ADC0804等。 4. **单片机**:51单片机是核心控制单元,负责接收ADC转换后的数字信号,进行处理和计算,并将结果显示在显示模块上。 5. **显示模块**:常用的显示模块有LCD显示屏、数码管等。显示模块用于显示温度值。 6. **电源模块**:电源模块为整个系统提供稳定的电源供应,通常使用5V或3.3V电源。 以下是一个简单的原理图描述: ``` 温度传感器 --> 51单片机 ----> 显示模块 | 电源模块 ``` ### 详细连接步骤: 1. **温度传感器连接**:将温度传感器的输出端连接到信号调理电路的输入端。 2. **信号调理电路连接**:信号调理电路的输出端连接到ADC的输入端。 3. **ADC连接**:ADC的输出端连接到51单片机的I/O口或数据总线。 4. **显示模块连接**:显示模块的数据线连接到51单片机的I/O口。 5. **电源连接**:将电源模块的输出端分别连接到温度传感器、信号调理电路、ADC、51单片机和显示模块的电源引脚。 ### 示例代码: ```c #include <reg51.h> #include <stdio.h> sbit DS18B20 = P1^0; // 温度传感器连接到P1.0 sbit LCD_RS = P2^0; sbit LCD_E = P2^1; sbit LCD_D4 = P2^2; sbit LCD_D5 = P2^3; sbit LCD_D6 = P2^4; sbit LCD_D7 = P2^5; void delay(unsigned int time) { unsigned int i, j; for (i = 0; i < time; i++) for (j = 0; j < 1275; j++); } void lcd_cmd(unsigned char cmd) { LCD_RS = 0; LCD_D4 = (cmd >> 4) & 0x01; LCD_D5 = (cmd >> 5) & 0x01; LCD_D6 = (cmd >> 6) & 0x01; LCD_D7 = (cmd >> 7) & 0x01; LCD_E = 1; delay(1); LCD_E = 0; LCD_D4 = cmd & 0x01; LCD_D5 = (cmd >> 1) & 0x01; LCD_D6 = (cmd >> 2) & 0x01; LCD_D7 = (cmd >> 3) & 0x01; LCD_E = 1; delay(1); LCD_E = 0; delay(5); } void lcd_data(unsigned char dat) { LCD_RS = 1; LCD_D4 = (dat >> 4) & 0x01; LCD_D5 = (dat >> 5) & 0x01; LCD_D6 = (dat >> 6) & 0x01; LCD_D7 = (dat >> 7) & 0x01; LCD_E = 1; delay(1); LCD_E = 0; LCD_D4 = dat & 0x01; LCD_D5 = (dat >> 1) & 0x01; LCD_D6 = (dat >> 2) & 0x01; LCD_D7 = (dat >> 3) & 0x01; LCD_E = 1; delay(1); LCD_E = 0; delay(5); } void lcd_init() { lcd_cmd(0x02); lcd_cmd(0x28); lcd_cmd(0x0C); lcd_cmd(0x06); lcd_cmd(0x01); delay(10); } void main() { float temperature; char buffer[16]; lcd_init(); while (1) { // 读取温度传感器数据 temperature = read_temperature(); // 显示温度 sprintf(buffer, "Temp: %.2f C", temperature); lcd_cmd(0x80); for (int i = 0; i < strlen(buffer); i++) { lcd_data(buffer[i]); } delay(1000); } } float read_temperature() { // 读取温度传感器的代码 return 25.5; // 示例温度 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值