单片机温度控制器实验报告

合集下载

单片机温度测控实习报告

单片机温度测控实习报告

学号实习报告远程温度监控起止日期:2013 年 6 月24 日至2013 年7 月19 日学生姓名xxx班级10电信科1班成绩指导教师(签字)计算机与信息工程学院2013年7 月14 日目录第一章生产实习介绍 (1)1.1实习的目的 (1)1.2实习的意义 (1)1.3项目概要 (1)1.4设计任务和要求 (2)第二章系统开发与调试 (3)2.1系统功能介绍 (3)2.2开发系统总的原理图 (3)2.3单片机开发板的焊接 (3)2.3.1焊接操作要领 (3)2.3.2焊接注意事项 (4)2.3.3焊接清单 (4)第三章开发板调试程序及结果 (6)3.1 LED流水灯的调试 (6)3.1.1调试程序 (6)3.1.2 LED调试结果 (7)3.2数码管调试 (7)3.2.1数码管程序 (7)3.2.2数码管调试结果 (8)3.3液晶(LCD—1206)显示调试 (8)3.3.1 LCD调试程序 (8)3.3.2 LCD调试结果 (12)第四章开发板扩展应用-----远程温度监控 (13)4.1 远程温度监控介绍 (13)4.1.1 要求 (13)4.1.2 分析 (13)4.2主要部件分析 (13)4.2.1传感器DS18B20简介 (13)4.2.2 实验模拟电路图 (14)4.2.3 报警模块 (14)4.2.4 温度检测 (15)4.2.5 电平串口发送 (15)4.3调试及结果 (16)4.3.1 调试主要程序 (16)4.3.2 调试结果 (24)第五章开发过程遇到的问题、现象及解决办法 (24)5.1所遇问题、现象 (25)5.2解决办法 (25)第六章实习体会 (26)第一章生产实习介绍1.1实习的目的大三临近放假,学校组织我们于电信楼进行生产实习,以提高我们对所学科目的更深层次的认识,从开始对单片机的焊接到最后的调试和应用,锻炼了自己动手实干的能力,获取了一定的工作经验,提高自身修养,主要基于我们所学的单片机及相关知识,进行一定的开发与应用,提高自己的动手能力,做好与所学知识的结合,为以后需要从事相关的工作打好一个基础。

温度控制系统实验报告

温度控制系统实验报告

温度控制系统姓名:学号:专业:08电子信息工程摘要本系统是以单片机AT89C52和数字温度传感器DS18B20为核心,设计目标为电热恒温,能实现精确控温,并能显示当前温度。

各项功能的实现由单片机控制系统来完成。

加热功率为0~10W,,电源为直流10V,调温范围+0℃~+100℃,可以根据实际需要进行调节升温速度,温度控制精度为±0.5℃。

关键字:单片机温度控制数字式AbstractThe system is based on AT89C52 microcontroller and digital temperature sensor DS18B20 as the core of the electric thermostat design, to achieve precise temperature control, and can display the current temperature. The realization of its functions by the control system microcontroller to complete. The heating power is 0 ~ 10W,, power supply DC 10V, Temperature range +0 ℃ ~ +100 ℃, can be adjusted according to actual needs of the heating rate, temperature control accuracy of ± 0.5 ℃.KeywordsMicroprocessor Temperature Control Digital一.方案设计一、系统硬件总体设计与描述整个系统的硬件结构框图如图所示:系统的proteus仿真图如下:二、各模块说明1、温度测量模块测量环境温度的传感器采用的是DS-18B20数字温度传感器,该产品采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,测温范围-55℃~+125℃,固有测温分辨率0.5℃。

温度控制器实验报告(1)1

温度控制器实验报告(1)1

单片机课程设计实验报告——温度控制器班级:学号:姓名:老师:合作者:一、实验要求和目的本课程设计的课题是温度控制器。

● ●用电压输入的变化来模拟温度的变化,对输入的模拟电压通过ADC0832转换成数字量输出。

输入的电压为0.00V——5.00V,在三位数码显示管中显示范围为00.0——99.9。

其中0V对应00.0,5V对应99.9单片机的控制目标是风机和加热器。

分别由两个继电器工作来模拟。

系统加了一个滞环。

适合温度为60度。

◆当显示为00.0-50.0时,继电器A闭合,灯A亮,模拟加热器工作。

◆当显示为为50.0-55.0时,保持继电器AB的动作。

