单片机显示接口实验报告范文
单片机数码管显示实验总结

单片机数码管显示实验总结单片机数码管显示实验总结一、实验目的本次实验旨在通过单片机控制数码管显示,掌握数码管的工作原理、编程控制方法以及单片机与数码管的接口技术。
通过实验,提高自己的动手能力和编程技能,为今后的学习和实际工作打下坚实的基础。
二、实验原理数码管是一种常用的电子显示器件,它由多个LED组成,通过控制各个LED的亮灭来显示不同的数字或字符。
本次实验采用的是共阴极数码管,它由8个LED组成,通过单片机控制每个LED的亮灭状态来显示不同的数字或字符。
三、实验步骤1.硬件准备(1)选择合适的单片机开发板,如Arduino、STM32等。
(2)购买数码管及相应的驱动电路。
(3)准备杜邦线、电阻、电容等电子元件。
2.硬件连接(1)将数码管与单片机开发板连接起来。
(2)根据数码管驱动电路的要求,连接电源、地线和控制信号线。
(3)连接电源后,打开开发板电源,观察数码管的显示效果。
3.编程控制(1)在开发板上编写程序,控制数码管显示不同的数字或字符。
(2)使用相应的编译器将程序编译成可执行文件,上传到开发板上。
(3)观察数码管的显示效果,调试程序,使其达到预期效果。
4.测试与评估(1)在不同情况下测试数码管的显示效果,如按键输入、传感器数据等。
(2)对程序进行优化和改进,提高程序的效率和稳定性。
(3)总结实验过程中的问题和解决方法,为今后的学习和实际工作提供参考。
四、实验结果及分析1.实验结果在实验过程中,我们成功地实现了对数码管的编程控制,使其能够根据不同的输入显示不同的数字或字符。
同时,我们也发现了一些问题,如数码管的亮度不够、显示的数字不清晰等。
经过调试和改进,我们解决了这些问题,使数码管的显示效果更加理想。
2.结果分析通过本次实验,我们深入了解了数码管的工作原理和编程控制方法,掌握了单片机与数码管的接口技术。
同时,我们也发现了一些问题,如数码管的亮度不够、显示的数字不清晰等。
这些问题的出现可能与硬件连接、编程控制等方面有关。
单片机数码管显示实验报告

单片机数码管显示实验报告单片机数码管显示实验报告引言:数码管是一种常用的显示器件,广泛应用于各种电子设备中。
本实验旨在通过使用单片机控制数码管的亮灭来实现数字的显示,以及通过编程控制数码管显示不同的数字和字符。
1. 实验目的本实验的主要目的是通过使用单片机控制数码管的显示,了解数码管的工作原理,以及掌握单片机编程技巧。
2. 实验材料本实验所需材料包括:单片机(如STC89C52)、数码管、电阻、面包板、杜邦线等。
3. 实验原理数码管是一种由多个发光二极管组成的显示器件,通常由7个发光二极管和一个小数点组成,可以显示0-9的数字和一些字母。
每个发光二极管的亮灭与单片机输出的电平有关,通过控制单片机的输出口,可以实现数码管上不同数字和字符的显示。
4. 实验步骤4.1 连接电路首先,将单片机和数码管通过杜邦线连接在一起。
将数码管的共阳极连接到单片机的输出口,将数码管的每个段连接到单片机的不同IO口。
同时,为了保护数码管和单片机,还需要在数码管的每个段与单片机之间串联一个适当的电阻。
4.2 编写程序使用C语言编写程序,通过控制单片机的输出口,实现数码管上不同数字和字符的显示。
程序的主要逻辑是通过改变单片机输出口的电平来控制数码管的亮灭。
根据数码管的接线方式和编码规则,可以通过设置不同的输出口电平组合来显示不同的数字和字符。
4.3 烧录程序将编写好的程序通过编程器烧录到单片机中。
4.4 运行实验将单片机连接到电源,观察数码管上的显示效果。
通过改变程序中的输出口电平设置,可以实现不同数字和字符的显示。
5. 实验结果通过实验,我们成功地实现了通过单片机控制数码管的显示。
通过改变程序中的输出口电平设置,可以实现数码管上不同数字和字符的显示。
实验结果表明,单片机可以灵活地控制数码管的亮灭,实现多种显示效果。
6. 实验总结通过本次实验,我们深入了解了数码管的工作原理,掌握了单片机编程技巧。
数码管作为一种常用的显示器件,在电子设备中有着广泛的应用。
单片机的显示实验报告

