收藏 分销(赏)

单片机设计说明书.doc

上传人:仙人****88 文档编号:7857413 上传时间:2025-01-23 格式:DOC 页数:27 大小:1.43MB 下载积分:10 金币
下载 相关 举报
单片机设计说明书.doc_第1页
第1页 / 共27页
单片机设计说明书.doc_第2页
第2页 / 共27页


点击查看更多>>
资源描述
《单片机原理及接口技术》 课程设计报告 课题名称 数字温度计2 学院 专业 电气工程及自动化 班级 学号 姓名 时间 2011年12月25日 数字温度计设计说明书 摘要: 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。 本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示。本系统基于AT89C51单片机设计的一种数字温度测量及报警电路,使用PT100热敏电阻感应温度,在该系统中应用8位A/D转换器ADC0808作为模数转换模块,使用LED作为显示模块;该系统测量范围为-50℃~110℃,并且实现了上下限报警功能等;用4位共阴极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求;该电路结构简单,在智能化、生活中能有广泛的应用。 关键词: 单片机AT89C51 热敏电阻PT100 A/D转换器ADC0808 共阴极LED数码管 Summary: With the continuous improvement of people's living standard, single-chip control is undoubtedly one goal, one of the convenience it brings is undeniable, digital thermometer which is a typical example, but it is increasingly required of it the higher the work for modern, scientific research, to provide better and more convenient life facilities will need to start from a single-chip technology, all toward the digital control, intelligent control direction. The design presented in digital thermometer with a traditional thermometer, compared with easy to read, wide temperature range, temperature accuracy, the output digital temperature display. The system is based on AT89C51 microcontroller design of a digital temperature measurement and alarm circuit, using PT100 thermistor temperature sensors, the system applied in 8-bit A / D converter ADC0808 as an analog to digital converter module, using LED as a display module; the system measurement range of -50 ℃ ~ 110 ℃, and achieve a lower limit alarm functions; with four common cathode LED digital serial transmission of data to achieve the temperature display can accurately achieve the above requirements; the circuit structure is simple, smart technology, life can have a wide range of applications. Keywords: Microcontroller AT89C51 Thermistor PT100 A / D Converter ADC0808 Common cathode LED digital tube 目录 摘要: 1 目录 3 一 、设计任务及要求 4 二 、设计的基本步骤及方案 4 三、 硬件电路的设计及描述 5 1.总体电路图 5 2.主控制器 5 3.A/D转化模块 6 4.温度测量 9 5.显示电路 10 6、报警模块 11 四、 软件设计的思想及流程 12 1.总体设计流程图 12 2、为读取数据子程序的流程图 13 3、 数据处理流程图 15 4、显示部分源代码: 17 5、报警部分 18 五、 硬件软件的的调试过程及调试方法 19 1.硬件系统调试 19 2. 软件部分调试 19 3.仿真效果 20 4.测量数据及分析 21 六、 课程设计的心得体会 22 七、 参考文献 22 附录: 23 总程序 23 一 、设计任务及要求 基于MCS-51系列单片机AT89C51,使用热敏电阻类的温度传感器件,设计一个数字显示温度计。 1、测量温度范围-50℃~110℃。 2、精度误差小于0.5℃。 3、LED数码直读显示。 4、@可以任意设定温度上下限警报功能。 5、☆编程实现热敏电阻的非线性补偿。 6、☆实现语音报出测量的温度值。 二 、设计的基本步骤及方案 根据系统的设计的要求,选择PT100作为本系统的温度传感器,选择单片机AT89C51为监测系统的核心来完成数据采集、处理、显示、报警等功能。同时还选用8位A/D转换器ADC0808完成模数转换,省却了采样/保持电路、运放以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。 该系统的设计总体思路如下,温度传感器PT100把所测得的温度发送到A/D转换器ADC0808上,完成模数转换;接着再把信号传到AT89C51单片机上,经过单片机的处理,将把温度在LED显示模块上显示,本系统采用4位共阳极LED数码管以动态扫描的方法实现。测量温度范围:-50℃~110℃。按照系统设计功能的要求,确定系统由4个模块组成:主控制器、A/D 转换、测温电路和显示电路。系统总体框图如下所示: 数字温度计总体电路结构框图 三、 硬件电路的设计及描述 1.总体电路图 2.主控制器 本设计采用89C51单片机作为微处理器,89C51一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。89c51主要有以下特点:8位CPU;具有片内振荡器和时钟电路;32根I/O线;外部存贮器寻址范围ROM、RAM64K;2个16位的定时器/计数器;5个中断源,两个中断优先级;全双工串行口;布尔处理器。 3.A/D转化模块 A/D转化器采用了ADC0808 。ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。ADC0808是ADC0809的简化版本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换下图为。 ADC0808的管脚图和时序图如下所示: ADC0808管脚图 ADC0808时序图 8080转化计算公式如下: 4.温度测量 温度传感器采用PT100温度传感器。Pt100在-200℃~+850℃内比热电偶更精确、线性度更佳两端产生的降压远远大于热电偶的输出,并且不需要冷端补偿。此外,Pt100海具有抗振动、防腐蚀、良好的互换性、重视性和稳定性等优点,常用于低中温测量。因为电阻的变化导致电压的变化很小,因此我们在后级放大,使电压范围为0-5v之间,电路图如下所示: 测温电路 5.显示电路 显示电路采用4位共阳极LED数码管,从P0口输出断码,列扫描P2.0~P2.3口分别作为LED的1、2、3、4。下为显示电路图: 6、报警模块 本模块通过软件设置上下限实现报警功能,硬件电路如下图: 四、 软件设计的思想及流程 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。 1.总体设计流程图 2、为读取数据子程序的流程图 读数部分源程序: P0=0; //显示器初始化 P0=P0|0x80; //设置中断 IE=0x8a; //T0,T1中断 TMOD=18; //设置定时器工作方式 TH0=245; TL0=0; TH1=(65536-1000)/256; //T1高8位 TL1=(65536-1000)%256; //TI低8位 TR0=1; //为ADC0808提供时钟 H_LED=L_LED=1; while(1) //开始转换 { ST=0;ST=1;ST=0; while(1) { if(EOC==1) { OE=1; b=P1; //读取结果 OE=0; { ST=0;ST=1;ST=0; //控制ADC0808 while(1) { if(EOC==1) { OE=1; d=P1; //读取结果 h=P1; OE=0; d=d*0.66-55; //数值转换 b=d; 3、 数据处理流程图 读出温度数据后,LOW的低四位为温度的小数部分,可以精确到0.0625℃,LOW的高四位和HIGH的低四位为温度的整数部分,HIGH的高四位全部为一表示负数,全部为0表示正数。所以先将数据提取出来,分为三个部分:小数部分、整数部分和符合部分。小数部分进行四舍五入处理,大于0.5℃的话,向个位进1;小于0.5℃的时候,舍去不要。当数据是负数的时候,显示之前要进行数据转换,将其整数部分反加一。因为PT100的最温度只能为-50℃,所以可以将整数部分的最高位换成一个“-”,表示为负数。下图为数据处理流程图: 源程序: if(b>84) //数值转换 { int ii=(int)(d*10); d=b*0.66-55; //0~110转换公式 Temperature[3]=ii/1000; //第一位显示 Temperature[2]=ii%1000/100; //第二位显示 Temperature[1]=ii%100/10; //第三位显示 Temperature[0]=ii%10; //第四位显示 Show_Temperature(); //调用显示模块 } else { h=(h-84.2)/1.5; //-50~0转换公式 h=(256-h); Temperature[3]=h/100; Temperature[2]=h%100/10; Temperature[1]=h%10; h=h*10 ; Temperature[0]=h%10; Show_Temperature1(); } 4、显示部分源代码: unchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x80}; //数码管段码定义 unchar Temperature[]={0,0,0,0}; //待显示各温度位数 void Show_Temperature() //0~110显示函数 { unchar i,DSY_IDX[]={0xF7,0xFB,0xFD,0xFE}; //定义数码管 for(i=0;i<4;i++) { P0=DSY_CODE[Temperature[i]]; if(i==1) P0=DSY_CODE[Temperature[1]]|0x80 ; P2&=DSY_IDX[i]; DelayMS(2); P2|=0x0F; } } void Show_Temperature1() //-50~0显示函数 { unchar i,DSY_IDX[]={0xF7,0xFB,0xFD,0xFE}; for(i=0;i<4;i++) { P0=DSY_CODE[Temperature[i]]; if(i==1) P0=DSY_CODE[Temperature[1]]|0x80; if(i==3) P0=0x40; P2&=DSY_IDX[i]; DelayMS(2); P2|=0x0F; } 5、报警部分 void T1_INT()interrupt 3 //报警中断程序 { TH1=(65536-1000)/256; TL1=(65536-1000)%256 ; BEEP=~BEEP; if(L_LED==0) {if(++t!=110)return;} else {if(++t!=50)return;} t=0; DelayMS(20); } 五、 硬件软件的的调试过程及调试方法 1.硬件系统调试 首先我们对测温部分进行调试,开始我们直接使用了AD590,但后来发现题目要求使用热敏类电阻,因此我们根据题目中所给的电路参考图进行改正,之后我们又对两级放大器中的反馈电阻进行修正,让温度从-50℃~110℃变化时最后输出端的电压变化范围为0.11V~4.86V。 之后我们又发现A/D模块不能进行转换,经过查阅ADC0808资料,根据它的时序图我们发现需要给START脚一个起始脉冲才能开始转换,然后我们在程序上修改使用中断给它提供了一个脉冲,ADC0808就能工作了。 其次就是显示模块,这一部分主要涉及的是编程问题。 2. 软件部分调试 对于这个系统在程序部分可分为A/D转换模块,显示模块两个大块,开始我们使用汇编语言进行编程,但发现用汇编的浮点数太复杂,所以之后我们查阅了网上的C语言程序,进行更改,处理了这一问题;后来关于-50℃~0℃这一段的程序比较复杂,我们通过公式转换成正的,然后单独设置一个显示模块,首位直接取负号,完成了这一问题。关于报警模块我们也实现了,并且可以随意设置上下限。 3.仿真效果 ①设置温度 通过热敏电阻改变温度。 ②显示温度 LED显示屏上显示的是测量温度 ③报警器 此时温度达到设定值,报警器报警。 4.测量数据及分析 实际温度 (℃) -50 -30 0 20 40 60 90 110 测量电压 (V) 0.10 0.72 1.63 2.32 2.82 3.41 4.30 4.82 测量温度 (℃) -52.8 30.4 0 20.2 40.0 59.8 90.2 106.7 分析:测试结果我们发现在-30℃~100℃之间精确度很高,符合要求,但在两端存在一定误差,根据分析因为我们的温度范围为0.1V~4.89V,并非是0V~5V,这一点是因为在取反馈放大电阻时很难取到合适值,我们将进一步对我们的系统进行修正。 六、 课程设计的心得体会 经过为期两星期的设计,我们基本完成了题目所要求的设计任务。单片机课程设计作为独立的教学环节,是自动化及相关专业集中实践性环节,是学习完《单片机原理及应用》课程后,并在进行相关课程设计基础上进行的一次综合练习。使我们增进对单片机的感性认识,加深对单片机理论方面的理解,加深单片机内部功能模块的的应用,如中断,定时器/计时器,片外存储器,串行2接口等。使我们了解和掌握单片机应用系统的软硬件设计过程,方法及实现,强化单片机的应用电路的设计与分析能力。提高了我们在单片机应用方面的实践技能和科学作风,培养了我们综合运用理论知识解决实际问题的能力。课程设计中充分体现了以我们的认知为主体,充分调动了我们的积极性和能动性。 本次课程设计还增强了我们克服困难的能力。克服困难的方法多种多样——集体讨论就是一个很好的办法,集体讨论(要构建一个小的团队,记住团队的力量远比一个人的强大)、查阅资料(查阅资料又包括到图书馆,或者是利用Internet上的资源等)、整合从各方获取的信息,并从中找到有利于解决问题的信息,最终得出解决问题的最佳方案。让我们深深体会到团队配合的力量。一个人的力量是单薄的,但是大家团结在一起协同好各方的关系,让个体统一到整体中,那么团队才会充分发挥其作用,真正起到1+1>2团队效应。相信,这会给我以后的工作带来许多机会。因为这是我们新时代青年所必须具备的一项能力。 这样的实践教学活动对我们的帮助是很大的,对我们各方面能力有很大的提高。希望老师和学校多组织这样的活动! 七、 参考文献 [1] 马建国. 电子系统设计 北京: 高等教育出版社, 2004 [2] 杨素行. 模拟电子技术基础简明教程(第四版) 北京: 高等教育出版社, 2005 [3] 周润景 ,徐宏伟 单片机电路设计、分析与制作 北京: 机械工程出版社, 2010 [4] 何立民 MCS-51系列 单片机应用系统设计系统配置与接口技术 北京: 航空航天大学出版社 ,1990 [5] 陈光东 ,赵性初 单片微型计算机原理与接口技术(第二版) 武昌: 华中科技大学出版社 ,1999 [6] 彭伟.单片机C语言程序设计实训100例.北京:电子工业出版社,2009 附录: 总程序 #include<reg51.h> #define unchar unsigned char #define unint unsigned int sbit ST=P2^5; //ADC0808引脚定义 sbit OE=P2^7; sbit EOC=P2^6; sbit CLK=P2^4; sbit H_LED=P3^0; //报警指示灯 sbit L_LED=P3^1; sbit BEEP=P3^7; //蜂鸣器 unchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x80}; //数码管段码定义 unchar Temperature[]={0,0,0,0}; //待显示各温度位数 unchar t=0; float b,d,c; unchar h; void DelayMS(unint ms) //延时程序 { unchar i; while(ms--) for(i=0;i<120;i++); } void Show_Temperature() //显示函数 { unchar i,DSY_IDX[]={0xF7,0xFB,0xFD,0xFE}; for(i=0;i<4;i++) { P0=DSY_CODE[Temperature[i]]; if(i==1) P0=DSY_CODE[Temperature[1]]|0x80 ; P2&=DSY_IDX[i]; DelayMS(2); P2|=0x0F; } } void Show_Temperature1() { unchar i,DSY_IDX[]={0xF7,0xFB,0xFD,0xFE}; for(i=0;i<4;i++) { P0=DSY_CODE[Temperature[i]]; if(i==1) P0=DSY_CODE[Temperature[1]]|0x80 ; if(i==3) P0=0x40 ; P2&=DSY_IDX[i]; DelayMS(2); P2|=0x0F; } } void main() //主程序 { P0 =0; P0=P0|0x80; IE=0x8a; //T0,T1中断 TMOD=18; //设置定时器工作方式 TH0=245; TL0=0; TH1=(65536-1000)/256; TL1=(65536-1000)%256; TR0=1; //为ADC0808提供时钟 H_LED=L_LED=1; while(1) { ST=0;ST=1;ST=0; while(1) //开始转换 { if(EOC==1) { OE=1; d=P1; //读取结果 h=P1; OE=0; d=d*0.66-55; //数值转换 b=d; if(h>84) { int ii=(int)(d*10); Temperature[3]=ii/1000; Temperature[2]=ii%1000/100; Temperature[1]=ii%100/10; Temperature[0]=ii%10; Show_Temperature(); } else { h=(h-84.2)/1.5; //数值转换 h=(256-h); Temperature[3]=h/100; Temperature[2]=h%100/10; Temperature[1]=h%10; h=h*10 ; Temperature[0]=h%10; Show_Temperature1(); } if(b<50) //判断下限 { TR1=1; L_LED=!H_LED; } else if(b>110) //判断上限 { TR1=1;H_LED=!L_LED; } else { TR1=0;H_LED=L_LED=1; } break; } } } } void Timer0_INT()interrupt 1 //TO中断函数,为ADC0808提供时钟 { CLK=!CLK; } void T1_INT()interrupt 3 //报警中断程序 { TH1=(65536-1000)/256; TL1=(65536-1000)%256 ; BEEP=~BEEP; if(L_LED==0) {if(++t!=110)return;} else {if(++t!=50)return;} t=0; DelayMS(20); } 26
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服