◆当显示为55.0-65.0时,继电器A断开,灯A熄灭,模拟加热器停止工作。

◆当显示为65.0-70.0时,保持继电器AB的动作◆当显示为70.0-99.9时,继电器B闭合,灯B亮,模拟风机的工作。

二、实验电路涉及原件及电路图由于硬件系统电路已经给定,只需要了解它的功能,使用proteus 画出原理图就可以了。

实验设计的电路硬件有:1、AT89S52本温度控制器采用AT89C52单片机作为CPU,12MHZ晶振AT89C52的引脚结构图:AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes 的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash 存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

单片机简易炉温控制实验报告

单片机简易炉温控制实验报告

实验名称单片机简易炉温控制课程名称微机原理与嵌入式系统一、实验目的1.学习温度控制系统的特点。

2.学习PID及PWM控制技术。

3、了解炉温控制原理,学会控制炉温。

二、实验设备温控炉一台HD-51-A1单片机一套(STC12C5A16AD)直流稳压电源一台计算机一台三、实验原理1、温控炉的控制原理炉温控制系统主要完成温度采集、编程实现控制算法,通过脉宽调制技术产生加热炉的控制信号,调整占空比控制电热炉加热丝两端的有效电压,来调整温控炉的温度。

2、PWM控制技术:PWM是一种对模拟信号电平进行数字控制的方法。

通过高分辨率计数器的使用,方波的占空比被用来对一个具体模拟信号的电平进行控制。

图6.1显示了两种不同的PWM信号。

图6.1(A)是一个占空比为10%的PWM输出,即在信号周期中,10%的时间通,其余90%的时间断。

图6.1(B)占空比为40% PWM输出。

这两种PWM输出分别是强度为满度值的10%、40%两种不同模拟信号值。

不同占空比的控制波形T HT LT LT HAB3、控制系统结构框图4、温控炉接口电路432567U1BLM324A U2NPNU3SCR321411U1ALM324AMC32015612PT1PT2ACWKAD1T0R1100KR21KR310KR52.7KR4100KR751KR812KR751K R42K R611K 1234567891011121314151617181920+12V-12V +12V +5V+5V+12V-12V-12V+12V-12VJ15、电炉丝部分接线四、控制方案阶跃作用因为这个炉子有散热功能,当电炉丝的加热与炉子的散热达到平衡时,炉子会达到平衡,即该炉子具有自适应能力,所以当输入阶跃(即给定一个适合开度)时,炉子能够自动达到平衡,但这不仅与炉子加热电压有关,也与当时周围环境温度有关。

经过试验,我们发现当给电热炉加热丝加13%电压时,炉子能够达到平衡。

温度控制器实训总结报告

温度控制器实训总结报告

一、实训背景随着科技的不断发展,温度控制技术在工业、医疗、科研等领域扮演着越来越重要的角色。

为了深入了解温度控制系统的原理和实际应用,我们开展了温度控制器实训,通过实际操作和理论分析,提高了对温度控制系统的认识。

二、实训目的1. 理解温度控制系统的基本原理和组成。

2. 掌握温度传感器的种类、原理和特点。

3. 熟悉温度控制器的控制规律和调节方法。

4. 培养动手能力和实际操作技能。

三、实训内容1. 温度传感器的学习在实训过程中,我们学习了各种温度传感器的原理和特点,如热电偶、热电阻、温敏电阻等。

通过实验,我们了解了不同传感器的应用场景和优缺点。

2. 温度控制器的学习我们学习了温度控制器的控制规律和调节方法,包括比例控制、积分控制、微分控制等。

通过实验,我们掌握了如何根据实际需求选择合适的控制规律,并进行了相应的调节。

3. 温度控制系统的搭建与调试在实训中,我们搭建了一个简单的温度控制系统,包括温度传感器、控制器、执行器等。

通过实际操作,我们学会了如何将理论知识应用于实际工程中,并进行了系统的调试和优化。

4. 温度控制系统的应用我们还学习了温度控制系统的应用实例,如工业生产中的加热、冷却、保温等。

通过分析实际案例,我们了解了温度控制系统在实际工程中的重要作用。

四、实训过程1. 理论学习在实训开始前,我们查阅了大量资料,学习了温度控制系统的基本原理和组成。

通过课堂讲解和自学,我们对温度控制技术有了初步的了解。