一、实验目的本次实验旨在通过学习单片机显示技术,掌握单片机控制数码管显示的基本原理和方法。
通过实验,加深对单片机基本原理和实际应用的理解,提高动手实践能力。
二、实验内容1. 硬件设备(1)单片机:AT89C51(2)晶振:12MHz(3)电容:22pF(两个)(4)复位电路:10K电阻与10F电容实现自动复位(5)显示器:7段共阳级数码管2. 软件环境(1)仿真软件:Proteus 7.8(2)编程软件:Keil 4.223. 实验步骤(1)搭建实验电路根据实验要求,利用Proteus软件搭建单片机实验电路,包括单片机、晶振、电容、复位电路和7段共阳级数码管。
(2)编写程序利用Keil 4.22编程软件编写控制数码管显示的程序,实现以下功能:1)数码管显示0-9循环显示2)数码管显示自定义字符3)数码管显示时间(小时、分钟、秒)(3)编译程序将编写的程序编译生成HEX文件。
(4)仿真运行在Proteus软件中加载HEX文件,观察数码管显示效果。
三、实验结果与分析1. 数码管显示0-9循环显示通过编写程序,实现数码管显示0-9循环显示的功能。
程序中,首先定义一个数组,存储0-9的数字编码;然后通过循环遍历数组,控制数码管显示对应的数字。
2. 数码管显示自定义字符为了实现数码管显示自定义字符,需要设计字符编码。
根据字符形状,将字符编码存储在数组中。
程序中,通过改变数组指针,控制数码管显示不同的字符。
3. 数码管显示时间实现数码管显示时间功能,需要设计一个计时器。
程序中,通过定时器中断,更新时间数据。
当定时器溢出时,更新数码管显示的时间。
四、实验总结通过本次实验,掌握了单片机控制数码管显示的基本原理和方法。
具体收获如下:1. 熟悉了Proteus和Keil软件的使用,提高了编程能力。
2. 加深了对单片机基本原理和实际应用的理解。
3. 学会了数码管显示程序的设计和调试。
4. 提高了动手实践能力。
五、拓展实验1. 实现多个数码管的连接和显示2. 设计一个可编程的字符编码表,实现更多字符的显示3. 利用数码管显示复杂图形,如动画效果4. 将数码管显示与其他功能结合,如温度、湿度显示等通过以上拓展实验,可以进一步提高单片机显示技术的应用水平。
数码显示控制实验报告(3篇)

第1篇一、实验目的1. 熟悉数码显示模块的结构和工作原理;2. 掌握51单片机控制数码显示模块的方法;3. 学会使用移位寄存器实现数码显示的动态扫描;4. 提高单片机编程能力和实践操作能力。
二、实验原理数码显示模块是一种常见的显示器件,主要由7段LED组成,可以显示0-9的数字以及部分英文字符。
51单片机通过控制数码显示模块的段选和位选,实现数字的显示。
移位寄存器是一种常用的数字电路,具有数据串行输入、并行输出的特点。
在本实验中,使用移位寄存器74HC595实现数码显示的动态扫描。
三、实验仪器与材料1. 51单片机实验板;2. 数码显示模块;3. 移位寄存器74HC595;4. 电阻、电容等电子元件;5. 电路连接线;6. 编译软件Keil uVision;7. 仿真软件Proteus。
四、实验步骤1. 电路连接(1)将51单片机的P1口与数码显示模块的段选端相连;(2)将74HC595的串行输入端Q(引脚14)与单片机的P0口相连;(3)将74HC595的时钟端CLK(引脚11)与单片机的P3.0口相连;(4)将74HC595的锁存端LR(引脚12)与单片机的P3.1口相连;(5)将数码显示模块的位选端与74HC595的并行输出端相连。
2. 编写程序(1)初始化51单片机的P1口为输出模式,P3.0口为输出模式,P3.1口为输出模式;(2)编写数码显示模块的段码数据表;(3)编写74HC595的移位和锁存控制函数;(4)编写数码显示模块的动态扫描函数;(5)编写主函数,实现数码显示模块的循环显示。
3. 编译程序使用Keil uVision编译软件将编写的程序编译成hex文件。
4. 仿真实验使用Proteus仿真软件进行实验,观察数码显示模块的显示效果。
五、实验结果与分析1. 编译程序后,将hex文件下载到51单片机实验板上;2. 使用Proteus仿真软件进行实验,观察数码显示模块的显示效果;3. 通过实验验证,数码显示模块可以正常显示0-9的数字以及部分英文字符;4. 通过实验,掌握了51单片机控制数码显示模块的方法,学会了使用移位寄存器实现数码显示的动态扫描。
单片机实验报告——LED数码管显示实验

