基于51单片机的数字温度计设计(编辑修改稿)内容摘要:

单片机访问 DS18B20 DS18B20 充当从机,单片机是主机,而单片机作为主机通过一线总线访问DS18B20需要经过以下步骤: 1. DS18B20复位指令; 2.执行 ROM指令; 3.执行 DS18B20功能指令( RAM指令)。 11 设计程序中需要用到的 DS18B20功能指令有: 1. 0xcc:跳过读序号列; 2. 0x44:启动温度转换; 3. 0xbe:读取温度寄存器。 DS18B20程序设计 图 18 DS18B20程序测温流程 DS18B20 可以精确到 ,对于正的温度直接将高八位和低八位进行整合,即可求出温度;对于负的温度,读出的高 8位的最高 4位代表了温度的符号位( 0000则代表温度为正, 1111 代表了温度为负),可以对这 4位进行判断,如果为 1111,说明温度为负,则需要将 temp 取反再补 1,图 18 为 DS18B20 程序测温流程图。 秒表程序设计 秒表程序实现的是计时功能,分为 4位显示:分十位,分个位,秒十位,秒个位。 把定时器的定时时间定为 50ms, 这样,计数溢出 20次即可得到时钟的最小计时单位 秒 (若计数 2 次则得到的秒表精度为 ); 秒计时是采用中断方式进行溢出次数的累积,计满 20 次,即得到秒计时。 当秒计时到“ 59”时,秒清零,分个位加“ 1”。 图 19为秒表计时程序流程图。 12 图 19 秒表计时程序流程图 按键功能 设计中共有 5 个按键,其中一个用于对 AT89C51 的复位,当按键按下时复位成功;另外四个按键分别定义为 KEY1—— 测温, KEY2—— 秒表, KEY3——秒表暂停 /开始, KEY4—— 秒表清零;图 20为按键处理流程图。 图 20 按键处理流程 程序开始: KEY1按下:测温功能,显 示温度为 (正温度)或 (负温度); KEY2按下:开始秒表计时,显示当前计时 xx分, xx秒; KEY3按下:定时器 0的定时控制位 TR0=~TR0,开始时 TR0=1,第一次按下时,秒表暂停,以后每次按下, TR0取反,即第二次按下, TR0=1,则实现秒 13 表开始计时; KEY4按下:关定时器中断,使定时器定时控制位置 0,令 min和 sec为零,即实现清零。 3 系统测试 测试方案 1.硬件测试 把系统板分为几个部分,分别单独测试,然后再整体测试。 2.软件仿真测试 利用软件仿真,分别 实现温度测试,秒表测试,按键测试。 3. 软件硬件联合测试 把程序下载到 C51单片机上,进行系统测试。 具体操作:将写好的 C程序通过单片机开发板下载到 AT89C51上,再将单片机安装在系统板上,供 5v直流电,操作按键看是否能进行测温和秒表功能。 测试条件与仪器 测试条件:检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。 硬件测试仪器:万用表,直流稳压电源、示波器 、单片机开发板 ; 测试结果及分析 Protus 仿真测试(见附页): 综合测试(如图 21) : 分别显示:温度为 ; 秒表计时到 146秒。 14 测空气中的温度 秒表计时 图 21 综合测试 图 刚开始测试的时候,发现数码管不够亮,后来自己查找了许多资料,找到了原因:三级管驱动没有工作,后来我自己用面包板焊接了一个三极管驱动,再修改了程序进行检测,最后数码管能很好的显示温度;结合自己的系统板,我将单片机的 P2口作为数码管的位选端,重新设计了一下原有的驱动,采用 1k电阻和S9012 PNP型三级管。 最后我在系统的供电端加入了迷你 usb接口,这样整个系统就能采用 usb接口与电脑连接和手机充电器供电。 结合软件和硬件的测试结果看,该温度计能实现对温度的测量,并且能随接触物的温度改变而改变。 4 系统特色 系统的特色主要有:采用多种供电方式,采用迷你 USB 接口能实现多种方式的使用,如:手机充电器,电脑,手机等;采用数字温度传感器 DS18B20 更精确的获得温度值;在测量温度功能的基础上加入了秒表计时的功能,秒表可用于长时间的计时,并且用户可以通过按键实现功能之间的相互转换。 5 心得和体会 通过这次 对数字温度计的设计,我发现自己还有许多需要加强的地方,比如:画 PCB板和画原理图;缺少对以前许多学过的 C语言、模电等课程的温习;过 15 程中我也查找了许多资料,同时我也学到了许多东西,在调适过程中,动手写程序和改程序,一步步将结果调适出来,在动手能力和解决问题能力的有所提高。 更重要的是团队的协作,有这样一句话: 如果我用个人的能力,可以赚一个亿,可能 100%是我的;但我用十个人的时候,我们可能赚到十个亿,可能我只有 10%,我同样是一个亿,但我们的事业变大了。 在做这次课题的过程中,我明白了一个人的力量是有限的,只有协 调好团队才能获得最多的成就。 6 参考文献 1.电子技术基础模拟部分 /康华光主编 2.单片微机原理、汇编与 C51及接口技术 清华大学出版社 3. C程序设计(第三版) 谭浩强(著) 清华大学出版社 16 附录 1:电路原理图 附录 2:实物图 17 附录 3:仿真测试图 温度仿真测试:显示 秒表仿真测试: 18 附录 4:源程序 /******************************************************************* 程序说明: 主要两大功能: DS18B20测温,秒表计时(精确到秒); 显示:测温显示为 () 温度为正,最后一位显示字母 C; 温度 为负,最后一位显示字母 E; 秒表显示为 xx分 xx秒;当秒增加到 59时,秒清零,分 +1;精度为秒; 按键说明:按键 1— KEY1 选择测温功能。 按键 2— KEY2 选择秒表功能; 按键 3— KEY3 按下秒表暂停,再次按下秒表开始; 按键 4— KEY4 按下秒表清零; ********************************************************************/ include include define uchar unsigned char define uint unsigned int /*******************变量定义 ***********************/ sbit KEY1 = P1^0。 //按键,低有效; KEY1—— 测温, KEY2—— 秒表; sbit KEY2 = P1^1。 sbit KEY3 = P1^2。 //秒表模式暂停 sbit KEY4 = P1^3。 //秒表开始 sbit DQ = P3^3。 //原理图中 ds18b20接 INT1, INT1为 ; sbit wei4 = P2^7。 //位选口 sbit wei3 = P2^6。 sbit wei2 = P2^5。 sbit wei1 = P2^4。 19 uchar flagnum。 //按键标志 uchar wenbiao。 //温度标志,温度为负 wenbiao=0。 温度为正 wenbiao=1。 uchar min,sec。 //秒表分、秒 uchar k。 //定时 50ms uint temp。 //温度变量 /**********共阳极数码管 不含小数点 编码 *************/ uchar code Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。 /**********共阳极数码管 不含小数点 编码 *************/ uchar code Tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}。 /*******************函数声明 ***********************/ void Delay_ms(uint n)。 //毫秒延时 void Delay_us(uchar n)。 //微秒延时 void Display2()。 //分、秒显示 void System_Ini()。 //定时器 0初始化 void timer0 ()。 //定时器 0中断 1 void DS18b20_Reset()。 //DS18b20复位 bit Read_bit()。 //读 1位 uchar DS18b20_Read()。 //读 1个字节 void Write_bit(bit bitval)。 //写 1位 void DS18b20_Write(uchar byte)。 //写 1个字节 void Changtemp()。 //开启温度转换 uchar Readtemp()。 //读取温度 void Display1(uint z)。 //温度显示 void Wenduji()。 //温度计 uchar Keycheck()。 //按键检测 void Key_ser(uchar num)。 //按键实现功能转换 /********************************************* 函数名称: void main()。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。