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

本文详细介绍了基于51单片机的数字温度计设计,涉及硬件电路(输入电路、A/D转换电路)、ICL7135的使用、单片机AT89S52的选择、以及LCD1601液晶显示的接口和控制。学长分享了如何克服毕设中常见的问题,包括硬件选择和软件设计。
摘要由CSDN通过智能技术生成


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

1硬件设计

1.1 输入电路

图3.1.1量程切换开关                    图3.1.2衰减输入电路

输入电路的作用是把不同量程的被测的电压规范到A/D转换器所要求的电压值。智能化数字温度计所采用的单片双积分型ADC芯片ICL7135,它要求输入电压0-±2V。本仪表设计是0-1000V电压,灵敏度高所以可以不加前置放大器,只需衰减器,如图3.1.2所示9M、900K、90K、和10K电阻构成1/10、1/100、1/1000的衰减器。衰减输入电路可由开关来选择不同的衰减率,从而切换档位。为了能让CPU自动识别档位,还要有图1.1.1的硬件连接。

1.2 A/D 转换电路

A/D 转换器的转换精度对测量电路极其重要,它的参数关系到测量电路性能。本设计采用双积A/D 转换器,它的性能比较稳定,转换精度高,具有很高的抗干扰能力,电路结构简单,其缺点是工作速度较低。在对转换精度要求较高,而对转换速度要求不高的场合如电压测量有广泛的应用。

1.2.1双积A/D 转换器的工作原理

图1.2.1.1双积A/D 转换器

    如图所示:对输入模拟电压和基准电压进行两次积分,先对输入模拟电压进行积分,将其变换成与输入模拟电压成正比的时间间隔 T1,再利用计数器测出此时间间隔,则计数器所计的数字量就正比于输入的模拟电压;接着对基准电压进行同样的处理。在常用的A/D转换芯片(如ADC -0809、ICL7135、ICL7109等)中,ICL7135与其余几种有所不同,它是一种四位半的双分A/D转换器,具有精度高(精度相当

于14位二进制数)、价格低廉、抗干扰能力强等优点。本文介绍用单片机并行方式采集ICL7135的数据以实现单片机温度计和小型智能仪表的设计方案。

3.2.1 7135的应用

7135是采用CMOS工艺制作的单片4位半A/D转换器,其所转换的数字值以多工扫描的方式输出,只要附加译码器,数码显示器,驱动器及电阻电容等元件,就可组成一个满量程为2V的数字温度计。

㈠7135主要特点如下:

①双积型A/D转换器,转换速度慢。

②在每次A/D转换前,内部电         

 ㈡7135数字部分

数字部分主要由计数器、锁存器、多路开关及控制逻辑电路等组成。7135一次A/D转换周期分为四个阶段:1、自动调零(AZ);2、被测电压积分(INT);3、基准电压反积分(DE);4、积分回零(ZI)。具体内部转换过程这里不做祥细介绍,主要介绍引脚的使用。

①R/H(25脚)当R/H=“1”(该端悬空时为“1”)时,7135处于连续转换状态,每40002个时钟周期完成一次A/D转换。若R/H由“1”变“0”,则7135在完成本次A/D转换后进入保持状态,此时输出为最后一次转换结果,不受输入电压变化的影响。因此利用R/H端的功能可以使数据有保持功能。若把R/H端用作启动功能时,只要在该端输入一个正脉冲(宽度≥300ns),转换器就从AZ阶段开始进行A/D转换。注意:第一次转换周期中的AZ阶段时间为9001-10001个时钟脉冲,这是由于启动脉冲和内部计数器状态不同步造成的。

②/ST(26脚)每次A/D转换周期结束后,ST端都输出5个负脉冲,其输出时间对应在每个周期开始时的5个位选信号正脉冲的中间,ST负脉冲宽度等于1/2时钟周期。

第一个ST负脉冲在上次转换周期结束后101个时钟周期产生。因为每个选信号(D5--D1)的正脉冲宽度为200个时钟周期(只有AZ和DE阶段开始时的第一个D5的脉冲宽度为201个CLK 周期),所以ST负脉冲之间相隔也是200个时钟周期。需要注意的是,若上一周期为保持状态(R/H=“0”)则ST无脉冲信号输出。ST信号主要用来控制将转换结果向外部锁存器、UARTs或微处理器进行传送。

