单片机课程设计方案数字温度计_第1页
单片机课程设计方案数字温度计_第2页
单片机课程设计方案数字温度计_第3页
单片机课程设计方案数字温度计_第4页
单片机课程设计方案数字温度计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、、八 前言 单片机技术作为计算机技术的一个分支,广泛地应用于工业控制,智 能仪器仪表,机电一体化产品,家用电器等各个领域。“单片机原理 与应用”在工科院校各专业中已作为一门重要的技术基础课而普遍开 设。学生在课程设计,毕业设计 , 科研工程中会广泛应用到单片机知 识,而且,进入社会后也会广泛接触到单片机的工程工程。鉴于此, 提高“单片机原理及应用”课的教案效果,让学生参与课程设计实习 甚为重要。单片机应用技术涉及的内容十分广泛,如何使学生在有限 的时间内掌握单片机应用的基本原理及方法,是一个很有价值的教案 工程。为此,我们进行了“单片机的学习与应用”方面的课程设计, 锻炼学生的动脑动手以及协作

2、能力。 单片机课程设计是针对模拟电子技术,数字逻辑电路,电路,单片机 的原理及应用课程的要求,对我们进行综合性实践训练的实践学习环 节,它包括选择课设任务、软件设计,硬件设计,调试和编写课设报 告等实践内容。通过此次课程设计实现以下三个目标 : 第一,让学生 初步掌握单片机课程的实验、设计方法,即学生根据设计要求和性能 约束,查阅文献资料,收集、分析类似的相关题目,并通过元器件的 组装调试等实践环节,使最终硬件电路达到题目要求的性能指标;第 二,课程设计为后续的毕业设计打好基础,毕业设计是系统的工程设 计实践,而课程设计的着眼点是让学生开始从理论学习的轨道上逐渐 引向实际运用,从已学过的定性分

3、析、定量计算的方法,逐步掌握工 程设计的步骤和方法,了解科学实验的程序和实施方法。第三,培养 学生勤于思考乐于动手的习惯,同时通过设计并制作单片机类产品, 使学生能够自己不断地学习接受新知识 如在本课设题目中存在智能 测温器件DS18B20就是课堂环节中不曾提及的“新器件”),通过 多人的合作解决现实中存在的问题,从而不断地增强学生在该方面的 自信心及兴趣,也提高了学生的动手能力,对学生以后步入社会参加 工作打下一定良好的实践基础。 摘要: 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科 研,各个领域,已经成为一种比较成熟的技术 ,单片机具有体积小、功耗低、控 制功能强、扩展灵活

4、、微型化和使用方便等优点,广泛应用于仪器仪表中,结 合不同种类的传感器,可实现诸如电压、湿度、温度、速度、硬度、压力等的 物理量的测量。本文将介绍一种基于单片机控制理论及其应用系统设计的数字 温度计。 本文主要介绍了一个基于 AT89C51 单片机的测温系统,详细描述了利用数字 温度传感器 DS18B20 开发测温系统的过程,重点对传感器在单片机喜爱的硬件 连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也进行 一一介绍,该系统可以方便的是实现温度采集和显示,并可以根据需要任意设 定上下限报警温度,它使用起来方便,具有精度高、量程宽、灵敏度高、体积 小、功耗低等优点,适合我们日常

5、生活和工农业生产中的温度测量,也可以当 做温度处理模块嵌入其他系统中,作为其他主系统的辅助扩展。 DS18B20 和 AT89C51 结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合 与恶劣环境下进行现场温度测量,有广泛的应用前景。 本设计首先是确定目标,气候是各个功能模块的设计,再在 Proteus软件上进 行仿真,修改,仿真。 本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范 围内时,可以报警。 关键词: 单片机,数字控制,温度计, DS18B20, AT89C51 目录 前言 1 摘要 3 关键字 3 一.单片机简介 5 1 . 1单片机的应用 5 1 . 2

6、单片机的开发过程 6 二、设计方案 6 2. 1设计任务和要求 6 2. 2方案辩证 7 1温度计软件设计流程图 7 2元器件的选取 7 3系统最终设计方案 8 三、设计方案的总体设计框图 8 3. 1硬件电路框图 8 3. 2硬件电路概述 9 3. 3主控电路 9 3. 4显示电路 10 3. 5报警温度调节电路 10 3. 6温度传感器及 DS18B20测温原理 11 四、系统软件算法设计 15 4. 1主程序 15 4. 2读出温度子程序 16 4. 3温度转换命令子程序 17 4. 4计算温度子程序 17 4 . 5显示数据刷新子程序 17 4 . 6 1602的液晶显示 18 五、软