2. 实验操作在实验过程中,我们按照实验指导书的要求,进行了温度传感器的测试、温度控制器的调试和温度控制系统的搭建。

在实验过程中,我们遇到了一些问题,如传感器信号不稳定、控制器参数设置不合理等,通过查阅资料和与老师讨论,我们逐一解决了这些问题。

3. 总结与反思在实训结束后,我们对实验过程进行了总结和反思,总结了经验教训,并对温度控制技术有了更深入的理解。

五、实训成果1. 理论水平提高通过实训,我们对温度控制系统的基本原理和组成有了更深入的了解,掌握了温度传感器的种类、原理和特点,以及温度控制器的控制规律和调节方法。

stm32 实验报告

stm32 实验报告

stm32 实验报告STM32 实验报告一、引言STM32是一款由STMicroelectronics公司推出的32位单片机系列,具有高性能、低功耗和丰富的外设资源等特点。

本篇实验报告将介绍我在学习和实践STM32过程中的一些经验和成果。

二、实验目的本次实验的目的是通过使用STM32单片机,实现一个简单的温度监测系统。

通过该实验,我希望能够熟悉STM32的开发环境,掌握基本的硬件连接和编程方法,并能够成功运行一个简单的应用程序。

三、实验步骤1. 硬件连接:将STM32单片机与温度传感器、LCD显示屏等硬件设备连接起来。

确保连接正确,避免短路或接触不良的情况。

2. 开发环境搭建:下载并安装STM32CubeIDE,配置开发环境。

这是一个集成开发环境,支持STM32系列的开发和调试。

3. 编写代码:使用C语言编写一个简单的程序,实现温度传感器数据的读取和显示。

在编写代码过程中,需要熟悉STM32的寄存器和外设配置,以及相关的函数库。

4. 编译和烧录:将编写好的代码进行编译,生成可执行文件。

然后使用JTAG或SWD接口将可执行文件烧录到STM32单片机中。

5. 测试和调试:将STM32单片机连接到电源,观察LCD显示屏上是否正确显示当前的温度数值。

如果有错误或异常情况,需要进行调试和排查。

四、实验结果经过以上的实验步骤,我成功地实现了一个简单的温度监测系统。

在LCD显示屏上,我可以清晰地看到当前的温度数值,并且该数值能够实时更新。

通过与实际温度计的对比,我发现该系统的测量结果相当准确。

五、实验总结通过这次实验,我对STM32单片机的开发和应用有了更深入的了解。

我学会了如何搭建开发环境、编写代码、编译和烧录程序,并且成功实现了一个简单的应用。

在实验过程中,我也遇到了一些问题,但通过查阅资料和与同学的交流,我能够及时解决这些问题。

在今后的学习和实践中,我将进一步探索STM32单片机的功能和应用领域。

我希望能够深入研究更复杂的项目,并挖掘出更多的潜力。

单片机温度控制器实验报告

单片机温度控制器实验报告

南京邮电大学通达学院2010/2011学年第1学期课程设计实验报告课题名称基于CPU的8LED温度显示控制器的设计专业通信工程学生班级070018学号07001836姓名赵静静指导老师林建中实验日期2010 年11 月19 日题目:基于单片cpu的8led温度显示控制器的设计一,实验目的和要求1,Proteus软件的MCS51单片机仿真学习2,根据提供的参考工程,在proteus平台自己重新设计实验电路所需要的电器原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取,原理图的电气连接,程序的编写编译以及运行,并能查出其错误等。

基本要求:用热敏电阻或温度传感器作温度探头,通过AD转换器变换,把温度数据转换成BCD码在LCD上显示。

显示精度±0。

5℃能记录和回放温度参数,记录间隔可任意设定(1S到1h,步长1s)回放数据速度可设定画出温度变化曲线。

发挥部分:1 显示精度提高到±0。

1℃2 显示精度提高到±0。

01℃3 与实际温度计温度比较,找出温度显示误差曲线,在报告中描出,并分析误差来源4 实现温度自动补赏二,实验仪器微型计算机一台三,实验原理温度测量通常可以用两种方式来实现,一种是用热敏电阻之类的器件,由于感温效应,热敏电阻的阻值能够随温度变化,当热敏电阻接入电路,测量过它的电流或其两端的电压就会随温度变化发生响应的变化,在将温度变化的电压或电流采集过来,进行A/D 转化后,发送到单片机进行处理,通过显示电路,就可以将被测温度显示出来。