单⽚机实验报告——LED数码管显⽰实验(此⽂档为word格式,下载后您可任意编辑修改!)《微机实验》报告LED数码管显⽰实验指导教师:专业班级:姓名:学号:联系⽅式:⼀、任务要求实验⽬的:理解LED七段数码管的显⽰控制原理,掌握数码管与MCU的接⼝技术,能够编写数码管显⽰驱动程序;熟悉接⼝程序调试⽅法。
实验内容:利⽤C8051F310单⽚机控制数码管显⽰器基本要求:利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。
提⾼要求:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:yyyy (年份)mm.dd(⽉份.⽇).asm;Description: 利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。
;Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000H ;复位⼊⼝AJMP MAINORG 000BH ;定时器0中断⼊⼝AJMP TIME0MAIN: ACALL Init_Device ;初始化配置MOV P0,#00H ;位选中第⼀个数码管MOV R0,#00H ;偏移指针初值CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#06HMOV TL0,#0C6H ;赋初值,定时1sLOOP: MOV A,R0ADD A,#0BH ;加偏移量MOVC +PC ;查表取,段码MOV P1,A ;段码给P1显⽰SETB TR0 ;开定时LOOP1: JNB PSW.1,LOOP1 ;等待中断CLR PSW.1INC R0 ;偏移指针加⼀CJNE R0,#0AH,LOOP3MOV R0,#00H ;偏移指针满10清零AJMP LOOP ;返回DB 0FCH,60H,0DAH,0F2H,66H ;段码数据表:0、1、2、3、4 DB 0B6H,0BEH,0E0H,0FEH,0F6H; 5、6、7、8、9 ;***************************************************************** ; 定时器0中断;***************************************************************** TIME0: SETB PSW.1 ;标志位置⼀MOV TH0,#06H ;定时器重新赋值MOV TL0,#0C6HLOOP3: CLR TR0 ;关定时RETI;***************************************************************** ;初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 -Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 -Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend提⾼部分:;*********************************************************;Filename: shumaguan2.asm;Description:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:; 2012 (年份); 12.07(⽉份.⽇); 12.34(⼩时.分钟);Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000HAJMP MAINORG 000BHAJMP TIME0MAIN: ACALL Init_DeviceMOV R0,#00H ;⽤于位选MOV R1,#00H ;⽤于段选MOV R2,#22H ;置偏移量,⽤于控制模式MOV R4,#8MOV R5,#250CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#0FFHMOV TL0,#0C0H ;定时器赋初值1msBACK: MOV P0,R0 ;位选MOV A,R0ADD A,#40H ;选下⼀位MOV R0,AMOV A,R1ADD A,R2 ;加偏移量MOVC +PC ;查表取段码MOV P1,A ;段码给P1显⽰LOOP: SETB TR0 ;开定时HERE: JNB PSW.1,HERE ;等待中断CLR PSW.1DJNZ R5,BACKMOV R5,#250DJNZ R4,BACKMOV R4,#8 ;循环2000次(2s)MOV A,R2ADD A,#04H ;偏移量加04H,到下⼀模式段码初值地址 MOV R2,ACJNE R2,#2EH,LOOP2MOV R2,#22H ;加三次后偏移量回到初值LOOP2: AJMP BACK ;返回进⼊下⼀模式;段码数据表:DB 0DAH,60H,0FCH,0DAH ; 2102DB 0E0H,0FCH,61H,60H ; 701. 1DB 66H,0F2H,0DBH,60H ; 432. 1;*****************************************************************; 定时器0中断;***************************************************************** TIME0: MOV TH0,#0FFH MOV TL0,#0C0HCLR TR0SETB PSW.1INC R1 ;偏移指针加⼀CJNE R1,#04H,LOOPMOV R1,#00H ;偏移指针满04H清零RETI;***************************************************************** ; 初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital; P0.1 - Unassigned, Open-Drain, Digital; P0.2 - Unassigned, Open-Drain, Digital; P0.3 - Unassigned, Open-Drain, Digital; P0.4 - Unassigned, Open-Drain, Digital; P0.5 - Unassigned, Open-Drain, Digital; P0.6 - Unassigned, Open-Drain, Digital; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Open-Drain, Digital; P1.1 - Unassigned, Open-Drain, Digital; P1.2 - Unassigned, Open-Drain, Digital; P1.3 - Unassigned, Open-Drain, Digital; P1.4 - Unassigned, Open-Drain, Digital; P1.5 - Unassigned, Open-Drain, Digital; P1.6 - Unassigned, Open-Drain, Digital; P1.7 - Unassigned, Open-Drain, Digital; P2.0 - Unassigned, Open-Drain, Digital; P2.1 - Unassigned, Open-Drain, Digital; P2.2 - Unassigned, Open-Drain, Digital; P2.3 - Unassigned, Open-Drain, Digitalmov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend六、程序测试⽅法与结果、软件性能分析软件调试总体截图:基础部分:软件运⾏时,我们发现P0端⼝为00H,P1端⼝以依次为FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H。
单片机LCD显示实验报告