7、件仿真 18 5 . 1系统仿真设计 18 5 . 2系统原理图 19 结与体会 20 附录 21 参考文献 29 二、设计方案 2 1 设计务任和要求 1、基本范围-20 C 125C 2、精度误差小于0.5 C 3、LED 数码直读显示 4、可以任意设定温度的上下限报警功能 . 2 2 方案辩证 1温度计软件设计流程图: 2元器件的选取: 单片机芯片的选取: 采用89C51芯片作为硬件核心,利用 Flash ROM,内部具有4KB ROM存储 空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电 路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程

8、序 的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片 造成一定的损坏。 采用AT89C51单片机与MCS-51系列单片机相比有两大优势:第一,片内 程序存储器采用闪存,使程序的写入更加方便;第二,提供了更小尺寸的芯 片,使整个硬件电路的体积更小,且管脚数目为20个,与MCS-51相比减少一 倍,使理解更容易。 综上所述:本课设中单片机芯片采用 AT89C51 温度传感器的选取: 方案一: 采用热敏电阻传感器。利用热敏电阻随温度变化而显著变化,能直接将温 度的变化转换为能量的变化,进而制成温度计。但是其测温传感器比较复杂, 而且不易通过编制程序来控制测温精度,增大系统设计的难

9、度。 采用DS18B2C温度传感器。DS18B20的内部3脚或8脚)封装;使用特 有的温度测量技术,将被测温度转换成数值信号; 3.05.5V的电源供电方式 和寄生电源供电方式;ROM由 64位二进制数字组成,共分为 8个字节;RAM由 9个字节的高速暂存器和非易失性电擦写 ROMS成。 综上所述:温度传感器选取智能测温器件 DS18B20 本设计显示电路采用1602液晶显示模块芯片。 3系统最终设计方案: 综上各方案所述,对此次课设的方案选定:采用AT89C51作为主控制系 统。1602液晶显示模块芯片作为温度数据显示装置。而智能温度传感器 DS18B2C器件作为测温电路主要组成部分。至此,

10、系统最终方案确定。 三、设计方案的总体设计框图 AT89C51,温度传感器采 温度计电路设计总体设计方框图如图所示,控制器采用单片机 用DS18B20,用1602液晶显示屏以串口传送数据实现温度显示。 3.1硬件电路框图: 图总体设计方框图 3.2硬件电路概述: 系统由单片机最小系统、显示电路、按键、温度传感器等组 成。 本电路是由AT89C2051单片机为控制核心,具有与 MCS-51系 列单片机完全兼容,程序加密等功能,带2KB字节可编程闪存,工 作电压范围为 2.76V,全静态工作频率为 024MHZ显示电路由 1602液晶显示模块芯片,可以进行多行显示;温度报警按键设为五个,可以显 示

11、华氏温度,调节高低报警温度; 温度传感器电路主要由 DS18B20测温 器件构成,该器件主要功能有:采用单总线技术;每只DS18B20具 有一个独立的不可修改的64位序列号;低压供电,电源范围为 3 5V;测温范围为-20 C+125C,误差为士 0.5 C;复位电路是 10K 电阻构成的上电自动复位。 3.3主控电路 单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口 RST 复位电路 3.4显示电路 本设计显示电路采用 1602液晶显示模块芯片,该芯片可现实 16x2个字符,比以前的七段 数码管LED显示器在显示字符的数量上要多得多。另外,由于1602芯片编程比较简单,

12、 界面直观,因此更加易于使用者的操作和观测。1602A芯片的接口信号说明如下表: 1602A芯片的接口信号说明 編号 符号 引脚说明 编号 和号 引腳说讯 1 VSS 电源地 g 02 敌撇I 0 VDD 屯源止檢 JO D3 数搦【0 3 VL ii 04 1 RS 数i电命令選择端 )2 D5 0 5 R *P 读泻HA阖 13 Dtt 歡据14 E E XL 仁 1 07 数据I 0 7 闪 数撫1 15 Rl A 肯死iF様 呂 DI 16 HIX 背尤负械 3. 5报警温度调节电路 本系统一共设置了五个按键,k1键只是显示华氏温度,k4键按下不松开显示高低报警 温度,松开后恢复显示正

