单片机数字温度计毕业设计提纲 大纲 参考(精选合集)

时间:2019-05-14 04:36:28下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《单片机数字温度计毕业设计提纲 大纲 参考》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《单片机数字温度计毕业设计提纲 大纲 参考》。

第一篇:单片机数字温度计毕业设计提纲 大纲 参考

毕业论文设计提纲

生:

专业: 电子信息工程技术

指导教师:

职称: 高级电子工程师 【题目】

《 单片机数字温度计显示设计 》 【摘要】

(对设计进行评估)

【关键字】

单片机、温度传感器、数字显示

设计准备:搜集、分析相关资料确定实现的系统功能,及相关配套知识。设计功能: 1.设计内容

采用数字式温度传感器为检测器件,进行单点温度检测。用数码管直接显示温度值,微机系统作为数字温度计的控制系统。

(1)检测的温度范围:0℃~100℃,检测分辨率 0.5℃。(2)用4位数码管来显示温度值。(3)超过警戒值(自己定义)要报警提示。2.拟达到目标

设计出来的电子温度计能够精确的测量出温度值,能够显示0℃~120℃的温度,超过或者低于设定上下线时能够准确的发出警报(自定义)。////////蓝色字体可不用 【内容】

第1章 系统总体设计及功能

1.1

设计背景

1.2

电路工作原理

1.3

设计实现功能

1.4

设计所需软件

第2章

单片机原理与应用系统硬件选取

2.1

AT89S51概述

(功能、参数具体在分小节)2.2

DS18B20概述

(参数、实用方法在分小节)第3章 系统硬件原理电路设计

3.1 单片机最小系统电路设计 3.2 温度传感器电路设计 3.3 显示电路设计

3.4 报警电路设计(可选)第4章

系统应用软件设计

4.1 系统程序流程图 4.2 系统程序代码

第5章

系统软件仿真及硬件测试

5.2

应用仿真软件仿真测试

5.3

进行实物硬件测试(可选)第6章

全文设计总结

6.1

设计整体效果

6.2

设计发展及期待 致谢

参考文献

(后备上)附件

(可选)

第二篇:基于单片机的数字温度计设计课程设计

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

引言

随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。与传统的温度计相比,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。选用AT89C51型单片机作为主控制器件,DSl8B20作为测温传感器通过4位共阳极LED数码管串口传送数据,实现温度显示。通过DSl8B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.1℃。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。

系统硬件设计方案

根据系统功能要求,构造图1所示的系统原理结构框图。

图1

系统原理结构框图

2.1

单片机的选择

AT89C51作为温度测试系统设计的核心器件。该器件是INTEL公司生产的MCS一5l系列单片机中的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS—51的CMOS产品。不仅结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,而且继承和扩展了MCS—48单片机的体系结构和指令系统。单片机小系统的电路图如图2所示。

图2

单片机小系统电路

AT89C51单片机的主要特性:

(1)与MCS-51

兼容,4K字节可编程闪烁存储器;

(2)灵活的在线系统编程,掉电标识和快速编程特性;

(3)寿命为1000次写/擦周期,数据保留时间可10年以上;

(4)全静态工作模式:0Hz-33Hz;

(5)三级程序存储器锁定;

(6)128*8位内部RAM,32可编程I/O线;

(7)两个16位定时器/计数器,6个中断源;

(8)全双工串行UART通道,低功耗的闲置和掉电模式;

(9)看门狗(WDT)及双数据指针;

(9)片内振荡器和时钟电路;

2.2

温度传感器介绍

DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EPROM中,掉电后依然保存。

温度传感器DS18B20引脚如图3所示。

8引脚封装

TO-92封装

图3

温度传感器

引脚功能说明:

NC

:空引脚,悬空不使用;

VDD

:可选电源脚,电源电压范围3~5.5V。当工作于寄生电源时,此引脚必须接地。

DQ

:数据输入/输出脚。漏极开路,常态下高电平。

GND

:为电源地

DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。

该字节各位的意义如下:

TM

R1

R0

低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如表1所示:(DS18B20出厂时被设置为12位)

表1

DS18B20温度转换时间表

R1

R0

分辨率/位

温度最大转向时间

0

0

93.75

0

187.5

0

375

750

根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

2.3

温度传感器与单片机的连接

温度传感器的单总线(1-Wire)与单片机的P2.0连接,P2.0是单片机的高位地址线A8。P2端口是一个带内部上拉电阻的8位双向I/O,其输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对该端口写“1”,可通过内部上拉电阻将其端口拉至高电平,此时可作为输入口使用,这是因为内部存在上拉电阻,某一引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时。如执行MOVX

DPTR指令,则表示P2端口送出高8位的地址数据。在访问8位地址的外部数据存储器时,可执行MOVX

RI指令,P2端口内容即为特殊功能寄存器(SFR)区中R2寄存器内容,整个访问期间不改变。在Flash编程和程序校验时,P2端口也接收高位地址和其他控制信号。图4为DSl8820内部结构。图5为DSl8820与单片机的接口电路。

图4

DS18B20内部结构图

图5

DS18B20和单片机的接口连接

2.4

复位信号及外部复位电路

单片机的P1.6端口是MAX813看门狗电路中喂狗信号的输入端,即单片机每执行一次程序就设置一次喂狗信号,清零看门狗器件。若程序出现异常,单片机引脚RST将出现两个机器周期以上的高电平,使其复位。该复位信号高电平有效,其有效时间应持续24个振荡脉冲周期即两个机器周期以上。若使用频率为12

MHz的晶体振荡器,则复位信号持续时间应超过2μs才完成复位操作。

2.5

单片机与报警电路

系统中的报警电路是由发光二极管和限流电阻组成,并与单片机的P1.2端口连接。P1端口的作用和接法与P2端口相同,不同的是在Flash编程和程序校验期间,P1接收低8位地址数据。

2.6

电源电路

由于该系统需要稳定的5

V电源,因此设计时必须采用能满足电压、电流和稳定性要求的电源。该电源采用三端集成稳压器LM7805。它仅有输入端、输出端及公共端3个引脚,其内部设有过流保护、过热保护及调整管安全保护电路.由于所需外接元件少,使用方便、可靠,因此可作为稳压电源。图6为电源电路连接图。

图6

电源电路连接图

2.7

显示电路

采用技术成熟的74HCl64实现串并转换。LED显示分为静态显示和动态显示。这里采用静态显示,系统通过单片机的串行口来实现静态显示。串行口为方式零状态,即工作在移位寄存器方式,波特率为振荡频率的1/12。当器件执行任何一条将SBUF作为目的寄存器的命令时,数据便开始从RXD端发送。在写信号有效时,相隔一个机器周期后发送控制端SEND有效,即允许RXD发送数据,同时允许从TXD端输出移位脉冲。图7为显示电路的连接图。

图7

显示电路的连接图

2.8

看门狗电路

系统中把P1.6作为看门狗的“喂狗”信号;将MAX813的RESET与单片机的复位信号RST连接。由于单片机每执行一次程序,就会给看门狗器件一个复位信号,这样也可以用手工方式实现复位。当按键按下时,SW—SPST就会在MAX813引脚产生一个超过200

ms的低电平,其实看门狗器件在1.6

s时间内没有复位,使7引脚输出一个复位信号的作用是相同的,其连接图如图8所示。

图8

看门狗器件的MAX813的连接图

软件设计

DSl8820的主要数据元件有:64位激光Lasered

ROM,温度灵敏元件和非易失性温度告警触发器TH和TL。DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。此外,还可外接5

V电源,给DSl8820供电。DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。图9为读取数据流程图。

开始

DS18B20的初始化

启动温度转换

读取温度寄存器

跳过读序列号的操作

跳过读序列号的操作

DS18B20的初始化

RET

LOW-低八位

HIGH-高八位

图9

读取数据的流程图