③BUSY(21脚)在双积分阶段(INT+DE),BUSY为高电平,其余时为低电平。因此利用BUSY功能,可以实现A/D转换结果的远距离双线传送,其还原方法是将BUSY和CLK“与”后来计数器,再减去10001就可得到原来的转换结果。

④OR(27脚)当输入电压超出量程范围(20000),OR将会变高。该信号在BUSY信号结束时变高。在DE阶段开始时变低。

⑤UR(28脚)当输入电压等于或低于满量程的9%(读数为1800),则一当BUST信号结束,UR将会变高。该信号在INT阶段开始时变低。

⑥POL(23脚)该信号用来指示输入电压的极性。当输入电压为正,则POL等于“1”,反之则等于“0”。该信号DE阶段开始时变化,并维持一个A/D转换调期。

⑦位驱动信号D5、D4、D3、D2、D1(12、17、18、19、20脚)每一位驱动信号分别输出一个正脉冲信号,脉冲宽度为200个时钟周期,其中D5对应万位选通,以下依次为千、百、十、个位。在正常输入情况下,D5--D1输出连续脉冲。当输入电压过量程时,D5--D1在AZ阶段开始时只分别输出一个脉冲,然后都处于低电平,直至DE阶段开始时才输出连续脉冲。利用这个特性,可使得显示器件在过程时产生一亮一暗的直观现象。
    ⑧B8、B4、B2、B1(16、15、14、13脚)该四端为转换结果BCD码输出,采用动态扫描输出方式,即当位选信号D5=“1”时,该四端的信号为万位数的内容,D4=“1”时为千位数内容,其余依次类推。在个、十、百、千四位数的内容输出时,BCD码范围为0000--1001,对于万位数只有0和1两种状态,所以其输出的BCD码为“0000”和“0001”。当输入电压过量程时,各位数输出全部为零,这一点在使用时应注意。
   最后还要说明一点,由于数字部分以DGNG端作为接地端,所以所有输出端输出电平以DGNG作为相对参考点。基准电压,基准电压的输入必须对于模拟公共端COM是正电压。

 ㈢与单片机系统的串行连接

在ICL7135与单片机系统进行连接时,使用并行采集方式,要连接BCD码数据输出线,可以将ICL7135的/STB信号接至AT89C52的P3.2(INT0)。

ICL7135需要外部的时钟信号,本设计采用CD4060来对4M信号进行32分频得到125KHz的时钟信号。CD4060计数为14级2进制计数器,在数字集成电路中可实现的分频次数最高,而且CD4060还包含振荡电路所需的非门,3.3单片机部分

单片机选用的是ATMEL公司新推出的AT89S52,如图 3.2.1.1所示。该芯片具有低功耗、高性能的特点,是采用CMOS工艺的8位单片机,与AT89C51完全兼容。AT89S52还有以下主要特点:
    ①采用了ATMEL公司的高密度、非易失性存储器(NV-SRAM)技术;
    ②其片内具有256字节RAM,8KB的可在线编程(ISP)FLASH存储器;
    ③有2种低功耗节电工作方式:空闲模式和掉电模式
    ④片内含有一个看门狗定时器(WDT),WDT包含一个14位计数器和看门狗定时器复位寄存器(WDTRST),只要对WDTRST按顺序先写入01EH,后写入0E1H,WDT便启动,当CPU由于扰动而使程序陷入死循环或“跑飞”状态时,WDT即可有效地使系统复位,提高了系统的抗干扰性能。

图 1.2.1.1 89S52引脚图

1.4液晶显示部分

显示接口用来显示系统的状态,命令或采集的电压数据。本系统显示部分用的是LCD液晶模块,采用一个16×1的字符型液晶显示模块,

点阵图形式液晶由 M 行×N 列个显示单元组成,假设 LCD 显示屏有64行,每行有 128列,每 8列对应 1 个字节的 8 个位,即每行由 16 字节,共 16×8=128个点组成,屏上 64×16 个显示单元和显示 RAM 区 1024 个字节相对应,每一字节的内容和屏上相应位置的亮暗对应。一个字符由 6×8 或 8×8点阵组成,即要找到和屏上某几个位置对应的显示 RAM区的 8 个字节,并且要使每个字节的不同的位为‘1’,其它的为‘0’,为‘1’的点亮,为‘0’的点暗,这样一来就组成某个字符。但对于内带字符发生器的控制器来说,显示字符就比较简单了,可让控制器工作在文本方式,根据在LCD 上开始显示的行列号及每行的列数找出显示 RAM对应的地址,设立光标,在此送上该字符对应的代码即可。