13、常温度,k2键和k3键是分别用来调节高低报警温度,k键控制调 图报警点调节电路 3.6温度传感器及DS18B2C测温原理 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能 温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并 且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。DS18B20的 性能特点如下: 1)独特的单线接口仅需要一个端口引脚进行通信,DS18B2在与微处理器 连接时仅需要一条口线即可实现微处理器与 DS18B2的双向通讯。 2)DS18B2C支持多点组网功能,多个 DS18B2削以并联在惟一的三线上, 实现多点组网测温

14、; 3)无须外部器件,全部传感元件及转换电路集成在形如一只三极管的集 成电路内; 4)可通过数据线供电,电压范围为 3.0-5.5 V; 5)零待机功耗; 6)温度以9或12位数字,对应的可分辨温度分别为0.5 C、0.25 C、 0.125 C和0.0625 C,可实现高精度测温; 7)用户可定义报警设置; 8)报警搜索命令识别并标志超过程序限定温度 温度报警条件)的器件; 9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正 常工作; - u 呂 OUiUO呂已口 UZ 3 vcc DQ GND 2 28.0 1 DS18B20 显示器显示传感器温度 高温报警 低温报警 报警时

15、的led灯提示 5.2系统原理图 六、总结与体会 经过将近三周的单片机课程设计,终于完成了我的数字温度计的设计,虽然 没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都 做了出来,高兴之余不得不深思呀! 在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这 次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需 要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不 是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是 BCD 码,这一次,我全部用的都是 16 进制的数直接加减,显示处理时在用除法去删 分,感觉效果比较好,

16、有好多的东西,只有我们去试着做了,才能真正的掌握, 只学习理论有些东西是很难理解的,更谈不上掌握。 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系 实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只 有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收 获。通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让 我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿 真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因 为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电 路接法,在实际中