这种设计需要用到A/D转换电路,其测温电路比较麻烦。

第二种方法是用温度传感器芯片。

温度传感器芯片能把温度信号转换成数字信号,直接发送给单片机,转换后通过显示电路既可以显示。

四,基本芯片及其原理单片机微型计算机简称单片机,是指在一块芯片体上集成了中央处理器CPU、随机存储器RAM、程序存储器ROM或EPROM、定时器/计数器、中断控制器以及串行和并行I/O 接口等部件,构成一个完整的微型计算机。

《单片机实习报告温控系统

《单片机实习报告温控系统

学院单片机课程设计报告书题目:温度控制系统设计院系名称:学院学生姓名:)专业名称:自动化班级:自动时间:2011年6月7日至6月17 日温度控制系统设计一、设计目的在现代化的工业生产中电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。

温度作为一个基本物理量,它是一个与人们的生活环境、生产活动密切相关的重要物理量。

在现代化的工业生产过程中温度作为一种常用的主要被控参数,在很多生产过程中我们需要对温度参数进行检测。

例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测。

采用单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。

因此单片机对温度的控制问题是一个工业生产中经常会遇到的问题。

本次设计我们采用MCS-52系列单片机与各种外围电路构成单片机温度自动检测和控制系统,通过检测和控制一个温箱模型,实现对温度的实时检测和控制。

通过本次设计掌握对温度检测控制系统的硬件设计方法和软件编写方法。

熟悉了Protues软件和Kiel软件的使用方法。

通过课题的研究进一步巩固所学的知识,同时学习课程以外的相关知识,培养综合应用知识的能力。

锻炼动手能力与实际工作能力,将所学的理论与实践结合起来。

二、设计要求本温度控制系统是一个闭环反馈控制系统,它用温箱中的温度传感器将检测到的温度信号经放大,A/D转换后送入单片机中进行数据处理并显示当前温度值,用当前温度值与设定温度值进行比较。

根据比较的结果得到控制信号用以控制控制箱中继电器的通断,实现对温箱中加热器的控制。

通过这种控制方式实现对保温箱的温度控制。

本课题设计的要求主要包括硬件设计和软件设计两部分。

系统功能由硬件和软件两大部分协调完成,硬件部分主要完成主机电路、数据采集电路、控制执行等电路的设计。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南京邮电大学通达学院2010/2011学年第1学期课程设计实验报告课题名称基于CPU的8LED温度显示控制器的设计专业通信工程学生班级070018学号07001836姓名赵静静指导老师林建中实验日期2010 年11 月19 日题目:基于单片cpu的8led温度显示控制器的设计一,实验目的和要求1,Proteus软件的MCS51单片机仿真学习2,根据提供的参考工程,在proteus平台自己重新设计实验电路所需要的电器原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取,原理图的电气连接,程序的编写编译以及运行,并能查出其错误等。

基本要求:用热敏电阻或温度传感器作温度探头,通过AD转换器变换,把温度数据转换成BCD码在LCD上显示。

显示精度±0。

5℃能记录和回放温度参数,记录间隔可任意设定(1S到1h,步长1s)回放数据速度可设定画出温度变化曲线。

发挥部分:1 显示精度提高到±0。

1℃2 显示精度提高到±0。

01℃3 与实际温度计温度比较,找出温度显示误差曲线,在报告中描出,并分析误差来源4 实现温度自动补赏二,实验仪器微型计算机一台三,实验原理温度测量通常可以用两种方式来实现,一种是用热敏电阻之类的器件,由于感温效应,热敏电阻的阻值能够随温度变化,当热敏电阻接入电路,测量过它的电流或其两端的电压就会随温度变化发生响应的变化,在将温度变化的电压或电流采集过来,进行A/D 转化后,发送到单片机进行处理,通过显示电路,就可以将被测温度显示出来。

这种设计需要用到A/D转换电路,其测温电路比较麻烦。

第二种方法是用温度传感器芯片。

温度传感器芯片能把温度信号转换成数字信号,直接发送给单片机,转换后通过显示电路既可以显示。

四,基本芯片及其原理单片机微型计算机简称单片机,是指在一块芯片体上集成了中央处理器CPU、随机存储器RAM、程序存储器ROM或EPROM、定时器/计数器、中断控制器以及串行和并行I/O 接口等部件,构成一个完整的微型计算机。