1.4.1 1601使用说明

图1.4.1.1 1601引脚图

表1.4.1.1   LCD1601液晶模块的引脚

引脚

符号

功能说明

1

GND

接地

2

Vcc

+5V

3

VL

驱动LCD,一般将此脚接地

4

RS

寄存器选择 0:指令寄存器(WRITE)Busy flag,位址计数器(READ)   1:数据寄存器(WRITE,READ)

5

R/W

READ/WRITE选择  1:READ   0:WTITE

6

E

读写使能(下降沿使能)

7

DB0

低4位三态、双向数据总线

续表1.4.1.1   LCD1601液晶模块的引脚

8

DB1

9

DB2

10

DB3

11

DB4

高4位三态、双向数据总线

另外DB7也是一个Busy flag

12

DB5

13

DB6

14

DB7

寄存器选择,如表所示:

表1.4.1.3  寄存器选择控制线操作

RS

R/W

操作说明

0

0

写入指令寄存器(清除屏幕…等)

0

1

读Busy flag(DB7),以及读取位址计数器(DB0~DB6)值

1

0

写入数据寄存器(显示各字型等)

1

1

从数据寄存器读取数据

Busy flag(DB7):在此位未被清除为“0”时,LCD将无法再处理其他指令要求。

(1)显示地址:内部地址计数器的计数地址:SB7=0(DB0~DB6)第一行00、01、02… …等,第二行40、41、42… …等,可配合检测DB7=1 (RS=0,R/W=1)读取目前显示字的地址,判断是否需要换行。

表1.4.1.4   LCD1601 16×1 显示字的地址

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

00

01

02

03

04

05

06

07

40

41

42

43

44

45

46

47

(2)外部地址:DB7=1,亦即80H+内部计数地址,可以用此方式将字显示在某一位置。

LCD各地址列举如下表:

表1.4.1.5   LCD1601 16×1 显示字的外部地址

16×1  16字1行 1601

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

80

81

82

83

84

85

86

87

C0

C1

C2

C3

C4

C5

C6

C7

表1.4.1.6   LCD1601 的指令组

指  令

说  明

设置码

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

清除显示幕

0

0

0

0

0

0

0

0

0

*

光标回到原点

0

0

0

0

0

0

0

0

1

*

进入模式设定

0

0

0

0

0

0

0

1

I/D

S

显示幕ON/OFF

0

0

0

0

0

0

1

D

C

B

移位

0

0

0

0

0

1

S/C

R/L

*

*

功能设定

0

0

0

0

1

DL

N

F

*

*

字发生器地址设定

0

0

0

1

AGC

设置显示地址

0

0

0

1

ADD

忙碌标志位BF

0

0

1

BF

显示数据

1

0

写入数据

读取数据

1

1

读取数据

I/D  I/D=1  表示加1,         I/D=0 表示减1

S    S=1  表示显示幕ON  S=0表示OFF

D    D=1  表示显示屏幕ON      D=0表示显示屏幕OFF

C    C=1  表示光标ON          C=0表示光标OFF

B    B=1  表示闪烁ON          B=0表示显示闪烁OFF

S/C  S/C=1表示显示屏幕移位    S/C=0光标移位

R/L  R/L=1表示右移            R/L=0表示左移

DL   DL=1表示8位              DL=0表示4位

F    F=1表示5×10点矩阵       F=0表示5×7点矩阵

N    N=1表示2行显示行         N=0表示1行显示行

BF   BF=1:内部正在动作         BF=0:可接收指令或数据码

1.4.2 液晶显示部分与89S52的接口

如图所示:用89S52的P2口作为数据线,用P0.1、P0.2、P0.3分别作为LCD的E、R/W、RS。其中E是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:显示模块初始化:首先清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。

图1.5.1 MAX232引脚功能图

如果学弟学妹们在毕设方面有任何问题,随时可以私信我咨询哦,有问必答!学长专注于单片机相关的知识,可以解决单片机设计、嵌入式系统、编程和硬件等方面的难题。
愿毕业生有力,陪迷茫着前行!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值