读出温度数据后,LOW的低四位为温度的小数部分,可以精确到0.0625℃,LOW的高四位和HIGH的低四位为温度的整数部分,HIGH的高四位全部为1表示负数,全为0表示正数。所以先将数据提取出来,分为三个部分:小数部分、整数部分和符号部分。小数部分进行四舍五入处理:大于0.5℃的话,向个位进1;小于0.5℃的时候,舍去不要。当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。还因为DS18B20最低温度只能为-55℃,所以可以将整数部分的最高位换成一个“-”,表示为负数。图10为温度数据处理程序的流程图。

开始

提取整数部分存入HT

提取小数部分存入LT

LT右移三位,将精度降低到0.5摄氏度

HT++

将小数部分整数化

提取符号部分存入sign

LT是否大于5

Sign=?0XF0

RET

负数表示flag=1

HT=~HT+1

Y

N

N

Y

图10

温度数据处理流程图

数据测试

将温度传感器与冰水混合物接触,经过充分搅拌达到热平衡后调节系统,使显示读数为0.00(标定0℃);利用气压计读出当时当地的大气压强,并根据大气压强和当地重力加速度计算出当时的实际压强;根据沸点与压强的关系查出沸点温度。把温度传感器放入沸水中,待显示读数稳定后重新调节,使显示器显示读数等于当地当时沸点温度后工作结束。该温度计的量程为-50℃~150℃,读数精度为0.1℃,实际使用一般在0℃~100℃。采用0℃~50℃和50℃~100℃的精密水银温度计作检验标准,对设计的温度计进行测试,其结果表明能达到该精度要求。

总结与体会

作为一名电子信息工程的大四学生,我觉得做单片机课程设计是很有意义的,而且也是必要的。在做这次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的实际资料是十分必要的,也是必不可少的。

其次,在这次课程设计中,我们运用了以前学过的专业课知识,如:proteus仿真、汇编语言、模拟和数字电路知识等。虽然过去我从未独立应用过他们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。

最后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,这样为资料的保留和交流提供了方便;在设计中遇到的问题要记录,以免下次遇到同样的问题。

在这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常写与读的过程中才能提高,这就是这次课程设计的最大收获。

附录1

仿真图

附录2

程序源代码

DATA_BUS

BIT

P3.3

FLAG

BIT

00H

;标志位

TEMP_L

EQU

30H

;温度值低字节

TEMP_H

EQU

31H

;温度值高字节

TEMP_DP

EQU

32H

;温度小数

TEMP_INT

EQU

33H

;温度值整数

TEMP_BAI

EQU

34H

;温度百位数

TEMP_SHI

EQU

35H

;温度十位数

TEMP_GE

EQU

36H

;温度个位数

DIS_BAI

EQU

37H

;显示百位数

DIS_SHI

EQU

38H

;显示十位数

DIS_GE

EQU

39H

;显示个位数

DIS_DP

EQU

3AH

;显示小数位

DIS_ADD

EQU

3BH

;显示地址

ORG

0000H

AJMP

START

ORG

0050H

;初始化

START:

MOV

SP,#40H

MAIN:

LCALL

READ_TEMP

;调读温度程序

LCALL

PROCESS

;调数据处理程序

AJMP

MAIN

;读温度程序

READ_TEMP:

LCALL

RESET_PULSE

;调用复位脉冲程序

MOV

A,#0CCH

;跳过ROM命令

LCALL

WRITE

MOV

A,#44H

;读温度

LCALL

WRITE

LCALL

DISPLAY

;显示温度

LCALL

RESET_PULSE

;调用复位脉冲程序

MOV

A,#0CCH

;跳过ROM命令

LCALL

WRITE

MOV

A,#0BEH

;读缓存命令

LCALL

WRITE

LCALL

READ

RET

;复位脉冲程序

RESET_PULSE:

RESET:

SETB

DATA_BUS

NOP

NOP

CLR

DATA_BUS

MOV

R7,#255

DJNZ

R7,$

SETB

DATA_BUS

MOV

R7,#30

DJNZ

R7,$

JNB

DATA_BUS,SETB_FLAG

CLR

FLAG

AJMP

NEXT

SETB_FLAG:

SETB

FLAG

NEXT:

MOV

R7,#120

DJNZ

R7,$

SETB

DATA_BUS

JNB

FLAG,RESET

RET

;写命令

WRITE:

SETB

DATA_BUS

MOV

R6,#8

CLR

C

WRITING:

CLR

DATA_BUS

MOV

R7,#5

DJNZ

R7,$

RRC

A

MOV

DATA_BUS,C

MOV

R7,#30H

DJNZ

R7,$

SETB

DATA_BUS

NOP

DJNZ

R6,WRITING

RET

;循环显示段位

DISPLAY:

MOV

R4,#200

DIS_LOOP:

MOV

A,DIS_DP

MOV

P2,#0FFH

MOV

P0,A

CLR

P2.7

LCALL

DELAY2MS

MOV

A,DIS_GE

MOV

P2,#0FFH

MOV

P0,A

SETB

P0.7

CLR

P2.6

LCALL

DELAY2MS

MOV

A,DIS_SHI

MOV

P2,#0FFH

MOV

P0,A

CLR

P2.5

LCALL

DELAY2MS

MOV

A,DIS_BAI

MOV

P2,#0FFH

MOV

P0,A

MOV

A,TEMP_BAI

CJNE

A,#0,SKIP

AJMP

NEXTT

SKIP:

CLR

P2.4

LCALL

DELAY2MS

NEXTT:

NOP

DJNZ

R4,DIS_LOOP

RET

;读命令

READ:

SETB

DATA_BUS

MOV

R0,#TEMP_L

MOV

R6,#8

MOV

R5,#2

CLR

C

READING:

CLR

DATA_BUS

NOP

NOP

SETB

DATA_BUS

NOP

NOP

NOP

NOP

MOV

C,DATA_BUS

RRC

A

MOV

R7,#30H

DJNZ

R7,$

SETB

DATA_BUS

DJNZ

R6,READING

MOV

@R0,A

INC

R0

MOV

R6,#8

SETB

DATA_BUS

DJNZ

R5,READING

RET

;数据处理

PROCESS:

MOV

R7,TEMP_L

MOV

A,#0FH

ANL

A,R7

MOV

TEMP_DP,A

MOV

R7,TEMP_L

MOV

A,#0F0H

ANL

A,R7

SWAP

A

MOV

TEMP_L,A

MOV

R7,TEMP_H

MOV

A,#0FH

ANL

A,R7

SWAP

A

ORL

A,TEMP_L

MOV

B,#64H

DIV

AB

MOV

TEMP_BAI,A

MOV

A,#0AH

XCH

A,B

DIV

AB

MOV

TEMP_SHI,A

MOV

TEMP_GE,B

MOV

A,TEMP_DP

MOV

DPTR,#TABLE_DP

MOVC

A,@A+DPTR

MOV

DPTR,#TABLE_INTER

MOVC

A,@A+DPTR

MOV

DIS_DP,A

MOV

A,TEMP_GE

MOV

DPTR,#TABLE_INTER

MOVC

A,@A+DPTR

MOV

DIS_GE,A

MOV

A,TEMP_SHI

MOV

DPTR,#TABLE_INTER

MOVC

A,@A+DPTR

MOV

DIS_SHI,A

MOV

A,TEMP_BAI

MOV

DPTR,#TABLE_INTER

MOVC

A,@A+DPTR

MOV

DIS_BAI,A

RET

DELAY2MS:

MOV

R6,#3

LOOP3:

MOV

R5,#250

DJNZ

R5,$

DJNZ

R6,LOOP3

RET

TABLE_DP:

DB

00H,01H,01H,02H,03H,03H,04H,04H,05H,06H

DB

06H,07H,08H,08H,09H,09H

TABLE_INTER:

DB

03FH,006H,05BH,04FH,066H

DB

06DH,07DH,07H,07FH,06FH

END

第三篇:基于51单片机数字温度计设计课程设计

题:

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

业:

电子信息工程

级:

号:

名:

指导教师:

设计日期:

成绩:

XX大学XX学院电气学院

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

一、设计目的1、掌握单片机电路的设计原理、组装与调试方法。

2、掌握LED数码显示电路的设计和使用方法。

3、掌握DS18B20温度传感器的工作原理及使用方法。

二、设计要求

1、本次单片机课程设计要求以51系列单片机为核心,以开发板为平台。

2、设计一个数字式温度计,要求使用DS18B20温度传感器测量温度。

3、经单片机处理后,要求用4位一体共阴LED数码管来设计显示电路,以显示测量的温度值。

4、另外还要求在设计中加入报警系统,如果我们所设计的系统用来监控某一设备,当设备的温度超过或低于我们所设定的温度值时,系统会产生报警。

5、要求在设计中加入上下限警报温度设置电路。

三、设计的具体实现

1数字温度计设计的方案

在做数字温度计的单片机电路中,对信号的采集电路大多都是使用传感器,这是非常容易实现的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。采集之后,通过使用51系列的单片机,可以对数据进行相应的处理,再由LED显示电路对其数据进行显示。

2系统设计框图

温度计电路设计总体设计方框图如下图所示,控制器采用单片机AT89C51,温度传感器采用DS18B20,用4位一体共阴LED数码管以串口传送数据实现温度显示。此外,还添加了报警系统,对温度实施监控。

3主控器AT89C51芯片

对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有内部RAM,系统又需要大量内存存储数据,因而不适用。AT89C51

以低价位单片机可为提供许多高性价比的应用场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要该器件是INTEL公司生产的MCS一5l系列单片机中的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS—51的CMOS产品。

AT8951的管脚如下图所示:

AT89C51芯片管脚图

4时钟电路

80C51时钟有两种方式产生,即内部方式和外部方式。80C51中有一个构成内部震荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。本次采用内部震荡电路,瓷片电容采用22PF,晶振为12MHZ。

晶体震荡电路图

复位电路

单片机系统的复位电路在这里采用的是上电+按钮复位电路形式,其中电阻R采用10KΩ的阻值,电容采用10μF的电容值。

复位电路

温度传感电路

DALLAS

最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。DALLAS

半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。温度测量范围为-55~+125

摄氏度,可编程为9位~12

位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM

中,掉电后依然保存。被测温度用符号扩展的16位数字量方式串行输出。

DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列、各种封装形式,DQ

为数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地,如下图所示。

DS18B20管脚图

显示电路

对于数字温度的显示,我们采用4位一体共阴LED数码管。足够显示0~100中各位数,并且还能显示一位小数部分。

4位LED数码显示管

温度报警电路

对于数字温度计的设计,除了温度的数字显示功能外还加入了报警系统,当测量的温度超过或低于我们所设定的温度值时,系统会产生报警并亮红灯报警。

其电路图如下所示。

蜂鸣器红灯报警系统电路图

源程序:

/********************************************************************

*

程序名;

基于51单片机的温度计

*

能:

实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来

*

进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限

*

调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动

*

退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除

*

按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能,*

K1是实现减1功能,K3是用来设定上下限温度正负的。

*********************************************************************/

#include

#include//将intrins.h头文件包含到主程序(调用其中的_nop_()空操作函数延时)

#define

uint

unsigned

int

#define

uchar

unsigned

char

uchar

max=0x00,min=0x00;

//max是上限报警温度,min是下限报警温度

bit

s=0;

//s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右

bit

s1=0;

//s1标志位用于上下限查看时的显示

void

display1(uint

z);

#include“ds18b20.h“

#include“keyscan.h“

#include“display.h“

/******************************************************/

/*

主函数

/

/*****************************************************/

void

main()

{

beer=1;

//关闭蜂鸣器

led=1;

//关闭LED灯

timer1_init(0);

//初始化定时器1(未启动定时器1)

get_temperature(1);

//首次启动DS18B20获取温度(DS18B20上电后自动将EEPROM中的上下限温度复制到TH和TL寄存器)

while(1)

{

keyscan();

get_temperature(0);

display(temp,temp_d*0.625);

alarm();

}

}

/**********************************************************************

*

程序名;

ds18b20数码管动态显示头文件

*

能:

通过定时器0延时是数码管动态显示

**********************************************************************/

#ifndef

__ds18b20_display_H__

#define

__ds18b20_display_H__

#define

uint

unsigned

int

//变量类型宏定义,用uint表示无符号整形(16位)

#define

uchar

unsigned

char

//变量类型宏定义,用uchar表示无符号字符型(8位)

sbit

wei1=P2^4;

//可位寻址变量定义,用wei1表示P2.4口

sbit

wei2=P2^5;

//用wei2表示P2.5口

sbit

wei3=P2^6;

//用wei3表示P2.6口

sbit

wei4=P2^7;

//用wei4表示P2.7口

uchar

num=0;

//定义num为全局无符号字符型变量,赋初值为‘0’

uchar

code