目前,新型单片机内还有A/D及D/A转换器、高速输入/输出部件、DMA通道、浮点运算等特殊功能部件。

由于它的结构和指令功能都是按工业控制设计要求设计的,特别适用于工业控制及其数据处理场合,因此,确切的称谓是微控制器,单片机只是习惯称呼。

(1)单片机的特点1)有优异的性能价值比。

2)集成度高、体积小、有很高的可靠性。

单片机把各个功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。

另外,其体积小,对于强磁场环境易于采取措施,适合于恶劣环境下工作;也易于产品化。

3)控制功能强。

为了满足工业控制的要求,一般单片机的指令系统中均有及其丰富的转移指令、I/O口逻辑操作及位处理指令。

一般来说,单片机的逻辑控制功能及运行速度高于同意档次的微机。

4)单片机的系统扩展和系统配置都比较典型、规范,而且非常容易构成各种规模的应用系统。

(2)单片机并行I/O 接口的扩展单片机与外部交换信息是通过I/O 接口电路来实现的。

A T89C51单片机本身有4个8位的并行I/O 口P0-P3,但实际使用时往往再增加些I/O 口,以便与外部设备交换数据。

AT 89C51单片机外部RAM 和扩展I/O 接口是统一编址的。

用户可以把外部64KB RAM 空间的一部分作为扩展I/O 接口地址空间,每一个I/O 接口相当于一个RAM 存储单元,访问外部RAM 存储单元就像访问外部I/O 接口,即用“MOVX ”指令对扩展I/O 接口进行输入输出操作。

查询式键盘属于独立式键盘,键盘的各个按键之间彼此是独立的且是最简单的键盘电路。

每个键地接入一根数据输入线。

如图所示。

注意:由于每一个按键均需要一根I/O 口线 ,当键盘按键数量比较多时,需要的I/O 口线也较多,因此独立式键盘只适合于按键较少的应用场合。

一般情况下,按键数等于占用I/O 端口数。

查询式键盘的结构图如图所示: S1SW-PBS2SW-PB R11k R21kVCC图2-5 查询式键盘的接口电路查询式键盘可以工作在多种方式下,中断方式、程序查询方式、定时查询发送和中断查询方式。

在中断模式下,按键的数量受到外部中断源的限制。

在有特殊需要的场合,还可以借用内部的定时器中断。

所以在这种模式下,按键的数目小于外部中断源和单片机定时器数量之和。

程序查询和定时查询类似,都是通过读I/O 状态,当有键被按下时相应的I/O 口线变为低电平,而未被按下的键对应的I/O 口线保持为高电平,这样通过读I/O 口状态可判断是否有键按下和哪一个键被按下。

温度传感器及其原理温度传感器是一种将温度变化转换为电量变化装置。

将温度变化转换为热电势变化的称热电偶传感器。

将温度变化转换为电阻变化的称为热电阻传感器;金属热电阻式传感器简称为热电阻,半导体热电阻式传感器简称为热敏电阻。

温度传感在工业生产、科学研究、民用生活等许多领域得到广泛应用。

电阻式传感器广泛被用于-200~960℃范围内的温度。

是利用导体或半导体的电阻随温度变化而变化的性质而工作的,用仪表测量出热电阻的阻值变化,从而得到与电阻值对应的温度值。

电阻式传感器分为金属热电阻传感器和半导体热电阻传感器两大类。

前者称为热电阻,后者称为热敏电阻。

P1.0P1.1对于热敏电阻,需要了解以下几点:(1)测温原理及特性NTC热敏电阻研制的较早,也较成熟。

最常见的是由金属氧化物组成。

根据不同的用途,NTC又可以分为两大类。

第一类用于测量温度。

它的电阻值与温度之间呈负的指数关系。

第二类为负的突变型,当其温度上升到某设定值时,其电阻值突然下降,多用于各种电子电路中抑制浪涌电流,起保护作用。

典型的PTC热敏电阻通常是在钛酸钡陶瓷中加入施主杂质以增大电阻温度系数。

(2)热敏电阻的应用热敏电阻具有尺寸小、响应速度快、阻值大、灵敏度高等特点,因此它在许多领域被广泛应用。

(3)热敏电阻的温度补偿热敏电阻可以在一定的温度范围内对某些元件进行温度补偿。