单片机LCD显示实验报告实验目的:本实验旨在通过使用单片机控制LCD进行显示,掌握单片机与外围设备的交互操作,学习并理解LCD显示原理。
实验器材:1. 单片机开发板2. LCD1602液晶显示屏3. 杜邦线若干4. 电阻若干实验原理:液晶显示原理是在液晶材料施加电场的作用下,通过改变传输光的偏振状态来实现图像显示。
本实验使用的LCD1602是一种16×2的字符型液晶显示模块,其中每个字符由5×8的点阵构成。
实验步骤:1. 连接电路:将LCD1602与单片机开发板通过杜邦线连接。
一般来说,液晶显示屏的引脚布局如下:- VSS: 接地- VDD: 供电(一般为5V)- V0:对比度控制端(通过电位器调节)- RS:数据/指令选择端(通常连接到单片机的I/O口)- RW:读写选择端(连接至地)- E:使能端(通常连接到单片机的I/O口)- D0-D7:数据线(连接到单片机的I/O口)- A:背光灯正极(连接5V)- K:背光灯负极(连接至地)2. 编写程序:根据实验要求,使用相应的单片机编程语言编写程序。
在程序中,需要调用相关的LCD1602命令来实现字符的显示。
3. 烧录程序:使用相应的烧录工具将编写好的程序下载到单片机开发板中。
4. 实验验证:将开发板上电,通过观察LCD1602的显示情况来验证程序的正确性。
实验结果与分析:在本次实验中,我使用单片机控制LCD1602成功实现了字符的显示。
实验结果表明,编写的程序能够正确地将字符显示在液晶屏上,并且显示效果良好。
实验中遇到的问题及解决方法:在实验过程中,我遇到了一些问题,例如LCD1602无显示、乱码或显示异常等情况。
针对这些问题,我采取了以下解决方法:1. 检查接线是否正确:确保LCD1602的引脚与单片机开发板之间的连接准确无误。
2. 检查电源供应:确认LCD1602的电源供应是否正常,电源电压是否稳定。
3. 调整对比度:通过旋转电位器调整LCD1602的对比度,以适应不同环境下的显示效果要求。
单片机接口技术实验报告

