1. 如果单片机系统检测到端口的信号不太稳定,可能存在的问题在哪里怎么解决
1.信号加相应的滤波电容,吸收干扰
2.端口接上拉电阻,一般用4.7K
3.信号采集可用光耦等隔离
4.在单片机软件中对检测的端口进行数字滤波处理,比如连续采集10个数,用尘衫冒泡法对10数进行从小到大排序,取中间一位值,或去掉最大最小值再取平均指兄丛值。
5.找出干扰源,比如附唯樱近有高频线路、电磁干扰,离远一些。
2. 关于单片机数据采集系统
1 KM-1 键混器的设计
1 Sw3204V监控器的设计
1 基于射频遥控型(单片机)交通灯的设计
1 Sw802V视频切换器的设计
1 无线数控多相位灯从机的设计
1 基于RS232遥控型交通灯的设计
1 Sw802A音频切换器的设计
1 Sw6408V监控器的设计
1 KM-3键混器的设计
1 无线数控多相位灯主机的设计
1 SW162V数字视频切换器的设计
1 基于RS232监控切换器
1 SW401V 数字视频切换器的设计
1 基于单片机的多路数据采集系统
1 RS485转RS232的模块设计
1 基于LCD显示的波形发生器的设计
1 4-20mA转RS-485模块的设计
1 基于RS232流量计的设计
1 基于PTR2000的交通灯控制器主机的设计
1 基于RS485量水仪的设计
1 压力采集控制器的设计
1 数字量转4-20mA模拟量输出的模块设计
1 正弦波形发生器的设计
1 基于PTR2000的交通灯控制器从机的设计
1 基于RS485视频切换器的设计
1 LCD车速里程表电路设计
1 LED车速里程表电路设计
1 MSK通信系统的仿真设计
1 员工信息管理系统
1 计算机文化基础考试系统的设计和开发
1 人事工资管理系统
1 员工信息管理系统设计
1 超市进销存管理系统的VB实现
1 基于单片机的多波形发生器的应用
1 基于单片机电动自行车控制器设计
1 个人理财管理系统
1 基于CAN总线火灾监控系统的研究
1 基于DSP平台的FIR滤波器设计
1 于Matlab的FIR数字滤波器设计与仿真
1 基于TMS320VC5402-DSP的最小系统硬件设计
1 基于单片机的热水控制器
1 基于单片机的路灯控制系统的设计
1 于单片机远程控制家用电器系统的设计
1 基于液晶显示的乘法口诀测试仪的设计
1 实验室设备管理系统毕业设计开题报告
1 用AT89C51做PLC.doc
1 洗衣机全自动控制.doc
1 数显频率计的设计.doc
1 数控车间温度湿度控制系统设计.doc
1 三角波斜率测试仪设计.doc
1 人脸几何特征提取
1 全自动洗衣机的控制程序设计.doc
1 乞丐论文.doc
1 教学楼毕业设计.doc
1 建立海上风电场的技术要求分析与探讨.doc
1 基于凌阳61A的数字式温湿度检测仪.doc
1 基于几何匹配和分合算法的人脸识别.doc
1 基于单片机数字钟的设计.doc
1 基于单片机数据通用采集器的设计.doc
1 基于单片机数据采集器.doc
1 基于单片机的自动报警器的设计.doc
1 基于单片机的终端设计.doc
1 基于单片机的路灯控制系统控制系统的设计.doc
1 基于单片机的交通灯的设计.doc
1 基于单片机的简易计算器的设计.doc
1 基于单片机的家用安保系统的设计.doc
1 基于VHDL的数字频率计.doc
1 基于SystemView的OFDM系统仿真设计.doc
1 基于SystemView的OFDM系统仿真设计1.doc
1 基于PLC的烧结配料控制系统设计.doc
1 基于MSP430的温度检测系统设计1.doc
1 基于MATLAB工具箱的数字滤波器设计.doc
1 基于MATLAB的扩频通信系统仿真研究.doc
1 基于GSM短信息通信方式的路灯无线监控系统.doc
1 基于FPGA的信号源设计.doc
1 基于EPP协议的AVR与PC并行通信系统的设计0.doc
1 单片机交通灯.doc
1 单片机多点温度巡回检测系统的设计.doc
1 单片机的温湿度检测系统A.doc
1 单路口交通信号PLC控制系统的设计.doc
1 城市路口多相位自寻优交通信号控制设计.doc
1 陈洁(螺旋瓶盖的设计).doc
1 八路竞赛抢答器.doc
1 matlab信号与系统.doc
1 GSM系统的研究与SystemView仿真.doc
1 蒯申红智能语音报站系统设计5.30
1 MT8888在家庭安全电话报警系统中的应用设计
1 基于FPGA的频率与功率因数在线测量
1 基于FPGA的误码测试仪
如果需要定作室联系联系 Q
273546756
3. 基于MCS-51单片机的精密温度控制系统的设计与实现
上传内容
仅供学习与参考
摘要
本检测系统硬件设计以AT89C51单片机为核心,用温度传感器DS18B20实现温度控制,用数码管显示实际温度和预设温度,制作数字温度计,并可以实现温度预警控制。
单片机系统的软件编程采用单片机汇编进行编程。应用软件采用KEIL和PROTEUS仿真软件模拟实现控制过程。
温度控制系统是基于单片机的计算机检测技术的软硬件开发和面向对象的高级可视化程序开发的有机结合。对温度控制的发展有很大的好处。如果投入生产,不仅会创造良好的经济效益,还可提高温控的简单化。
关键词 单片机;DS18B20;调节;温度
Abstract
This examination system hardware design take at89C51 monolithic integrated circuit as a core, realizes the temperature control with temperature sensor DS18B20, Demonstrates the actual temperature and the preinstall temperature with the nixie tube,manufactures the simple intelligence temperature control system - - digit thermometer,And may realize the temperature early warning control.
. The monolithic integrated circuit system's software programming uses the monolithic integrated circuit assembly to carry on the programming. The superior machine application software uses KEIL and the PROTEUS simulation software simulation realizes the controlled process.
This article develops the intelligence temperature control system is based on monolithic integrated circuit's computer examination technology software and hardware development and face the object high-level visualization procere development organic synthesis. Has the very big advantage to temperature control's development. If place in operation, not only will create the good economic efficiency, but may also propose the simplification which the high temperature will control.
Keywords microcontroller;DS18B20;measure;temperture
目录
摘要 I
Abstract II
第1章 绪论 4
1.1 温度传感器发展概述 4
1.2 单片机技术简介 4
1.3 温度检测技术的发展 5
第2章 温度传感器的选择 8
2.1 测温方法 8
2.2 DS18B20简介 9
第3章 软硬件设计 10
3.1 单片机的选择 10
3.2 温度传感器的选择 10
3.3 仿真软件的选择 11
3.4 编译软件的选择 11
3.5 PROTEUS 仿真电路图 12
第4章 汇编语言程序 13
4.1 主程序和温度值转换成显示值子程序的流程图 13
4.2 DS18B20温度子程序和显示子程序的流程图 14
4.3 汇编语言源程序 14
第1章 绪论
1.1 温度传感器发展概述(略)
1.2 单片机技术简介(略)
1.3 温度检测技术的发展(略)
第2章 温度传感器的选择
2.1 测温方法
温度是一个很重要的物理参数,钢铁的冶炼、石油的分馏、塑料的合成以
及农作物的生长等等都必须在一定的温度范围内进行,各种构件、材料的体积、电阻、强度以及抗腐蚀等物理化学性质,一般也都会随温度而变化。人们利用各种能源为人类服务,也往往是使某些介质通过一定的温度变化来实现的。所以在生产和化学试验中,人们经常会碰到温度测量的问题。
温度传感器是检测温度的器件,其种类最多,应用最广,‘发展最快。众所周知,日常使用的材料及电子元件大部分都随温度而变化,资料【5】中介绍了作为实用传感器必须满足的一些条件:
(1)在使用温度范围内温度特性曲线要求达到的精度能符合要求:为了能
在较宽的温度范围内进行检测,温度系数不宜过大,过大了就难以使用,但对
于狭窄的温度范围或仅仅定点的检测,其温度系数越大,检测电路也能越简单。
(2)为了将它用于电子线路的检测装置,要具有检测便捷和易于处理的特
性。随着半导体器件和信号处理技术的进步,对温度传感器所要求的输出特性
应能满足要求。
(3)特性的偏移和蠕变越小越好,互换性要好。
(4)对于温度以外的物理量不敏感。
(5)体积小,安装方便:为了能正确地测量温度,传感器的温度必须与被
测物体的温度相等。传感器体积越小,这个条件越能满足。
(6)要有较好的机械、化学及热性能。这对于使用在振动和有害气体的环
境中特别重要。
(7)无毒、安全以及价廉、维修、更换方便等。
温度测量的方法很多,根据温度传感器的使用方式,通常分为接触式测温
法与非接触式测温法两类。
(1)接触式测温法
由热平衡原理可知,两个物体接触后,经过足够长时间的热交换达到热平
衡,则它们的温度必然相等。如果其中之一为温度计,就可以用它对另一个物体实现温度测量,这种测温方式称为接触式测温法。接触式测温的优点显而易
见,它简单,可靠,测量精度高,但同时也存在不足:温度计要与被测物体有
良好的热接触,并充分换热,从而产生了测温滞后现象;测温组件可能与被测
物体发生化学反应;由于受到耐高温材料的限制,接触式测温仪表不可能应用
于很高温度的测量。
(2)非接触式测温法
由于测量组件与被测物体不接触,利用物体的热辐射能随温度变化的原理
测定物体温度。因而测量范围原则上不受限制,测温速度较快,还可以在运动
中测量。这种测温方式称为非接触式测温法。它的特点是:不与被测物体接触,也不改变被测物体的温度分布,热惯性小。从原理上看,用这种方法测温无上限。通常用来测定1000℃以上的移动、旋转或反应迅速的高温物体的温度或表面温度。
2.2 DS18B20简介
2.2.1技术性能描述
单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。测温范围 -55℃~+125℃,固有测温分辨率0.5℃。支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温。工作电源: 3~5V直流电源。
在使用中不需要任何外围元件,测量结果以9~12位数字量方式串行传送。适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温。
2.2.2应用范围
该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域,轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。
2.2.3接线说明
特点有一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源 测量温度范围为-55 ° C至+125 ℃ 。华氏相当于是-67 ° F到257华氏度 -10 ° C至+85 ° C范围内精度为±0.5 ° C。
温度传感器可编程的分辨率为9~12位 温度转换为12位数字格式最大值为750毫秒 用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数。信息被发送到/从DS18B20 通过1线接口,所以中央微处理器与DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个DS18B20的包含一个独特的序号,多个DS18B20可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。【6】
第3章 软硬件设计
3.1 单片机的选择
单片机系统由单片机AT89C51、74HC245等芯片构成,完成数据采集、处理、通讯以及所有的功能,是整个系统的核心模块。
单片机是整个系统的核心,对系统起监督、管理、控制作用,并进行复杂的信号处理,产生测试信号及控制整个检测过程。所以在选择单片机时,参考了以下标准。
(1)运行速度。单片机运行速度一般和系统匹配即可。
(2)存储空间。单片机内部存储器容量,外部可以扩展的存储器(包括1/0口)空间。
(3)单片机内部资源。单片机内部存储资源越多,系统外接的部件就越少,这可提高系统的许多技术指标。
(4)可用性。指单片机是否能很容易地开发和利用,具体包括是否有合适的开发工具,是否适合于大批量生产:、性能价格比,是否有充足的资源,是否有现成的技术资源等。
(5)特殊功能。一般指可靠性、功耗、掉电保护、故障监视等。
从硬件角度来看,与MCS-51指令完全兼容的新一一代AT89CXX系列机,比在片外加EPROM才能相当的8031-2单片机抗干扰性能强,与87C51-2单片机性能相当,但功耗小。程序修改直接用+5伏或+12伏电源擦除,更显方便、而且其工作电压放宽至2.7伏一6伏,因而受电压波动的影响更小,而且4K的程序存储器完全能满足单片机系统的软件要求。故AT89C51单片机是构造本检测系统的更理想的选择。本系统选用ATMEL生产的AT89C51单片机,其特性如下:
(1) 4K字节可编程闪速程序存储器;1000次循环写/擦
(2)全静态工作:OHz-24MHz
(3)三级程序存储器锁定
(4) 128 X 8位内部数据存储器,32条可编程1/0线
(5)两个十六位定时器/计数器,六个中断源
(6)可编程串行通道,低功耗闲置和掉电模式
该器件采用了ATMEL的高密度非易失性的存储器工艺,并且可以与工业标准的MCS-51指令集和输出管脚兼容。由于将多功能8位CPU与闪速式存储器组合在单个芯片中,AT89C51是一种高效的微控制器,为很多嵌入式系统提供了高灵活性且价廉的方案。
3.2 温度传感器的选择
DS18B20是美国达拉斯半导体公司的产品,与其他产品相比较它的性能有如下特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存储器ROM,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。所以在本设计中,我采用了DS18B20作为温度传感器。【8】
3.3 仿真软件的选择
Proteus 是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。
③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C uVision2、MPLAB等软件。【9】
3.4 编译软件的选择
KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编 器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。
C51 V7版本是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三 方开发工具。因此,C51 V7版本无疑是8051开发用户的最佳选择。
uVision2集成开发环境具有如下功能:
一、项目管理
工程(project)是由源文件、开发工具选项以及编程说明三部分组成的。
一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组”。开发工具选项可以对应目标,组或单个文件。
uVision2包含一个器件数据库(device database),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定 微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(extra data pointer)或者加速器(math accelerator)的特 性。
uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模。
二、集成功能
uVision2的强大功能有助于用户按期完工。
1.集成源极浏览器利用符号数据库使用户可以快速浏览源文件。用详细的符号信息来优化用户变数存储器。
2.文件寻找功能:在特定文件中执行全局文件搜索。
3.工具菜单:允许在V2集成开发环境下启动用户功能。
4.可配置SVCS接口:提供对版本控制系统的入口。
5.PC-LINT接口:对应用程序代码进行深层语法分析。
6.Infineon的EasyCase接口:集成块集代码产生。【10】
3.5 PROTEUS 仿真电路图
图1是基于单片机的智能温度检测系统电路原理图。控制加热热水器电源电路用LED灯模拟代替,取消无水报警电路。装上水后接通电源,下方LED数码管显示当前水温。上方LED数码管显示预设水温。操作“个位”键和“十位”键可预设水温(如99℃)控制点。该电路具有如下功能:
(1) 测量水温,精度为1℃,范围为0~99℃;
(2) 三位数码管实时显示水温;
(3) 可预设水温(如99℃)控制点,当水加热到该水温时自动断电,当水温低于该水温时自动上电加热;
(4) 无水自动断电和报警功能(略)。
图1 基于单片机的智能温度检测系统电路原理图
第4章 汇编语言程序
4.1 主程序和温度值转换成显示值子程序的流程图
4.2 DS18B20温度子程序和显示子程序的流程图
4.3 汇编语言源程序
ORG 0
LJMP MAIN1
ORG 0003H
LJMP ZINT0
ORG 13H
LJMP ZINT1
TMPH: EQU 28H
FLAG1: EQU 38H
DATAIN: BIT P3.7
MAIN1: SETB IT0
SETB EA
SETB EX0
SETB IT1
SETB EX1
SETB P3.6
SETB P3.2
MOV 74H,#0
MOV 75H,#0
MOV 76H,#0
MOV 77H,#0
MAIN: LCALL GET_TEMPER
LCALL CVTTMP
LCALL DISP1
AJMP MAIN
INIT_1820:
SETB DATAIN
NOP
CLR DATAIN
MOV R1,#3
TSR1: MOV R0,#107 ;保持642ms
DJNZ R0,$
DJNZ R1,TSR1
SETB DATAIN ;释放DS18B20总线
NOP
NOP
NOP
MOV R0,#25H
TSR2: JNB DATAIN,TSR3
DJNZ RO,TSR2
CLR FLAG1
SJMP TSR2
TSR3: SETB FLAG1 ;标志位置1,证明DS18b20存在
CLR P1.7
MOV R0,#117
TSR6: DJNZ R0,$
TSR7: SETB DATAIN
RET ;延时254us
GET_TEMPER:
SETB DATAIN
LCALL INIT_1820
JB FLAG1,TSS2
NOP
RET ;DS18B20检测程序
TSS2: MOV A,#0CCH ;跳过ROM,使用存储器
LCALL WRITE_1820
MOV A,#44H ;对RAM操作,开始温度转换
LCALL WRITE_1820
ACALL DISP1
LCALL INIT_1820
MOV A,#0CCH
LCALL WRITE_1820
MOV A,#0BEH
LCALL WRITE_1820
LCALL READ_1820;读暂存器中的温度数值
RET
WRITE_1820:
MOV R2,#8
CLR C
WR1: CLR DATAIN
MOV R3,#6
DJNZ R3,$
RRC A
MOV DATAIN,C
MOV R3,#23
DJNZ R3,$
SETB DATAIN
NOP
DJNZ R2,WR1
SETB DATAIN
RET
READ_1820:
MOV R4,#2
MOV R1,#29H
RE00: MOV R2,#8
RE01: CLR C
SETB DATAIN
NOP
NOP
CLR DATAIN
NOP
NOP
NOP
SETB DATAIN
MOV R3,#9
RE10: DJNZ R3,RE10
MOV C,DATAIN
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
CVTTMP: MOV A,TMPH
ANL A,#80H ;判断温度正负,正不变,负则取反加1
JZ TMPC1
CLR C
MOV A,TMP1
CPL A
ADD A,#1
MOV TMP1,A
MOV A,TMPH
CPL A
ADDC A,#0
MOV TMPH,A
MOV 73H,#0BH
SJMP TMPC11
TMPC1: MOV 73H,#0AH
TMPC11: MOV A,TMP1
ANL A,#0FH
MOV DPTR,#TMPTAB
MOVC A,@A+DPTR
MOV 70H,A
MOV A,TMP1
ANL A,#0FH
SWAP A
ORL A,TMPL
B2BCD: MOV B,#100
DIV AB
JZ B2BCD1
MOV 73H,A
B2BCD: MOV A,#10
XCH A,B
DIV AB
MOV 72H,A
MOV 71H,B
TMPC12: NOP
DISBCD: MOV A,73H
ANL A,#0FH
CJNE A,#1,DISBCD0
SJMP DISBCD1
DISBCD0: MOV A,72H
ANL A,#0FH
JNZ DISBCD1
MOV A,73H
MOV 72H,A
MOV 73H,#0AH
DISBCD1: RET
TMPTAB: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
DISP1: MOV R1,#70H
MOV R0,#74H
MOV R5,#0FEH ;显示实际温度
PLAY: MOV P1,#0FFH
MOV A,R5
MOV P2,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
MOV P1,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
JB ACC.1,LOOP1
JB P1.7
CLR P1.7
CLR P0.7 ;显示小数点
LOOP1: LCALL DL1MS
INC R1
INC R0
MOV A,R5
JNB ACC.3,ENDOUT
RL A
MOV R5,A
MOV A,73H
CJNE A,#1,DD2
SJMP LEDH
DD2: MOV A,72H
CJNE A,72H,DDH
SJMP DD1
DDH: JNE PLAY1
LEDH: CLR P3.6
SJMP PLAY
PLAY1: SETB P3.6
SJMP PLAY
ENDOUT: MOV P1,#0FFH
MOV P2,#0FFH
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H,0FFH,0BFH
DL1MS: MOV R6,#14H
DL1: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL1
RET
ZINT0: PUSH A
INC 75H
MOV A,,75H
CJNE A,#10,ZINT01
MOV 75H,#0
ZINT01: POP A
RETI
ZINTT1: PUSH A
INC 76H
MOV A,76H
CJNE A,#10,ZINT11
MOV 76H,#0
ZINT11: POP A
RETI
4. 用单片机做温度检测系统 论文,
用DS18B20做的电子温度计,非常简单。
#include <reg51.h>
#include\"AscLed.h\"
#include <intrins.h>
#include <stdio.h>
//********************************************************
#define Seck (500/TK) //1秒中的主程序的系数
#define OffLed (Seck*5*60) //自动关机的时间5分钟!
//********************************************************
#if (FHz==0)
#define NOP_2uS_nop_()
#else
#define NOP_2uS_nop_();_nop_()
#endif
//**************************************
#define SkipK 0xcc //跳过命令
#define ConvertK 0x44 //转化命令
#define RdDs18b20K 0xbe //读温度命令
//*******************************************
extern LedOut(void);
//*************************************************
sbit PNP1=P3^4;
sbit PNP2=P3^5;
sbit BEEP=P3^2;
//***********************************
#defineDQ PNP2 //原来的PNP2 BEEP
//***********************************
static unsigned char Power=0;
//************************************
union{
unsigned char Temp[2]; //单字节温度
unsigned int Tt; //2字节温度
}T;
//***********************************************
typedef struct{
unsigned char Flag; //正数标志 0;1==》负数
unsigned char WenDu; //温度整数
unsigned int WenDuDot; //温度小数放大了10000
}WENDU;
//***********************************************
WENDU WenDu;
unsigned char LedBuf[3];
//----------------------------------
//功能:10us 级别延时
// n=1===> 6Mhz=14uS 12MHz=7uS
//----------------------------------
void Delay10us(unsigned char n){
do{
#if (FHz==1)
NOP_2uS;NOP_2uS;
#endif
}while(--n);
}
//-----------------------------------
//功能:写18B20
//-----------------------------------
void Write_18B20(unsigned char n){
unsigned char i;
for(i=0;i<8;i++){
DQ=0;
Delay10us(1);//延时13us 左右
DQ=n & 0x01;
n=n>>1;
Delay10us(5);//延时50us 以上
DQ=1;
}
}
//------------------------------------
//功能:读取18B20
//------------------------------------
unsigned char Read_18B20(void){
unsigned char i;
unsigned char temp;
for(i=0;i<8;i++){
temp=temp>>1;
DQ=0;
NOP_2uS;//延时1us
DQ=1;
NOP_2uS;NOP_2uS;//延时5us
if(DQ==0){
temp=temp&0x7F;
}else{
temp=temp|0x80;
}
Delay10us(5);//延时40us
DQ=1;
}
return temp;
}
//-----------------------------------
void Init (void){
DQ=0;
Delay10us(45);//延时500us
DQ=1;
Delay10us(9);//延时90us
if(DQ){ //0001 1111b=1f
Power =0; //失败0
}else{
Power++;
DQ=1;
}
}
//----------------------------------
void Skip(void){
Write_18B20(SkipK);
Power++;
}
//----------------------------------
void Convert (void){
Write_18B20(ConvertK);
Power++;
}
//______________________________________
void Get_Ds18b20L (void){
T.Temp[1]=Read_18B20(); //读低位
Power++;
}
//______________________________________
void Get_Ds18b20H (void){
T.Temp[0]=Read_18B20(); //读高位
Power++;
}
//------------------------------------
//规范化成浮点数
// sssss111;11110000
// sssss111;1111(0.5,0.25,0.125,0.0625)
//------------------------------------
void ReadTemp (void){
unsigned char i;
unsigned intF1=0;
char j=1;
code int Code_F[]={6250,1250,2500,5000};
WenDu.Flag=0;
if (T.Temp[0] >0x80){ //负温度
T.Tt =~T.Tt+1; //取反+1=源吗 +符号S
WenDu.Flag=-1;
}
T.Tt <<= 4; //左移4位
WenDu.WenDu=T.Temp[0]; // 温度整数
//**************************************************
T.Temp[1]>>=4;
//---------------------------
for (i=0;i<4;i++){ //计算小数位
F1 +=(T.Temp[1] & 0x01)*Code_F;
T.Temp[1]>>=1;
}
WenDu.WenDuDot=F1; //温度的小数
Power=0;
}
//----------------------------------
void Delay1S (void){
static unsigned int i=0;
if (++i==Seck) {i=0ower++;}
}
//----------------------------------
void ReadDo (void){
Write_18B20(RdDs18b20K);
Power++;
}
/**********************************
函数指针定义
***********************************/
code void (code *SubTemp[])()={
Init,Skip,Convert,Delay1S,Init,Skip,ReadDo,Get_Ds18b20L,
Get_Ds18b20H,ReadTemp
};
//**************************************
void GetTemp(void){
(*SubTemp[Power])();
}
//---------------------------------------------------
//将温度显示,小数点放大了10000.
void GetBcd(void){
LedBuf[0]=WenDu.WenDu / 10;
LedBuf[1]=WenDu.WenDu % 10 +DotK;
LedBuf[2]=(WenDu.WenDuDot/1000)%10;
if(LedBuf[0]==0)LedBuf[0]=Black;
if(WenDu.Flag==0) return;
if(LedBuf[0] !=Black){
LedBuf[2]=LedBuf[1];
LedBuf[1]=LedBuf[0];
LedBuf[0]=Led_Pol; //'-'
}else{
LedBuf[0]=Led_Pol; //'-'
}
}
/*
//---------------------------------------------------
void JbDelay (void){
static long i;
if (++i>=OffLed){
P1=0xff;
P2=0xff;
PCON=0x02;
}
}
*/
/*****************************************************
主程序开始
1:2002_10_1 设计,采用DS18B20测量
2:采用函数数组读取DS18B20.LED数码管显示正常!
3:改变FHz可以用6,12MHz工作!
******************************************************/
code unsigned char Stop[3] _at_ 0x3b;
void main (void){
P1=0xff;
WenDu.WenDu=0;
while (1){
GetTemp();
GetBcd();
// JbDelay();
LedOut();
}
}
复制代码
20091012_[1].jpg (12 KB)
2009-10-21 23:21 上传
下载次数:0
5. 立创商城的单片机好用吗
作为工程仪器仪表研发专家漏锋,我要为您介绍峟思工程仪器仪表中的MCU自动化测量单元,以及它在用户中带来的正面影响。
峟思工程仪器仪表中的MCU自动化测量单元是一种基于微控制器单元(MCU)的智能化测量系统,它利用先进的传感技术和自动化控制算法,实现对各类测量参数的高精度、高效率、高自动化的测量和数据处理。
MCU自动化测量单元的应用给用户带来了诸多好处。首先,它实现了测量的智能化和自动化,大大提高了测量的准确性和效率。传统的测量方式可能需要复杂的手工操作和人工计算,容易受到人为误差和主观因素的影响。而MCU自动化测量单元可以自动进行测量和数据处理,减少了人为误差,提高了测量的可靠性和精度。
其次,MCU自动化测量单元具有高度的灵活性和适应性。它可以根据不同的测量需求和环境条件,实现多参数测量、多点同时测量、远程监测等功能,满足了复杂工程测量的需求。例如,在地质勘探、土木工程、建筑工程等领域,MCU自动化测量单元可以应用于地表位移监测、结构变形监测、测斜测量等多个方面,帮助用户全面了解工程状况。
此外,MCU自动化测量单元还支持数据实时传输和云端存储,方便用户随时随地获取测量数据,并进行数据分析和报告生成。这有助于用户及时掌握工程状态,做出科学决策,提源悔高工程质量和返裂晌安全。
总的来说,峟思工程仪器仪表中的MCU自动化测量单元实现了智能化测量,为用户提供了高精度、高效率、高灵活性的测量解决方案,带来了智能化革命,对于工程质量控制和安全管理具有重要的正面影响。
6. 什么是单片机自动检测系统
你的问题应该不是很正确!
应该是由单片机以及其他外围设备组成的自动监测系统!
比如说噪声自动检测系统,温度自动检测系统等等。
从根本上来说就是根据单片机以及外围设备设计的一个可以按一定时间检测你要实现的功能(比如说温度吧,你设置一个时间,时间到了,检测,看看温度是否超标,然后主机作出相应的反应)
如果有什么问题可以提问,呵呵
对了,记得给分哦~~~~~
(*^__^*) 嘻嘻……