热敏电阻可以用于温度控制:温度传感器的作用是将温度经过热敏电阻Rt转换为电压信号。

在本课题中温度范围的计算原理:首先把A/D转换中电位器旋钮顺时针旋到底,即模拟信号的输入不衰减,选取两个温度状态T1、T2,分别测量出其模拟输出电压V1、V2;根据0809的输入范围在0到5伏,即可计算出温度极限。

0伏时对应的温度TL:T1-(V1-0)(T2-T1)/(V2-V1)。

5伏时对应的温度TH: T1-(V1-5)(T2-T1)/(V2-V1)本实验中近似计算TH为150摄氏度,TL为-50摄氏度。

程序温度的计算原理:首先用温度范围除以0到256(即每个十六进制数的温度增长率),然后乘以模拟转换的数字量,即得到升高的温度,在和最低温度相加,就可以得到实际的温度值。

其公式为:TL+AX(TH-TL)/256TL:显示的最低温度TH:显示的最高温度AX:模拟电压所转换的数字量LED显示器结构与原理LED显示器由7条发光二极管组成显示字段,有的还带有一个小数点dp将7段发光二极管阴极连在一起,成为共阴极接法,当某个字段的阳极为高电平时,对应的字段就点亮。

共阳极接法是将LED的所有阳极并接后就连到+5V上,当某一字段的阴极为0时,对应的字段就点亮。

五,显示设计实验原理图:三张图分别代表,实验连接图,实验时间记录图,温度记录控制图置存储取首址;显示缓冲区首址(对应字形码);置串行输出口即RXD,置时钟输出口即TXD;存入显示数据。

表头地址;查表指令;段码地址指针,显示段码字节数;输出子程序;取段码;段码左移则输出一位段码然后发送脉冲一位。

显示程序流程图LED显示器流程图如图所示:A/D 转换子程序设计显示缓冲器存放0AH ,0DH ,-,0XH ,0XH ;串行静态显示“AD –XX ”XX 表示0~F ;A/D 地址清零,启动A/D 转换器,延时等待转换结果然后读入结果送入数码管显示。

累加器内容存入B 中,A 的内容高四位与低四位交换,A 的内容高四位清零,A/D 转换结果高位送入DBUF3中,取出A/D 转换后的结果,A 的内容高四位清零则结果低位送入DBF4中;串行静态显示“AD –XX ”。

静态显示子程序;显示表头地址;取段码到TEMP 中去显示段码地址指针读出段码字节数;移位次数取段码;段码左移;输出一位段码;发送一个一位脉冲。

A/D 转换流程图A/D 转换流程图如图所示: 地址指针设置取断码断码左移一位输出一位断码输出一个位移脉冲八位断码移出结束?五位断码移出结束?踏步等待 NNY Y开始初始启动A/D转换A/D转换完成?数据输出延时结束键盘部分查询式键盘程序设计先初始化地址参数,显示缓冲区初始;输入前,锁存器置“1”;读取键盘状况;有键按下,若无键按下返回;延时去抖动;确有键按下则从键表中取键值然后相比较,若相等则等键释放,延时去抖动得键码;若不相等,到继续访问键值表,键值不在键值中,即多键同时按下;然后键表值静态显示。

查询式键盘流程图查询式键盘流程图如图所示:开始显示缓冲区初始LED显示N有键输入?Y读取键值键值转换为显示数温度传感器部分温度传感器的程序设计输入A/D端口地址;显示温度,将正负值区分显示;显示“–”号时求补码;显示“”时存入显示内容,读入结果,计算温度。