temperature1[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//定义显示码表0~9

uchar

code

temperature2[]={

0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

//带小数点的0~9.uchar

code

temperature3[]={

0x00,0x80,0x40,0x76,0x38};//依次是‘不显示’‘.’‘-’‘H’‘L’

/******************************************************/

/

延时子函数

/

/*****************************************************/

void

display_delay(uint

t)

//延时1ms左右

{

uint

i,j;

for(i=t;i>0;i--)

for(j=120;j>0;j--);

}

/******************************************************/

/*

定时器1初始化函数

/

/*****************************************************/

void

timer1_init(bit

t)

{

TMOD=0x10;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET1=1;

TR1=t;

//

局部变量t为1启动定时器1,为0关闭定时器1

}

/******************************************************/

/*

定时器1中断函数

/

/*****************************************************/

void

timer1()

interrupt

{

TH0=0x3c;

//重新赋初值,定时50ms

TL0=0xb0;

num++;

//每进入一次定时器中断num加1(每50ms加1一次)

if(num<5)

{s=1;if(w==1){beer=1;led=1;}else{beer=1;led=1;}}

else

//进入4次中断,定时200ms时若报警标志位w为‘1’则启动报警,不为‘1’不启动

//实现间歇性报警功能

{s=0;if(w==1){beer=0;led=0;}else{beer=1;led=1;}}

if(num>20)

//进入20次中断,定时1s

{

num=0;

//num归0,重新定开始定时1s

s1=0;

//定时1s时间到时自动关闭报警上下限显示功能

v1=1;

//定时1s时间到时自动关闭报警上下限查看功能

}

}

/******************************************************/

/*

调整报警上下限选择函数

/

/*****************************************************/

void

selsct_1(uchar

f,uchar

k)

//消除百位的0显示,及正负温度的显示选择

{

if(f==0)

//若为正温度,百位为0则不显示百位,不为0则显示

{

if(k/100==0)

P0=temperature3[0];

else

P0=temperature1[k/100];

}

if(f==1)

//若为负温度,若十位为0,百位不显示,否则百位显示‘-’

{

if(k%100/10==0)

P0=temperature3[0];

else

P0=temperature3[2];

}

}

void

selsct_2(bit

f,uchar

k)

//消除十位的0显示,及正负温度的显示选择

{

if(f==0)

//若为正温度,百位十位均为0则不显示十位,否则显示十位

{

if((k/100==0)&&(k%100/10==0))

P0=temperature3[0];

else

P0=temperature1[k%100/10];

}

if(f==1)

//若为负温度,若十位为0,十位不显示,否则十位显示‘-’

{

if(k%100/10==0)

P0=temperature3[2];

else

P0=temperature1[k%100/10];

}

}

/******************************************************/

/*

主函数显示

/

/*****************************************************/

void

display(uchar

t,uchar

t_d)

//用于实测温度、上限温度的显示

{

uchar

i;

for(i=0;i<4;i++)

//依次从左至右选通数码管显示,实现动态显示

{

switch(i)

{

case

0:

//选通第一个数码管

wei2=1;

//关第二个数码管

wei3=1;

//关第三个数码管

wei4=1;

//关第四个数码管

wei1=0;

//开第一个数码管

if(a==0){selsct_1(f,t);}

//若a=0则在第一个数码管上显示测量温度的百位或‘-’

if(a==1)

{

P0=temperature3[3];

//若a=1则在第一个数码管上显示‘H’

}

if(a==2)

{

P0=temperature3[4];

//若a=2则在第一个数码管上显示‘L’

}

break;

case

1:

//选通第二个数码管

wei1=1;

wei3=1;

wei4=1;

wei2=0;

if(a==0){selsct_2(f,t);}

//若a=0则在第二个数码管上显示测量温度的十位或‘-’

if(a==1)

//若a=1则在第二个数码管上显示上限报警温度的百位或‘-’

{

if(s==0)

selsct_1(f_max,max);//若s=0则显示第二个数码管,否则不显示

else

P0=temperature3[0];

//通过s标志位的变化实现调节上下限报警温度时数码管的闪烁

if(s1==1)

selsct_1(f_max,max);//若s1=1则显示第二个数码管(s1标志位用于上下限查看时的显示)

}

if(a==2)

//若a=2则在第二个数码管上显示下限报警温度的百位或‘-’

{

if(s==0)

selsct_1(f_min,min);

else

P0=temperature3[0];

if(s1==1)

selsct_1(f_min,min);

}

break;

case

2:

//选通第三个数码管

wei1=1;

wei2=1;

wei4=1;

wei3=0;

if(a==0){P0=temperature2[t%10];}//若a=0则在第三个数码管上显示测量温度的个位

if(a==1)

//若a=1则在第三个数码管上显示上限报警温度的十位或‘-’

{

if(s==0)

selsct_2(f_max,max);//若s=0则显示第三个数码管,否则不显示

else

P0=temperature3[0];

if(s1==1)

selsct_2(f_max,max);//若s1=1则显示第三个数码管

}

if(a==2)

//若a=2则在第三个数码管上显示下限报警温度的十位或‘-’

{

if(s==0)

selsct_2(f_min,min);

else

P0=temperature3[0];

if(s1==1)

selsct_2(f_min,min);

}

break;

case

3:

//选通第四个数码管

wei1=1;

wei2=1;

wei3=1;

wei4=0;

if(a==0){P0=temperature1[t_d];}//若a=0则在第四个数码管上显示测量温度的小数位

if(a==1)

//若a=1则在第四个数码管上显示上限报警温度的个位

{

if(s==0)

P0=temperature1[max%10];//若s=0则显示第四个数码管,否则不显示

else

P0=temperature3[0];

if(s1==1)

P0=temperature1[max%10];//若s1=1则显示第四个数码管

}

if(a==2)

//若a=2则在第四个数码管上显示下限报警温度的个位

{

if(s==0)

P0=temperature1[min%10];

else

P0=temperature3[0];

if(s1==1)

P0=temperature1[min%10];

}

break;

}

display_delay(10);

//每个数码管显示3ms左右

}

}

/******************************************************/

/*

开机显示函数

/

/*****************************************************/

void

display1(uint

z)

//用于开机动画的显示

{

uchar

i,j;

bit

f=0;

for(i=0;i

//‘z’是显示遍数的设定

{

for(j=0;j<4;j++)

//依次从左至右显示‘-’

{

switch(j)

{

case

0:

wei2=1;

wei3=1;

wei4=1;

wei1=0;

break;

P0=temperature3[2];//第一个数码管显示

case

1:

wei1=1;

wei3=1;

wei4=1;

wei2=0;break;

P0=temperature3[2];//第二个数码管显示

case

2:

wei1=1;

wei2=1;

wei4=1;

wei3=0;break;

P0=temperature3[2];//第三个数码管显示

case

3:

wei1=1;

wei2=1;

wei3=1;

wei4=0;break;

P0=temperature3[2];//第四个数码管显示

}

display_delay(400);

//每个数码管显示200ms左右

}

}

}

#endif

/********************************************************************

*

程序名;

DS18B20头文件

*

明:用到的全局变量是:无符号字符型变量temp(测得的温度整数部分),temp_d

*

(测得的温度小数部分),标志位f(测量温度的标志位‘0’表示“正温度”‘1’表

*

示“负温度”),标志位f_max(上限温度的标志位‘0’表示“正温度”、‘1’表

*

示“负温度”),标志位f_min(下限温度的标志位‘0’表示“正温度”、‘1’表

*

示“负温度”),标志位w(报警标志位‘1’启动报警‘0’关闭报警)。

*********************************************************************/

#ifndef

__ds18b20_h__

//定义头文件

#define

__ds18b20_h__

#define

uint

unsigned

int

#define

uchar

unsigned

char

sbit

DQ=

P2^3;

//DS18B20接口

sbit

beer=P1^0;

//用beer表示P1.0

sbit

led=P1^1;

//用led表示P1.1

uchar

temp=0;

//测量温度的整数部分

uchar

temp_d=0;

//测量温度的小数部分

bit

f=0;

//测量温度的标志位,0’表示“正温度”

‘1’表示“负温度”)

bit

f_max=0;

//上限温度的标志位‘0’表示“正温度”

‘1’表示“负温度”)

bit

f_min=0;

//下限温度的标志位‘0’表示“正温度”、‘1’表示“负温度”)

bit

w=0;

//报警标志位‘1’启动报警‘0’关闭报警

/******************************************************/

/*

延时子函数

/

/*****************************************************/

void

ds18b20_delayus(uint

t)

//延时几μs

{

while(t--);

}

void

ds18b20_delayms(uint

t)

//延时1ms左右

{

uint

i,j;

for(i=t;i>0;i--)

for(j=120;j>0;j--);

}

/******************************************************/

/*

DS18B20初始化函数

/

/*****************************************************/

void

ds18b20_init()

{

uchar

c=0;

DQ=1;

DQ=0;

//控制器向DS18B20发低电平脉冲

ds18b20_delayus(80);

//延时15-80μs

DQ=1;

//控制器拉高总线,while(DQ);

//等待DS18B20拉低总线,在60-240μs之间

ds18b20_delayus(150);

//延时,等待上拉电阻拉高总线

DQ=1;

//拉高数据线,准备数据传输;

}

/******************************************************/

/*

DS18B20字节读函数

/

/*****************************************************/

uchar

ds18b20_read()

{

uchar

i;

uchar

d=0;

DQ

=

1;

//准备读;

for(i=8;i>0;i--)

{

d

>>=

1;

//低位先发;

DQ

=

0;

_nop_();

_nop_();

DQ

=

1;

//必须写1,否则读出来的将是不预期的数据;

if(DQ)

//在12us处读取数据;

d

|=

0x80;

ds18b20_delayus(10);

}

return

d;

//返回读取的值

}

/******************************************************/

/*

DS18B20字节写函数

/

/*****************************************************/

void

ds18b20_write(uchar

d)

{

uchar

i;

for(i=8;i>0;i--)

{

DQ=0;

DQ=d&0x01;

ds18b20_delayus(5);

DQ=1;

d

>>=

1;

}

}

/******************************************************/

/*

获取温度函数

/

/*****************************************************/

void

get_temperature(bit

flag)

{

uchar

a=0,b=0,c=0,d=0;

uint

i;

ds18b20_init();

ds18b20_write(0xcc);

//向DS18B20发跳过读ROM命令

ds18b20_write(0x44);

//写启动DS18B20进行温度转换命令,转换结果存入内部RAM

if(flag==1)

{

display1(1);

//用开机动画耗时

}

else

ds18b20_delayms(1);

ds18b20_init();

ds18b20_write(0xcc);

ds18b20_write(0xbe);

a=ds18b20_read();

//读内部RAM

(LSB)

b=ds18b20_read();

//读内部RAM

(MSB)

if(flag==1)

//局部位变量f=1时读上下线报警温度

{

max=ds18b20_read();

//读内部RAM

(TH)

min=ds18b20_read();

//读内部RAM

(Tl)

}

if((max&0x80)==0x80)

//若读取的上限温度的最高位(符号位)为‘1’表明是负温度

{f_max=1;max=(max-0x80);}

//将上限温度符号标志位置‘1’表示负温度,将上限温度装换成无符号数。

if((min&0x80)==0x80)//若读取的下限温度的最高位(符号位)为‘1’表明是负温度

{f_min=1;min=(min-0x80);}

//将下限温度符号标志位置‘1’表示负温度,将下限温度装换成无符号数。

i=b;

i>>=4;

if

(i==0)

{

f=0;

//i为0,正温度,设立正温度标记

temp=((a>>4)|(b<<4));

//整数部分

a=(a&0x0f);

temp_d=a;

//小数部分

}

else

{

f=1;

//i为1,负温度,设立负温度标记

a=~a+1;

b=~b;

temp=((a>>4)|(b<<4));

//整数部分

a=(a&0x0f);

//小数部分

temp_d=a;

}

}

/******************************************************/

/*

存储极限温度函数

/

/*****************************************************/

void

store_t()

{

if(f_max==1)

//若上限温度为负,将上限温度转换成有符号数

max=max+0x80;

if(f_min==1)

//若下限温度为负,将上限温度转换成有符号数

min=min+0x80;

ds18b20_init();

ds18b20_write(0xcc);

ds18b20_write(0x4e);

//向DS18B20发写字节至暂存器2和3(TH和TL)命令

ds18b20_write(max);

//向暂存器TH(上限温度暂存器)写温度

ds18b20_write(min);

//向暂存器TL(下限温度暂存器)写温度

ds18b20_write(0xff);

//向配置寄存器写命令,进行温度值分辨率设置

ds18b20_init();

ds18b20_write(0xcc);

ds18b20_write(0x48);

//向DS18B20发将RAM中2、3字节的内容写入EEPROM

}

//DS18B20上电后会自动将EEPROM中的上下限温度拷贝到TH、TL暂存器

/******************************************************/

/*

温度超限报警函数

/

/*****************************************************/

void

alarm()

{

//若上限值是正值

if(f_max==0)

{

if(f_min==0)

//若下限值是正值

{

if(f==0)

//若测量值是正值

{

if(temp<=min||temp>=max)

{w=1;TR1=1;}

//当测量值小于最小值或大于最大值时报警

if((tempmin))

{w=0;}

//当测量值大于最小值且小于最大值时不报警

}

if(f==1){w=1;TR1=1;}

//若测量值是负值时报警

}

if(f_min==1)

//若下限值是负值

{

if(f==0)

//若测量值是正值

{

if(temp>=max)//当测量值大于最大值时报警

{w=1;TR1=1;}

if(temp

{w=0;}

}

if(f==1)

//若测量值是负值

{

if(temp>=min)//当测量值大于最小值时报警

{w=1;TR1=1;}

if(temp

{w=0;}

}

}

}

if(f_max==1)

//若下限值是负值

{

if(f_min==1)

//若下限值是负值

{

if(f==1)

//若测量值是负值

{

if((temp<=max)||(temp>=min))

{w=1;TR1=1;}

//当测量值小于最大值或大于最小值时报警

if((tempmax))

{w=0;}

//当测量值小于最小值且大于最大值时不报警

}

if(f==0){w=1;TR1=1;}

//若测量值是正值时报警

}

}

}

#endif

/********************************************************************

*

程序名;

基于51单片机的温度计

*

能:

实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来

*

进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限

*

调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动

*

退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除

*

按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能,*

K1是实现减1功能,K3是用来设定上下限温度正负的。

*********************************************************************/

#include

#include

//将intrins.h头文件包含到主程序(调用其中的_nop_()空操作函数延时)

#define

uint

unsigned

int

#define

uchar

unsigned

char

uchar

max=0x00,min=0x00;

//max是上限报警温度,min是下限报警温度

bit

s=0;

//s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右

bit

s1=0;

//s1标志位用于上下限查看时的显示

void

display1(uint

z);

//声明display1()函数(display.h头文件中的函数,ds18b20.h要用应先声明)

#include“ds18b20.h“

#include“keyscan.h“

#include“display.h“

/******************************************************/

/*

主函数

/

/*****************************************************/

void

main()

{

beer=1;

//关闭蜂鸣器

led=1;

//关闭LED灯

timer1_init(0);

//初始化定时器1(未启动定时器1)

get_temperature(1);

//首次启动DS18B20获取温度(DS18B20上电后自动将EEPROM中的上下限温度复制到TH和TL寄存器)

while(1)

{

keyscan();

get_temperature(0);

display(temp,temp_d*0.625);

alarm();

}

}

/**********************************************************************

*

程序名;

ds18b20keyscan函数

*

能:

通过键盘设定设定上下限报警温度

**********************************************************************/

#ifndef

__keyscan_H__

//定义头文件

#define

__keyscan_H__

sbit

key1=P2^2;

sbit

key2=P2^1;

sbit

key3=P2^0;

sbit

key4=P3^3;

uchar

i=0;

//定义全局变量i用于不同功能模式的选择,‘0’正常模式,‘1’上限调节模式,‘2’下限调节模式

uchar

a=0;

//定义全局变量a用于不同模式下数码管显示的选择

bit

k4=0;

//K4按键双功能选择位,k4=0时K4按键选择消按键音的功能,k4=1时K4按键选择正负温度设定功能

bit

v=0;

//K2、K3按键双功能选择位,v=0时选择上下限查看功能,v=1时选择上下限温度加减功能

bit

v1=0;

//v1=1时定时1250ms时间到自动关闭报警上下限查看功能

bit

v2=0;

/消按键音功能调整位,为‘0’时开按键音,为‘1’时关按键音

/******************************************************/

/*

读键盘延时子函数

/

/*****************************************************/

void

keyscan_delay(uint

z)

//延时1ms左右

{

uint

i,j;

for(i=z;i>0;i--)

for(j=120;j>0;j--);

}

/******************************************************/

/*

温度调节函数

/

/*****************************************************/

int

temp_change(int

count,bit

f)

//上下限温度调整

{

if(key2==0)

//判断K2是否按下

{

if(v2==0)beer=0;

//v2=0开按键音,否则消按键音

keyscan_delay(10);

//延时10ms

if(key2==0)

//再次判断K2是否按下(实现按按键时消抖)

{

beer=1;

//K2按下关按键音

if(f==0)

//若温度为正

{

count++;

//每按一下K2温度上调1

if(a==1){if(count>125)

count=125;}//当温度值大于125时不上调

if(a==2){if(count>125)

count=125;}

}

if(f!=0)

//若温度为负

{

count++;

//每按一下K2温度下调1

if(a==1){if(count>55)

count=55;}//当温度值小于-55时不再下调

if(a==2){if(count>55)

count=55;}

}

}

while(key2==0);

//K2松开按键时消抖

keyscan_delay(10);

}

if(key3==0)

{

if(v2==0)beer=0;

keyscan_delay(10);

if(key3==0)

//K3按按键时消抖

{

beer=1;

count--;

//每按一下K3温度为正时下调1,为负时上调1

if(a==1){if(count<0)

count=0;}//当温度值达到0时不再调

if(a==2){if(count<0)

count=0;}

}

while(key3==0);

keyscan_delay(10);

//K3松开按键时消抖

}

return

count;

}

/******************************************************/

/*

读键盘函数

/

/*****************************************************/

void

keyscan()

{

if(key1==0)

{

if(v2==0)beer=0;

keyscan_delay(10);

if(key1==0)

//K1按按键时消抖

{

beer=1;

TR1=1;

//开定时器1,通过s标志位的变化,实现在上下限温度调整时温度显示时闪烁的功能

k4=1;

//在上下温度调节功能模式下选择K4的调整上下限温度正负的功能

v=1;

//在上下温度调节功能模式下选择K2、K3的温度加减功能

i++;

//K1按一下i加1,i=‘0’进入正常模式,i=‘1’进入调上限模式,i=‘2’进入调下限模式

if(i>2)

//K1按下三次后退出调节模式

{

i=0;

//进入正常模式

TR1=0;

//关定时器1

k4=0;

//在正常模式下选择K4的消按键音功能

v=0;

//在正常模式下选择K2、K3的查看上下限报警温度功能

store_t();

//存储调整后的上下限报警温度

}

switch(i)

//显示选择

{

case

0:a=0;break;

//a=0选择显示测得的温度

case

1:a=1;break;

//a=1选择显示上限温度

case

2:a=2;break;

//a=2选择显示下限温度

default:break;

}

}

while(key1==0);

//K1松按键时消抖

keyscan_delay(10);

}

if(a==1&&v==1)

//a=1选择显示上限温度且v=1时选择上下限温度加功能

{led=0;max=temp_change(max,f_max);}//显示上限温度

else

if(a==2&&v==1)

//a=2选择显示下限温度且v=1时选择上下限温度减功能

{led=1;min=temp_change(min,f_min);}

else;

if(k4==1)

//k4=1时K4按键选择正负温度设定功能

{

if(key4==0)

{

if(v2==0)beer=0;

keyscan_delay(5);

if(key4==0)

{

beer=1;

if(a==1)

{if(max>55)

f_max=0;else

f_max=~f_max;}//当温度大于55度时,只能设定为正温度

if(a==2)

{if(min>55)

f_max=0;else

f_min=~f_min;}//当温度大于55度时,只能设定为正温度

}

while(key4==0);

keyscan_delay(10);

}

}

if(v==0)

//v=0时选择上下限查看功能

{

if(key2==0)

{

if(v2==0)beer=0;

keyscan_delay(10);

if(key2==0)

{

beer=1;

a=1;

//选择上限显示

TR1=1;

//开定时器1开始定时一分钟左右

s1=1;

//上限显示不闪烁,显示一分钟左右自动退出

}

while(key2==0);

keyscan_delay(10);

}

if(key3==0)

{

if(v2==0)beer=0;

keyscan_delay(10);

if(key3==0)

{

beer=1;

a=2;

//选择下限显示

TR1=1;

//开定时器1开始定时1s

s1=1;

//下限显示不闪烁,显示1s自动退出

}

while(key3==0);

keyscan_delay(10);

}

if(v1==1)

//v1=1时定时1s时间到自动关闭报警上下限查看功能

{a=0;v1=0;TR1=0;}

//a=0显示实测温度,v1清零,关定时器1

if(k4==0)

//k4=0时K4按键选择消按键音的功能

{

if(key4==0)

{

if(v2==0)beer=0;

keyscan_delay(10);

if(key4==0)

{

beer=1;

v2=~v2;

//为‘0’时开按键音,为‘1’时关按键音

}

while(key4==0);

keyscan_delay(10);

}

}

}

}

#endif

四、总结

单片机的学习与应用相关的总结与体会。在课设过程中,我们不仅巩固了平时所学习的单片机知识,而且通过不断查阅相关资料,学习新的知识,可以说,通过这次单片机的实践学习,我们学到了很多,而且对单片机的有关知识以及其在现实生活中的多方面应用有了更深层次的认识,这对于我们以后的学习和步入社会后参加工作都有很大的帮助。

在此次课程设计的进程中,我们遇到了很多问题,例如,一开始我们在确定课设题目后,在编写程序时,由于思路不太清晰,而且设计要求中需要使用新器件DS18B20智能测温,而其相关知识我们很模糊甚至可以说一无所知,不过后来,我们通过查找一些相关的资料书以及寻求辅导老师的帮助,又经过我们的主动思考,理清思路,终于将程序修改正确。在仿真时,由于我们有了之前的数模电课设仿真经验,所以此时我们课设进行的很顺利,并没有受到什么大的阻碍。

通过此次单片机课程设计,我们明白了很多,理论指导实践,但是理论也需要实践给予证明,不能盲目的相信书本,凡事都要通过自己的思考推敲,否则自己不会取的大的进步。而且在平时的学习生活中应该多和周围的同学相互学习,交流经验,遇到不会的东西时,切忌焦躁,首先要经过自己的独立思考,有了一定想法后,可以去查找相关的资料书刊或者找同学讨论,如果实在解释不了,再去找辅导老师,在这个遇到问题解决问题的过程中,不断加强自我的动脑能力,进而去指导动手能力,也只有这样,在思路清晰,条理顺畅的时候,再去进行软件编写和硬件操作工作,才有可能起到事半功倍的效果。

五、附录

系统硬件原理电路图

数字温度计设计器材表

单片机STC89C52

DS18B20

晶振12M

三极管8850

电容30PF

电解电容10UF/25V

小蜂鸣器

LED

ø5红

电阻10k,3k,2k,1k,510,330

各5

4位一体共阴数码管

AC/DC(5V/1A)电源

IC插座40

9X15cm万用板

六、参考文献

1、李群芳编.《单片微型计算机及接口技术》[M].电子工业出版社.2、楼然苗编.《51系列单片机设计实例》[M].北京航空航天大学出版社.3、黄勤编.《计算机硬件技术基础实验教程》[M].重庆大学出版社.

第四篇:电子,单片机毕业设计毕业论文

706.波形发生器、频率计和数字电压表设计 707.水位遥测自控系统 毕业论文

708.宽带视频放大电路的设计 毕业设计 709.简易数字存储示波器设计毕业论文 710.球赛计时计分器 毕业设计论文 711.IIR数字滤波器的设计毕业论文 712.PC机与单片机串行通信毕业论文 713.基于CPLD的低频信号发生器设计毕业论 714.基于51单片机的多路温度采集控制系统 715.仓库温湿度的监测系统 716.基于单片机的电子密码锁 717.单片机控制交通灯系统设计

718.智能抢答器设计

719.基于DSP的IIR数字低通滤波器的设计与实现 720.基于LabVIEW的PC机与单片机串口通信 721.DSP设计的IIR数字高通滤波器的设计 722.单片机数字钟设计 723.数字自动打铃系统

724.激光切割轨道系统的上位机设计 725.由AT89C51控制的太阳能热水器 726.单片机歩进电机转速控制器的设计 727.频率特性测试仪的设计

728.用集成温度传感器组成测温控制系统 729.微尺度观测仪的物理原理及应用 730.低频数字式相位差测量仪的设计 731.智能开关稳压电源的设计

732.智能家居系统CAN总线通信模块设计 733.智能家居系统GPRS通信模块设计 734.智能家居GUI模块设计

735.小型风光互补路灯控制器设计

736.基于MCS-51单片机的高精度数字测相装置的设计 737.基于单片机的火灾自动报警系统 738.数字显示多路电压设计 739.智能防盗报警系统设计 740.数字调频立体收音机

741.基于单片机的水温控制系统 742.电子广告牌的设计

743.电力变压器保护

744.变电站综合自动化系统研究 745.智能象棋比赛定时器的设计 746.基于单片机的电动车跷跷板 747.艺术彩灯设计

748.基于单片机的密码锁设计 749.双输出可调稳压电源的设计 750.用IC卡实现门禁管理系统

751.智能消毒柜控制系统 752.自动太阳光追踪器

753.基于89C51的点阵屏显示设计

754.利用AT89C5单片机实现节日彩灯控制 755.自动温度控制系统 756.室内温度控制报警器 757.8751H单片机控制步进电机 758.高精密多路计时器 759.小型触摸式防盗报警器 760.频率特性测试仪设计 761.出租车计价器

762.数控直流稳压电源设计

763.数字电度表--具有远程抄表功能

764.基于多单片机的数据测控硬件系统的设计

765.基于MATLAB的他励直流电机虚拟教学实验系统的设计与开发 766.基于87C196MC交流调速系统主电路硬件的设计与开发 767.基于80C196MC交流调速系统控制电路的硬件设计与开发 768.多环教学实验系统模拟电子电路控制模板的设计与开发 769.双闭环控制系统模拟控制模板设计

770.双闭环V-M直流调速虚拟实验系统的开发 771.双闭环PWM直流调速虚拟实验系统的开发 772.基于8098单片机实现的SPWM变频调速系统 773.调幅收音机的原理与调试 774.电力线载波系统

775.基于单片机的温室电炉的控制系统

776.基于MCS-51单片机的变色灯控制系统设计与实现 777.基于单片机的频率计的设计 778.烤箱温度控制系统 779.电容测量仪

780.基于AT89S51单片机的波形发生器设计 781.简易低频信号发生器

782.基于单片机的红外遥控开关

783.发动机电喷内核模型的研究及实践 784.基于AT89S52的函数信号发生器

785.智能住宅的功能设计与实现原理研究 786.基于PIC16F876A单片机的超声波测距仪 787.基于单片机的呼叫系统的设计 788.电容测量电路的设计

789.电压频率变换器

790.基于单片机的IC卡门禁系统设计 791.压阻式传感器在压力方面的技术应用 792.全集成电路高保真扩音机

793.单片机控制的三相全控桥触发系统设计 794.IC卡智能燃气表的研制

795.传感器信号模拟电路设计研究

796.基于C8051F040单片机的智能电导率分析仪 797.基于MODBUS协议的远程端口控制系统 798.两路电力线加载信号检测识别系统 799.单片机的语音存储与重放的研究 800.基于单片机的电器遥控器的设计

第五篇:单片机数字万用表课程设计

《单片机》课程设计

目:

基于单片机的数字多用表设计

业:

电力系统及其自动化

级:

本自动化

名:

学号:

指导老师:

小组成员:

成绩:

摘要

本次设计采用单片机芯片

AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。为使系统更加稳定,使系统的整体精度得以保障,本电路使用了ADC0809数据转换芯片,单片机系统设计采用AT89S51作1

为主控芯片,配以RC上电复位电路和震荡电路,程序每执行周期耗时缩到最短,这样保证了系统的实时性。

关键词

数字万用表

AT89S51单片机

AD转换与控制

目录

摘要„„„„„„„„„„„„„„„„„„„„„„„„„2 关键词„„„„„„„„„„„„„„„„„„„„„„„„2 绪论

1.数字万用表设计背景„„„„„„„„„„„„„„„„„4 1.1 数字万用表的设计目的和意„„„„„„„„„„„„„

41.2 数字万用表的设计依据…………………………………….4

1.3 数字万用表设计重点解决的问题„„„„„„„„„„„„4

2.数字万用表总体设计方案……………………………………5 2.1数字万用表的基本原理……………………..…….…….5 2

2.2芯片选择及功能简介………………………………………..2.3电路原理图及仿真图……………………………………..……….2.4系统板上硬件连线………………………………..………..…… 2.5程序设计内容………………………………..………..…… 2.6C语言源程序………………………………..………..…… 总结……………………………………….….………… 4心得体会 参考文献……………………………..…….………..13

绪论

数字万用表亦称数字多用表,简称

DMM(Digtial Multimeter)。它是采用数字化测量技术,把连续的模拟量转换成不连续的,离散的数字形式并加以显示的仪表。传统的指针式万用表功能单精度低,不能满足数字化时代的需求,采用单片机的数字万用表,已被广泛用于电子及工业测量、工业自动化仪表、自动测试系统等智能测量领域,显示出强大的生命力。数字万用表具有以下几点优势:(1)显示清晰直观,计数准确

为了提高观察的清晰度,新型的手势式数字万用表已普遍采用字高为26mm的大屏幕LCD(液晶显示器)。有些数字万用表还增加了背光源,以便于夜间观察读数。(2)显示位数

数字万用表的显示位数通常为3位到8位半。

(3)准确度高

准确度是测量结果中系统误差与随机误差的综合。它表示测量结果与真值的一致程度,也反映了测量误差的大小,准确度愈高,测量误差愈小。数字万用表的准确度远优于指针万用表。

(4)

分辨力高

数字万用表在最低电压量程上末位1个字所代表的电压值,称作仪表的分辨率,宏观世界反映了仪表灵敏度的高低,分辨率随显示位数的增加而提高。(5)

测试功能强

数字万用表不止可以测量直流电压,直流电流,电阻二3

极管正向压降等等。(6)测量范围宽

数字万用表可满足常规电子测量的需要,智能数字万用表的测量范围更宽广。

(7)测量速率快

数字万用表在每秒中内对被电压的测量次数称为测量速率,单位是次/秒。它主要取决于A/D转换器的转换速率。一般数字万用表的测量速率为2到5次/秒。有的呢过达到20次/秒以上,另外有的比这个还要高得多。数字万用表可满足不同用户对测量速率的需要。

(8)

输入阻抗高

数字万用表电压档具有很高的输入阻抗,通常为10至10000M欧姆,从被测电路上吸取的电流小,不会影响被测信号源的工作状态,能减小由信号源内阻引起的测量误差。(9)保护功能完善,抗干扰能力强

数字万用表具有比价完善的保护电路,过载能力强,新型的数字万用表还增加了高压保护器件,能防止浪涌电压。

本设计就是居于这个设计理念一个基于单片机的数字万用表。该设备具有直观简单的优点。并且能深入的说明 万用表的测量原理。能直观的了解万用表各个部分的结构和测试原则。

1数字万用表的设计背景

在本章中主要介绍了系统的设计原则和总体方案及其系统概述等。

1.1数字万用表的设计目的和意义

数字万用表是当前电子、电工、仪器、仪表和测量领域大量使用的一种基本测量,已被广泛应用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。随着时代科技的进步,数字万用表的功能越来越强大,把电量及非电量的测量技术提高到崭新水平。

1.2 数字万用表的设计依据

根据数字万用表的原理,结合以下的设计要求:“设计一个数字万用表,能够测量直流电压值,直流电流、直流电阻。实现多级量程的直流电压测量,其量程范围是200mv、2v ,20v,200v和500v.实现多级量程的直流电流测量,其量程范围是2mA,20mA,200mA、2A和20A.实现多级量程的电阻测量,其量程范围是200、2k ,20k,200k和2M。由此设想出以下的解决方法,即数字万用表的系统由分流电阻、分压电阻、基准电阻、电容测试芯片电路、51单片机最小系统、显示部分、报警部分、AD转换和控制部分组成。为使系统更加稳定,使系统整体精度得以保障。

1.3数字万用表设计重点解决的问题

本设计重点要解决的问题是对不同量程的各种测量内容的转换,还有就是各部分电路组合成一个完整的数字万用表,而难点解决的问题就是程序的设计,要保正其可行性从而保证设计的正确性。数字万用表总体设计方案 2.1数字万用表的基本原理

数字万用表的最基本功能是能够测量直流电压,直流电流,还有能够测电量阻。

下面我们分别介绍各个部分的组成:(1)、模数(A/D)转换与数字显示电路

常见的物理量都是幅值(大小)连续变化的所谓模拟量(模拟信号)。指针式仪表可以直接对模拟电压、电流进行显示。而对数字式仪表,需要把模拟电信号(通常是电压信号)转换成数字信号,再进行显示和处理(如存储、传输、打印、运算等)。数字信号与模拟信号不同,其幅值(大小)是不连续的。这种情况被称为是”量化的"。若最小量化单位(量化台阶)为,则数字信号的大小一定是的整数倍,该整数可以用二进制数码表示。但为了能直观地读出信号大小的数值,需经过数码变换(译码)后由数码管或液晶屏显示出来。(2)、多量程数字电压表原理

在基准数字电压表头前面加一级分压电路(分压器),可以扩展直流电压测量的量程。

(3)多量程数字电流表原理 测量电流的原理是:根据欧姆定律,用合适的取样电阻把待测电流转换为相应的电压,再进行测量。

(4)电阻测量原理

数字万用表中的电阻档采用的是比例测量法。

由稳压管ZD提供测量基准电压,流过标准电阻和被测电阻的电流基本相等

2.2芯片选择及功能简介

这次的课程设计中,我们这一种选择了芯片AT89S51和ADC0809。

AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

AT89S51有PDIP、PLCC、TQFP三种封装方式,其中最常见的就是采用40Pin封装的双列直接PDIP封装,芯片共有40个引脚,引脚的排列顺序为从靠芯片的缺口左边那列引脚逆时针数起,依次为1、2、3、4、„、40,其中芯片的1脚5

顶上有个凹点。在单片机的40个引脚中,电源引脚2根,外接晶体振荡器引脚2根,控制引脚4根以及4组8位可编程I/O引脚32根。

1、主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源GND(Pin20):接地线

2、外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路输入端XTAL2(Pin20):片内振荡电路输出端

3、控制引脚(4根)RST/VPP(Pin9):复位引脚,出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

4、可编程输入/输出引脚(32根)AT89S51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。PO口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7。AT89S51的主要性能参数:与MCS-51产品指令系统完全兼容

4k字节在系统编程(ISP)Flash闪速存储器

1000次擦写周期

4.0-5.5V的工作电压范围 全静态工作模式:0Hz-33MHz 三级程序加密锁

128×8字节内部RAM

32个可编程I/O口线 2个16位定时/计数器 6个中断源 全双工串行UART通道

低功耗空闲和掉电模式

中断可从空闲模唤醒系统 看门狗(WDT)及双数据指针 掉电标识和快速编程特性 灵活的在系统编程(ISP字节或页写模式)ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。是目前国内应用最广泛的8位通用A/D芯片 1.主要特性

1)8路输入通道,8位A/D转换器,即分辨率为8位。

2)具有转换起停控制端。

3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)