单片机接口技术实验报告班级:姓名:学号:指导老师:廖平中南大学机电工程学院实验一定时器实验一、实验目的1.学习89C51内部计数器的使用和编程方法2.进一步掌握中断处理程序的编写方法二、实验说明关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
本实验使用的是定时器,定时为一秒钟。
CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。
定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是12MHZ,本程序工作于方式2,即8位自动重装方式定时器, 定时器100uS中断一次, 所以定时常数的设置可按以下方法计算:机器周期=12÷12MHz=1uS(256-定时常数)×1uS=100uS定时常数=156。
然后对100uS中断次数计数10000次,就是1秒钟。
在本实验的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
三、实验内容及步骤本实验需要用到单片机最小应用系统模块(F1区)和十六位逻辑电平显示模块(I4区)。
1.使用单片机最小应用系统模块,用导线将P1.0接到十六位逻辑电平显示的任意一只发光二极管上。
2.用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。
3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“TH10_定时器.ASM”源程序,编译无误后。
4.全速运行程序,发光二极管隔一秒点亮一次,点亮时间为一秒。
单片机显示接口实验报告总结

单片机显示接口实验报告总结
单片机显示接口实验是一种基础的实验,通过该实验可以学习并了解单片机与显示设备的连接和通讯方式,同时也加深了我们对单片机工作原理的理解。
下面是对单片机显示接口实验报告的总结:
本次单片机显示接口实验是一项基础性实验,其主要目的是学习单片机与显示设备之间的连接与通讯方式。
实验中我们采用了常用的连接方式,即采用IO口直接驱动数码管或者使用IIC 总线来驱动OLED屏幕。
在实验过程中,我们通过调节单片机的IO口输出高低电平以及更新显示缓存区中的数值来实现7段LED数码管的显示效果。
同时我们还学习了BCD码的转换方式以及了解了BCD码的原理,使得我们可以将数字转化为相应的BCD码再传输给数码管进行显示。
在使用IIC总线连接OLED屏幕时,我们需要先编写相应的IIC通信程序,然后将其应用至OLED 显示屏的初始化和数据传输上。
通过这种方式,我们成功地实现了单片机与OLED显示屏之间的数据传输和显示。
在实验过程中,我们需要理解并掌握相应的实验步骤和技能,而不仅是单纯地进行实验操作。
通过本次实验,我们将理论知识和实际操作相结合,从而更好地理解了单片机与显示设备之间的通讯方式及其相关操作方法。
总之,本次单片机显示接口实验是一次非常有益的实践活动,不仅深化了我们对单片机原理的理解,同时也为我们今后的学习打下了坚实的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机显示接口实验报告范文
一、实验目的
1. 了解温度传感器电路的工作原理
2. 了解温度控制的基本原理
3. 掌握一线总线接口的使用
二、实验说明这是一个综合硬件实验,分两大功能:温度的测量和温度的控制。
1.DALLAS最新单线数字温度传感器D S18B20简
介
Dallas半导体公司的数字化温度传感器DS1820是世界
上第一片支持“一线总线”接口的温度传感器。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V〜5.5V的电压范围,使系统设计更灵活、方便。
DS18B20测量温度范围为-55 ° C〜+125 ° C,在-10〜+85° C 范围内,精度为土0.5 ° C o DS18B20可以程序设定9〜12位的分辨率,及用户设定的报警温度存储在EEPROM K
掉电后依然保存。
DS18B20内部结构
DS18B20内部结构主要由四部分组成:64位光刻ROM 温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列如下:
DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电
电源输入端(在寄生电源接线方式时接地)。
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20 自身的序列号,最后8 位是前面56 位的循环冗余校验码
(CRC=X8+X5+X4+)光刻ROM的作用是使每一个DS18B20 都各不相同,这样就可以实现一根总线上挂接多个DS18B20
的目的。
DS18B20中的温度传感器可完成对温度的测量,以12位
转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625 C /LSB形式表达,其中S为符号位。
这是12 位转化后得到的12 位数据,存储在18B20 的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这 5 位为0,只要将测到的数值乘以0.0625
即可得到实际温度;如果温度小于0,这5 位为1,测
到的数值需要取反加1 再乘以0.0625 即可得到实际温度。
例如+125 C的数字输出为07D0H +25.0625 C的数字输出为0191H, -25.0625 C的数字输出为
DS18B20温度传感器的存储器
DS18B20温度传感器的内部存储器包括一个高速暂存
RAM和一个非易失性的可电擦除的E2RA M后者存放高温度和
低温度触发器TH、TL和结构寄存器。
暂存存储器包含了8 个连续字节,前两个字节是测得的
温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的
高八位。
第三个和第四个字节是TH、TL 的易失性
拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。
第六、七、八个字节用于内部计算。
第九个字节是冗余检验字节。
低五位一直都是1 ,TM是测试模式位,用于设置DS18B20 在工作模式还是在测试模式。
在DS18B20出厂时该位被设置
为0,用户不要去改动。
R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进
行复位,复位成功后发送一条ROh指旨令,最后发送RAM指令,
这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16〜60微秒左右,后发出60〜240微秒的存在低脉冲,主CPU攵到此信号表示复位成功。
2. 本实验在读取温度的基础上,完成类似空调恒温控制的实验。
用加热电阻代替加热电机。
温度值通过LED静态显
示电路以十进制形式显示出来,制冷采用自然冷却。
三、实验内容及步骤
本实验需要用到单片机最小应用系统(F1 区)、串行静态显示(I3 区)和温度传感器模块(C3 区)。
1. DS18B20的CONTRO接最小应用系统P1.4 , OUT接最小应用系统P
2.0,最小系统的P1.0 , P1.1接串行静态显示
的DIN, CLK端。
2. 用串行数据通信线连接计算机与仿真器,然后将仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3. 打开Keil uVision2 仿真软件,首先建立本实验的项目文件,接着添加TH44_ DS18B20.ASM源程序,进行编译,直到编译无误。
4. 编译无误后,全速运行程序。
程序正常运行后,按下自锁开关‘控制’SIC o LED数显为“ XX”为十进制温度测量值,
“ XX’为十进制温度设定值,按下自锁开关“控制” SIC 则加热源开始加热,温度也随着变化,当加热到设定的控制温度时如40度时,停止加热。
5. 也可以把源程序编译成可执行文件,用ISP 烧录器烧录到89S52/89S51芯片中。
(ISP烧录器的使用查看附录二)
四、源程序
; 单片机内存分配申明!
TEMPER_LEQU 29H ; 用于保存读出温度的低8 位
TEMPER_H EQU 28H用于保存读出温度的高8位FLAG1 EQU
38H ;是否检测到DS18B20标志位A_BIT EQU 20H ;数码管个位数存放内存位置B_BIT EQU 21H ; 数码管十位数存放内存位置LEDBUF EQU 30HTEMPEQU 55HDIN BIT P1.0CLK BIT P1.1 ORG0000HLJMPSTARTORG0100H START: SETBP1.4 MAIN: LCALL GET_TEMPE调用读温度子程序
; 进行温度显示, 这里我们考虑用网站提供的两位数码管来显示温度; 显示范围00 到99 度, 显示精度为1 度
; 因为12 位转化时每一位的精度为0.0625 度, 我们不要求显示小数所以可以抛弃29H的低4位
;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度
; 这个转化温度的方法可是我想出来的哦~~非常简洁无
需乘于0.0625 系数
MOV A,29H
MOV C,40H;将28H 中的最低位移入CRRC AMOV C,41HRRC AMOV C,42HRRC AMOV C,43HRRC AMOV 29H,A
LCALL DISPLAYRESULT
LCALL DISPLAYLED;调用数码管显示子程序LCALL DELAY1 AJMP MAIN
;这是DS18B20复位初始化子程序INIT_1820:SETB
P2.0NOPCLR P2.0
; 主机发出延时537 微秒的复位低脉冲MOV R1,#3 TSR1:MOV R0,#107DJNZ R0,$DJNZ R1,TSR1
SETB P2.0; 然后拉高数据线NOPNOPNOPMOR0V,#25H TSR2:
JNB P2.0,TSR3;等待DS18B20回应DJNZ R0,TSR2
LJMP TSR4 ; 延时TSR3:
SETB FLAG1;置标志位,表示DS1820 存在LJMP TSR5
TSR4:
CLR FLAG1 ;清标志位,表示DS1820不存在单片机显示接口实验报告范文。