17、因为芯片本身的特性而能够成功。所以,在设计时应考虑两 者的差异,从中找出最适合的设计方法。 通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立 而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系 实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只 有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收 获。 附录: /* #include #include /shiyongyanshi #include #define uchar unsigned char #define

18、 uint unsigned int sbit DQ=P3A3。 sbit RS =P2A0。 sbit RW =P2A1。 sbit EN =P2A2 。 sbit k=P1A0 。 sbit k1=P1A4 。 sbit k2=P1A5 。 sbit k3=P1A6 。 sbit k4=P1A7 。 sbit led_red=P2A5 。 sbit led_blue=P2A6 。 sbit BEEP=P3A7 。 uchar bz=1。 /BEEP=0 。 uchar ng=0。 /fuhaobiaoshiwei uchar TempBuffer =TEMP:。 int temp_valu

19、e 。/ 温度值 uchar code dis_title=-current temp-。 void xianshi_huashi( 。 uchar gw=40 。 char dw= 10 。 uchar xianshi_title= TEMP ALARM 。 uchar xianshi_baojing=HI: LO: 。1/345 10 12 / -延时 void delayxus(uint x uchar i 。 while(x- for(i=0。i。 /* * *LCD 控制 * /读 lcd 状态 uchar read_lcd_state( uchar state 。 RS=0。 RW

20、=1。 EN=1。 delayxus(1。 state=P0。 EN=0。 delayxus(1。 return state。 / 忙等待 void lcd_busy_wait( while(read_lcd_state(&0 x80=0 x80 。 delayxus(5。 /向 LCD 写数据 void write_lcd_data(uchar dat lcd_busy_wait( 。 RS=1。 RW=0。 EN=0。 P0=dat。 EN=1。 delayxus(1。 EN=0。 /向 LCD 写指令 void write_lcd_cmd(uchar cmd lcd_busy_wait(

21、 。 RS=0。 RW=0。 EN=0。 P0=cmd。 EN=1。 delayxus(1。 EN=0。 / /LCD 初始化 void init_lcd( delayxus(1 。 delayxus(1 。 delayxus(1 。 delayxus(1 。 write_lcd_cmd(0 x38 。 write_lcd_cmd(0 x01 write_lcd_cmd(0 x06 。 write_lcd_cmd(0 x0C / /设置液晶显示位置 void set_lcd_pos(uchar p write_lcd_cmd(p| 0 x80 。 / / 在 LCD 上显示字符串 void d

22、is_lcd_string(uchar p,uchar *s/ 位置 ,字符指针 uchar i 。 set_lcd_pos(p 。 for(i=0 。 i /16*2 write_lcd_data(si 。 delayxus(1 。 / void delay_18B20(unsigned int i while(i- 。 / -蜂鸣器 void beep( uchar i 。 for(i=0 。 i delayxus(1 。 BEEP=BEEP 。 BEEP=1 。 /延时 2 void delay2(uint x while(-x 。 /= /初始化 DS!* /*ds18b20 初始化函

23、数 * void Init_DS18B20(void unsigned char x=0 。 DQ = 1 。/DQ 复位delay_18B20(8 。 / 稍做延时 DQ = 0。/单片机将 DQ 拉低 delay_18B20(80 。 / 精确延时 大于 480us DQ = 1 。/拉高总线 delay_18B20(14 。 x=DQ 。/稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 delay_18B20(20 。 /*ds18b20 读一个字节 */ uchar ReadOneChar(void uchar i=0 。 uchar dat = 0。 for (i=8。

24、i0。i- DQ = 0 。 / 给脉冲信号 dat=1 。 DQ = 1 。 / 给脉冲信号 if(DQ dat|=0 x80。 delay_18B20(4 。 return(dat 。 * *ds18b20 写一个字节 * void WriteOneChar(uchar dat unsigned char i=0。 for (i=8 。 i0 。 i- DQ = 0 。 DQ = dat&0 x01 。 delay_18B20(5 。 DQ = 1 。 dat=1。 * 读取 ds18b20当前温度 */ void ReadTemp(void unsigned char a=0。 unsi

25、gned char b=0 。 unsigned char t=0 。 Init_DS18B20( 。 WriteOneChar(0 xCC 。 / 跳过读序号列号的操作 WriteOneChar(0 x44 。 / 启动温度转换 delay_18B20(100 。 / this message is wery important Init_DS18B20( 。 WriteOneChar(0 xCC 。 /跳过读序号列号的操作 WriteOneChar(0 xBE 。 /读取温度寄存器等 共可读 9 个寄存器) 前两个就是温度 delay_18B20(100 。 a=ReadOneChar(。

26、 /读取温度值低位 aaaaaaaaaaaaaaaaaaaa b=ReadOneChar( 。/读取温度值高位 bbbbbbbbbb b.a temp_value= b4 。 void temp_to_str( / 温度数据转换成液晶字符显示 if(temp_value & 0 xE0=0 xE0 temp_value =temp_value +1 。 ng=1 。 else ng=0。 if(k1=0 /while(k1=0 。 bz=(bz+1 %2 。 if(bz=0 temp_value =(int(temp_value *(9.0/5.0+32 。 if(ng=1 TempBuffe

27、r9=temp_value/100+0 。 if(TempBuffer9= TempBuffer9=- 。 TempBuffer10=temp_value%100/10+0 。 / 十位 TempBuffer11=temp_value%10+0 。 / 个位 TempBuffer12=0 xdf 。/ 温度符号 TempBuffer13=C 。 TempBuffer14=0 。 /TempBuffer1=ng %10+ 0 。 if(ng=0 TempBuffer9=temp_value/100+0 。 if(temp_value/100=0 TempBuffer9 = 。 TempBuffe

28、r10=temp_value % 100/10+0 。 / 十位 if(temp_value % 100/10=0 TempBuffer10 = 。 TempBuffer11=temp_value%10+0 。 / 个位 / if(temp_value%10=0 TempBuffer11 = 。 TempBuffer13=C 。 / 温度符号 if(bz=0 TempBuffer13=F 。 TempBuffer14=0 。 /TempBuffer1=ng%10+0 。 void Delay1ms(unsigned int count unsigned int i,j 。 for(i=0。i

29、for(j=0 。 j 。 /* 延时子程序 */ void mdelay(uint delay uint i 。 for(。 delay0 。 delay- for(i=0。 i。 /1ms 延时. void show_time( / 液晶显示程序 ReadTemp(。 / 开启温度采集程序 temp_to_str( 。/ 温度数据转换成液晶字符 dis_lcd_string(0 x40,TempBuffer 。/ 显示温度 dis_lcd_string(0 x00,dis_title 。 / Delay1ms(400 。/ 扫描延时 void xianshi_dw( if(dw=0 xia

30、nshi_baojing3=gw/100+0 。 xianshi_baojing4=gw%100/10+0 。 xianshi_baojing5=gw%10+0 。 xianshi_baojing10=dw/100+0 。 xianshi_baojing11=dw%100/10+0 。 xianshi_baojing12=dw%10+0 。 dis_lcd_string(0 x00,xianshi_title 。 dis_lcd_string(0 x40,xianshi_baojing 。 else if(dw xianshi_baojing3=gw/100+0 。 xianshi_baojing4=gw%100/10+0 。 xianshi_baojing5=gw%10+0 。 xianshi_baojing10= - 。 xianshi_baojing11=abs(dw%100/1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论