4)单个+5V电源供电

5)模拟输入电压范围0~+5V,不需零点和满刻度校准。

6)工作温度范围为-40~+85摄氏度

7)低功耗,约15mW。2.内部结构

ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。3.外部特性(引脚功能)

ADC0809芯片有28条引脚,采用双列直插式封装,如图所示。下面说明各引脚功能。

IN0~IN7:8路模拟量输入端。

2-1~2-8:8位数字量输出端。

ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路

ALE:地址锁存允许信号,输入,高电平有效。

START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。

EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。

CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。

REF(+)、REF(-):基准电压。

Vcc:电源,单一+5V。

GND:地。ADC0809的工作过程

首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。

(1)定时传送方式

对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。

(2)查询方式

A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。

(3)中断方式

把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。

不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行

数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。

2.3电路原理图

2.4系统板上硬件连接

a)把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。

b)把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。

c)把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。

d)把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。

e)把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。

f)把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。

g)把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。

h)把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上。

i)把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。

2.5程序设计内容

1.由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了。

2.由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值(D/256*VREF)

2.6C语言源程序

#include

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00};unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};unsigned char dispcount;unsigned char getdata;unsigned int temp;

long int i;

代替原来的unsigned char i;

sbit ST=P3^0;sbit OE=P3^1;sbit EOC=P3^2;sbit CLK=P3^3;