其公式为:TL+AX(TH-TL)/256(TL:显示的最低温度TH:显示的最高温度AX:模拟电压所转换的数字量)温度检测的流程图温度检测流程图如图所示:A/D转换温度计算判断正负加“-”号显示温度控制系统的总流程图如图所示:实验程序设计#include<AT89X51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar code tab2[]="00:00:00 000";uchar code tab3[]="temp: . ";int tab5[]={0,0,00};sbit DQ = P2^4;初始化温度参数显示温度采样当前温度键盘值是?当前温度与设定温度比较不变读键盘向上键向下键 设定温度加1 设定温度减1开始当前温度和设定温度送显示缓冲char code tab[4][4]={ {1,4,7,10},{2,5,8,0},{3,6,9,11},{12,13,14,15}};uchara,miao,shi,fen,tt,key1n,key3n,key2n,nian,yue,r,nianb,speak,wendu,wendu1,wendu3, miao1,shu,shu1,wendu4;unsigned char code dotcode[167]={0,6,12,19,25,31,37,44,50,56,62,69,75,81,87,94};sbit rs=P2^5;sbit en=P2^7;sbit rw=P2^6;#define yh 0x80 //第一行的初始位置#define er 0x80+0x40 //第二行初始位置sfr DBPort = 0x80;unsigned char tt,tt1;unsigned char t[2],*pt;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//定义DQ引脚为P3.4/***********ds18b20延迟子函数(晶振12MHz )*******//************DS18B20对时间要求很严,但只能长不能短*************在11.0592M下也行,因为时间长些********/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于 480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat>>=1;}}/**************读取ds18b20当前温度************/unsigned char *ReadTemperature() {unsigned char tt[2];Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x4E); // //写入"写暂存器"命令,修改TH和TL和分辩率配置寄存器//先写TH,再写TL,最后写配置寄存器WriteOneChar(100); //写入想设定的温度报警上限WriteOneChar(4); //写入想设定的温度报警下限WriteOneChar(0x7f); //写配置寄存器,格式为0 R1 R0 1,1 1 1 1//R1R0=00分辨率娄9位,R1R0=11分辨率为12位delay_18B20(80); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(80); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(80);tt[0]=ReadOneChar(); //读取温度值低位tt[1]=ReadOneChar();return(tt);}void covert1(void) //将温度转换为LCD显示的数据{unsigned char TH=110,TL=-20;unsigned char x=0x00,y=0x00;pt=ReadTemperature();t[0]=*pt;pt++;t[1]=*pt;if(t[1]>0x07) //判断正负温度{wendu3=1; //0x2d为"-"的ASCII码t[1]=~t[1]; /*下面几句把负数的补码*/t[0]=~t[0]; /* 换算成绝对值*********/x=t[0]+1; /***********************/t[0]=x; /***********************/if(x>255) /**********************/t[1]++; /*********************/}else wendu3=0; //0xfe为变"+"的ASCII码t[1]<<=4; //将高字节左移4位t[1]=t[1]&0x70; //取出高字节的3个有效数字位x=t[0]; //将t[0]暂存到X,因为取小数部分还要用到它x>>=4; //右移4位x=x&0x0f; //和前面两句就是取出t[0]的高四位x=t[1]|x; //将高低字节的有效值的整数部分拼成一个字节wendu=x;t[0]=t[0]&0x0f; //取有效的两位小数x=t[0];wendu1=dotcode[x]; //分离出百分位}unsigned char LCD_Wait(void){rs=0;rw=1; delay(1);en=1; delay(1);// while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,//可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80//实际硬件时打开此语句en=0;return DBPort;}void LCD_Write(bit style, unsigned char input){en=0;rs=style;rw=0; _nop_();DBPort=input; _nop_();//注意顺序en=1; _nop_();//注意顺序en=0; _nop_();LCD_Wait();}void GotoXY(unsigned char x, unsigned char y) {if(y==0)LCD_Write(0,0x80|x);if(y==1)LCD_Write(0,0x80+0x40+x);}//sbit s4=P0^3;uchar num,count,flag,flag1,flag2,flag3,s1num,j; void keyscan();write_1602com(uchar com)//液晶写入指令函数{en=0;rs=0;//置为写入命令rw=0;_nop_();P0=com;//送入数据_nop_();en=1;//拉高使能端_nop_();en=0;//完成高脉冲_nop_();LCD_Wait();}write_1602dat(uchar dat){en=0;rs=1;//置为写入数据rw=0;_nop_();P0=dat;//送入数据_nop_();en=1;_nop_();en=0;_nop_();LCD_Wait();}void write_sfm(uchar add,uchar dat)//写时分秒{uchar gw,sw;gw=dat%10;sw=dat/10;write_1602com(add+er);write_1602dat(0x30+sw);write_1602dat(0x30+gw);}void write_nyr(uchar add,uchar dat)//写时分秒{uchar gw,sw;gw=dat%10;sw=dat/10;write_1602com(add+yh);write_1602dat(0x30+sw);write_1602dat(0x30+gw);}void write(uchar add)//写时分秒{write_1602com(add+yh);write_1602dat(58);}void init(){write_1602com(0x38);//设置液晶工作模式write_1602com(0x0c);//开显示不显示光标write_1602com(0x06);//整屏不移动,指针加一write_1602com(0x01);write_1602com(yh);//字符写入的位置for(a=0;a<16;a++){write_1602dat(tab3[a]);//delay(3);}write_1602com(er+2);for(a=0;a<16;a++){write_1602dat(tab2[a]);//delay(3);}}keys(){unsigned char hang,lie,key; if(P3!=0x0f)delay(5);if(P3!=0x0f){switch(P3&0x0f){case 0x0e:lie=0;break;case 0x0d:lie=1;break;case 0x0b:lie=2;break;case 7:lie=3;break;}P3=0xf0;P3=0xf0;switch(P3&0xf0){case 0xe0:hang=0;break; case 0xd0:hang=1;break;case 0xb0:hang=2;break;case 0x70:hang=3;break;}P3=0x0f;while(P3!=0x0f)P1_1=1;P1_1=0;key=tab[hang][lie]; elsekey=20;speak=0;return(key);}char kbscan() //键盘扫描{int key;key=keys();if(key==10){key1n++;if(key1n==6)key1n=0;}if(key==12){key3n++;if(key3n==2)key3n=0;}if(key==11){key2n++;if(key2n==6)key2n=0;}while(key1n!=0){key=keys();if(key==10){key1n++;if(key1n==7)key1n=0;}switch(key1n){case 1: TR1=0;//关闭定时器//TR1=0;write_1602com(er+0x02);//写入光标位置write_1602com(0x0f);//设置光标为闪烁break;case 2: write_1602com(er+3);//fen //write_1602com(0x0f);break;case 3: write_1602com(er+5);//shi//write_1602com(0x0f);break;case 4: write_1602com(er+6);//fen //write_1602com(0x0f)break;case 5: write_1602com(er+8);//shi//write_1602com(0x0f);break;case 6: write_1602com(er+9);//fen //write_1602com(0x0f);break;case 0:write_1602com(0x0c);//设置光标不闪烁TR1=1;//打开定时器break;}if(key<10){write_1602dat(0x30+key);switch(key1n){case 1: shi=shi%10+key*10;break; case 2: shi=shi/10*10+key;break;case 3: fen=fen%10+key*10;break;case 4: fen=fen/10*10+key;break;case 5: miao=miao%10+key*10;break;case 6: miao=miao/10*10+key; break;case 0:write_1602com(0x0c);//设置光标不闪烁TR1=1;//打开定时器break;}}while(key2n!=0){key=keys();speak=0;if(key==11){key2n++;if(key2n==4)key2n=0;}switch(key2n){case 1: TR1=0;//关闭定时器//TR1=0;write_1602com(er+13);//写入光标位置write_1602com(0x0f);//设置光标为闪烁break;case 2: write_1602com(er+14);//fen //write_1602com(0x0f);break;case 3: write_1602com(er+15);//shi //write_1602com(0x0f);break;case 0:write_1602com(0x0c);//设置光标不闪烁TR1=1;//打开定时器break;}if(key<10){write_1602dat(0x30+key);switch(key2n){case 2: shu=shu%10+key*10;break;case 3: shu=shu/10*10+key;break;case 1: shu1=key*100;break;case 0:write_1602com(0x0c);//设置光标不闪烁TR1=1;//打开定时器break;}miao1=shu;r=1;}}}main(){nian=0;nianb=20;yue=0;miao1=1;init();TMOD = 0x10;TH1 = 0xFF;TL1 = 0x0E0;EA = 1;ET1 = 1;TR1 = 1;P1=0X00;covert1();P3=0X0F;while(1){kbscan() ;covert1();if(miao1==0)wendu4=wendu;write_sfm(8,miao);write_sfm(5,fen);write_sfm(2,shi);write_nyr(5,wendu);write_nyr(8,wendu1);if(key3n==1)write_nyr(12,wendu4);else{write_1602com(yh+12);//字符写入的位置write_1602dat(' ');write_1602dat(' ');}}}void timer1() interrupt 3{TH1 = 0x3c;TL1 = 0x0b0;tt++;if(tt==20){tt=0;miao++;if(r==1)miao1--;}if(miao==60){miao=0;fen++;}if(fen==60){fen=0;shi++;}}实验小结:本次课程设计主要练习了对51单片机的使用,同时使用proteus仿真软件对所做设计进行的仿真,使用keil进行程序的调试。

相关文档
最新文档