void main(void){

ST=0;

OE=0;

ET0=1;

ET1=1;

EA=1;

TMOD=0x12;

TH0=216;

TL0=216;

TH1=(65536-5000)/256;

TL1=(65536-5000)%256;

TR1=1;

TR0=1;

ST=1;

ST=0;

while(1)

{

if(EOC==1)

{

OE=1;

getdata=P0;

OE=0;

i=getdata*196;

dispbuf[5]=i/10000;

i=i%10000;

dispbuf[6]=i/1000;

i=i%1000;

dispbuf[7]=i/100;

ST=1;

ST=0;

}

} }

void t0(void)interrupt 1 using 0

{

CLK=~CLK;}

void t1(void)interrupt 3 using 0

{

TH1=(65536-6000)/256;

TL1=(65536-6000)%256;

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

if(dispcount==5)

/*原来的:

temp = getdata * 235;

temp=temp/128;

i=5;

dispbuf[0]=10;dispbuf[1]=10;dispbuf[2]=10;dispbuf[3]=10;dispbuf[4]=10;dispbuf[5]=0;dispbuf[6]=0;dispbuf[7]=0;while(temp/10)

{

dispbuf[i]=temp%10;

temp=temp/10;

i++;

} dispbuf[i]=temp;*/

//定时器0 中断服务

//定时器1 中断服务

{

P1=P1 | 0x80;

}

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

}

3.总结

设计结果综述:

(1)、数字万用表完成的功能主要是对电压、电流、电阻的测量,它主要由分流电阻、分压电阻、基准电阻、51单片机最小系统、显示部分、报警部分、AD转换和控制部分组成。(2)、数字万用表属于一种测量工具,其本身的好坏直接影响到测量结果,因此上面的设计在实物上只可以测直流电压,在仿真上可以测出直流电压电流和电阻。(3)、单片机部分跟AD转换部分是整个设计的核心,ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值(D/256*VREF);AT89S51单片机作为主控芯片,配以RC上电复位电路和震荡电路,使系统稳定运行。(4)、在本次软件设计过程中,采用的是C语言程序。

4心得体会

两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的仿真环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所12

在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!通过这次的课程设计,使我更加透彻的了解到我在单片机这方面的知识的浅薄,从而促进了握要更加了解单片机知识的决心。

5参考文献

C语言程序设计第三版

51单片机开发与应用基础教程13

C语言版)

下载单片机数字温度计毕业设计提纲 大纲 参考(精选合集)word格式文档
下载单片机数字温度计毕业设计提纲 大纲 参考(精选合集).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    毕业设计论文大纲

    毕业论文写作提纲 一、论文题目:40平方小型SOHO办公空间设计 二、摘要:SOHO办公空间因其符合满足人们工作生活中多样化的需求这一特点,在现代化城市中越来越盛行。设计师的目......

    土木毕业设计提纲

    毕业设计提纲 题 目: 广东高州师范学院教学楼设计 专业 土木工程学生姓名 高强班级学号40912307 指导教师刘文艳指导单位土木工程系专 业 负 责 人王景书学院工作领导小组建......

    单片机课程设计(实习)大纲

    单片机及应用 课程设计(实习)大纲 一、单片机课程设计(实习)目的和任务  单片机课程设计(实习)主要达到以下目的: (1)使学生增进对MCS51单片机电路的感性认识,加深对理论方面的理解。......

    数字测图毕业设计

    平阳县带溪小流域腾蛟水土流失综合治理工程 平阳县带溪小流域腾蛟水土流失综合治理项目来自于平阳县腾蛟镇人民政府,是我新年后的第一个任务,本次测量的目的,是为了工程施工图......

    单片机数字电压表实习报告

    电气信息工程学院 单片机实习报告 课题名称:数字电压表专业: 姓名: 班级学号: 指导教师:刘海波成绩:二○一一年七月一日 目录 一、题目及设计要求 ...............................

    单片机课程设计(基于多路数字抢答器)(范文)

    一、概述 大学四年的学习生活中,会遇到各种各样的竞赛,抢答器便成为了主要的工具之一。而现在的抢答器智能化越来越强,这必然会提高抢答器的成本。本抢答器与其他抢答器电路相......

    单片机数字时钟课程设计感想

    五.实验总结及感想 在实验的开始几天,基本上没有收获,不知何从下手,不知所措。为了看得更远,不妨站在前人的肩膀上,我在整体思路模糊的情况下,在网上大量招资粮,各种与电子时钟相关......

    电子类(单片机类)毕业设计目录(本站推荐)

    电子类(单片机类)毕业设计目录 001CDMA通信系统中的接入信道部分进行仿真与分析.doc 002LED显示屏动态显示和远程监控的实现.doc 003MCS-51单片机温度控制系统.doc 004PLC电......