ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:352.83KB ,
资源ID:10628278      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10628278.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计报告.docx

1、单片机课程设计报告课 程 设 计课程名称 单片机原理与接口技术课程设计题目名称 温度采集显示系统学生学院 工程学院专业班级级电子科学与技术班学 号 姓 名 指导教师 何榕礼2011年12月24日目录一、设计任务与要求1二、原理电路设计11、方案比较 12、整体电路设计 13、单元电路设计 24、电路工作原理 45、元件选择及元件清单 5三、程序设计(C语言)51、延时函数 52、关于DS18B20的函数63、关于1602LCD的函数84、键盘扫描函数 95、报警函数 116、主函数 11四、电路和程序调试过程与结果12五、总结14附录1 系统电路原理图15附录2 系统PCB电路图 16附录3

2、电路板展示16温度采集显示系统一、设计任务与要求1、温度测量范围 0 - 99。2、温度分辨率1。3、选择合适的温度传感器。4、使用键盘输入温度的最高点和最低点,温度超出范围时候报警(报警温度不需要保存)。二、原理电路设计1、方案比较(1)单片机的选择 采用STC89C52贴片芯片,其性能对于温度采集显示电路已经可以满足需求,国内外有关以51内核扩展出的单片机已被广泛用于工业测控系统,今后一段时间内仍将占有大量市场,而且现在有关51单片机的资料很多、很容易得到,故本课程设计选择STC89C52作为主要芯片以学习并掌握其基本应用,对以后接触单片机及相关开发电路有很大帮助。 相比于stm8系列单片

3、机,由于目前有关次系列单片机的资料很有限,而且内核外围结构比51系列复杂,较难学习上手,所以不妨先掌握51系列单片机,然后融汇贯通,将stm8系列作为后面的学习对象。(2)温度传感器的选择 DS18B20单总线数字式温度传感器灵敏度高,精度可配置,而且有防水型,可以测量液体温度,其探头较长,也便于测量某些狭窄地方的温度,相比热敏电阻有很大优势,故本设计采用防水型不锈钢封装DS18B20探头式温度传感器。(3)显示器的选择 因为LED数码管只能显示数字和部分英文字母,可读性差,使用LCD显示可方便观察,清晰明了,能把报警上下限温度和当前温度同时显示出来,免去使用多片LED数码管,硬件开销、面积占

4、用大的烦恼。所以本设计采用1602LCD作为显示器。2、整体电路设计 单片机最小系统为STC89C52芯片、复位电路和时钟电路,时钟电路使用11.0592MHz的晶振。通过DS18B20测量到的温度输入单片机IO口,在LCD上显示出实时温度,同时显示出报警上下限温度,而报警上下限温度可通过按键输入电路修改。整体系统框图如图2.2.1所示。图2.23、单元电路设计 因为本设计需要制作PCB印刷电路板,所以会涉及到Altium Designer09软件的使用,以便从单元电路设计到完成PCB布线布局,然后用热转印法将PCB电路图转印到覆铜板,再腐蚀多余覆铜,焊接好电路即完成作品。(1)单片机最小系统

5、电路 本设计核心MCU型号为STC89C52RC的LQFP-44封装贴片芯片,由该芯片组成的最小系统电路还包括复位电路和外部晶振时钟电路,复位电路为手动按键控制阻容复位,晶振电路采用电容三点式(如图2.3.1和2.3.2)。单片机可以串口下载,也可以借用实验板上的下载模块来下载程序。 图2.3.1 复位电路 图2.3.2 时钟电路(2)DS18B20温度采集电路 DS18B20为美国达拉斯(Dallas)公司的单线数字温度传感器,与传统的热敏电阻不同,DS18B20可直接将被测温度转化成串行数字信号,以供单片机处理。本设计只用一个单线器件,如同时并接多个DS18B20可实现多点测温,R3为单线

6、DQ的上拉电阻(如图2.3.3)。 DS18B20有两种供电方式:寄生电源和外部电源,当使用寄生电源时VDD引脚必须接地,本设计将VDD引脚节外部电源(35.5V)。因为,为使DS18B20能完成准确的温度转换,当温度变换发生时,DQ线上必须提供足够的功率,而DS18B20的工作电流高达1.5mA,10k的上拉电阻将使得DQ线没有足够的驱动能力。图2.3.3 DS18B20温度采集电路(3)LCD显示电路 本设计采用1602型液晶作显示器,电路如图2.3.4所示。 引脚接口说明:液晶8位数据口接单片机上的P0口。液晶接口1,2端为电源,15,16为背光电源,为防止直接加5V电压烧坏背光灯,在1

7、5脚串接一个10电阻用于限流。液晶3端为液晶对比度调节端,通过一个10k电位器接地来调节液晶显示对比度。液晶4端为液晶控制器写数据/写命令选择端,接单片机IO口。5端为读/写选择端,因为不需要从液晶读取任何数据,只向其写入命令和显示数据,所以此端始终选择为写状态,即低电平接地。液晶6端为使能信号,是操作时必需的信号,接单片机IO口。图2.3.4 LCD显示电路(4)LED报警电路 但温度超出报警温度范围时,LED发光二极管会不停地闪灭循环。LED只需阳极串接一个1k的限流电阻至电源,阴极直接与单片机IO口相连,如图2.3.5。图2.3.5 LED报警电路(5)按键输入电路 为调节报警温度上限温

8、度和下限温度,采用4个独立键盘,其中两个调节上限温度的增加和减少,没按一下增加或减少上限温度1摄氏度,另外两个调节下限温度的增加和减少。 如图2.3.6,S1S4为4个独立键盘,一端分别与单片机4个IO口相连,另一端共同接地。图2.3.6 键盘输入电路4、电路工作原理 整体电路原理图见附录1。 DS18B20温度传感器完成温度转换后将温度数据通过单线DQ传送给单片机,单片机将数据处理并在1602LCD上显示出来,同时系统初始化设置报警的上下限温度也在LCD上显示。如果测量温度超出报警温度范围,则LED发光二极管闪烁报警。通过4个按键s1s4可调节报警的上下限温度,按复位键s0可使系统复位,报警

9、温度恢复为初始化设置值。DS18B20可配置912位测量温度值分辨率,分别对应的温度分辨率为0.5、0.25、0.125、0.0625,降低温度值分辨率可以减少DS18B20转换温度所需的时间。5、元件选择及元件清单序号元件型号名称备注数量1STC89C52RCLQFP-44封装,串口编程下载12DS18B20温度传感器不锈钢封装,防水型探头131602型LCD14LED发光二极管红色,0805封装15贴片按键开关56晶振晶振频率为11.0592MHz,这决定单片机的指令运行时间1710K精密可调电位器用于调节LCD屏幕分辨率18贴片电阻0805封装若干9贴片电容其中除了复位电容外,其他均用0

10、805封装,复位电容为钽电容1206封装若干 因为制作PCB印刷电路板,所以另外还需要覆铜板、PCB热转印纸小电钻等工具。三、程序设计(C语言) 为后面的程序更简明,在程序头先作下面两句宏定义,以便在定义无符号字符型和无符号整型数据是只需用“uchar”和“uint”即可。#define uchar unsigned char#define uint unsigned int1、延时函数 单片机晶振频率为11.0592MHz,延时函数在此工作频率下调试确定。 void delayMs(uint a)/毫秒延时函数,形参a决定延时时长约为a毫秒 uint i, j; for(i = a; i 0

11、; i-) for(j = 112; j 0; j-);void delayUs() /延时微妙数量级的函数 _nop_();2、关于DS18B20的函数sbit ds = P24;/DS18B20的数据输出脚DQ定义为P2.4脚void dsInit()/产生复位脉冲初始化 unsigned int i; ds = 0; i = 100;/拉低约900us while(i0) i-; ds = 1; i = 4;/产生上升沿 while(i0) i-; void dsWait()/等待应答脉冲函数 unsigned int i; while(ds); /等待应答脉冲,应答脉冲到达后跳出 wh

12、ile(ds);/表示位取反,应答脉冲结束后跳出 i = 4; while(i 0) i-;unsigned char readByte()/读取数据的一个字节 unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i8; i+) j = readBit(); dat = (j 1); return dat;void writeByte(unsigned char dat)/写数据的一个字节 unsigned int i; unsigned char j; bit b; for(j = 0; j = 1; if(b) ds = 0; i

13、+; i+; ds = 1; i = 8; while(i0) i-; else ds = 0; i = 8; while(i0) i-; ds = 1; i+; i+; void sendChangeCmd()/启动温度转换函数 dsInit(); /产生复位脉冲,初始化DS18B20 dsWait(); /等待DS18B20给出应答脉冲 delayMs(1); /延时 writeByte(0xcc);/skip rom命令,即无须提供ROM序列号即可运行内存操作命令 writeByte(0x44);/convert T命令,即开始温度转换操作 delayMs(1000); /温度转换时间需

14、要750ms以上void sendReadCmd()/读暂存器RAM函数 dsInit(); /产生复位脉冲,初始化DS18B20 dsWait(); /等待DS18B20给出应答脉冲 delayMs(1); /延时 writeByte(0xcc); /skip rom命令,即无须提供ROM序列号即可运行内存操作命令 writeByte(0xbe); /read scratchpad命令,之后将读取暂存器RAM内容,从字节0一直读取到字节8int getTmpValue()/从暂存器中获取温度值,转化为10进制数并返回10进制数的温度值 unsigned int tmpvalue; float

15、 t; int value; unsigned char low, high; sendReadCmd(); /读取暂存器RAM内容,从字节0一直读取到字节8 low = readByte(); /读取温度值低8位,即暂存器的字节0 high = readByte();/读取温度值高8位,即暂存器的字节1 tmpvalue = high; tmpvalue 0 ? 50 : -50); /*大于0加50, 小于0减50,即为使VALUE值的十位四舍五入,如11556.55度四舍五入后为11607.05度*/ return value;/返回温度值的100倍,十进制,带小数,如11607.05度

16、void display(int v) /测量温度值显示函数 unsigned char count; unsigned char datas = 0, 0, 0; unsigned int tmp = abs(v); datas0 = tmp / 10000; datas1 = tmp % 10000 / 1000; datas2 = tmp % 1000 / 100; /writeComm(0xc0+5); /*if(v 0) writeData(0x2d);/显示-号 else writeData(0x2b);/显示+号 */ if(datas0 != 0) writeData(0+da

17、tas0); if(datas1 != 0) writeData(0+datas1); /for(count = 1; count 3; count+)/原为count!=5 writeData(0+datas2); writeData(0xdf);/显示度C writeData(0x43); writeData(0x20);/显示空格3、关于1602LCD的函数sbit RS = P10; /LCD引脚4端为液晶控制器写数据/写命令选择端,接P1.0脚sbit LCDEN = P13;/ LCD引脚6端为使能信号,接P1.3口void writeComm(uchar comm)/定义写指令函

18、数,参数comm为要写的指令 RS = 0; /RS清0为命令选择 P0 = comm; /送指令码 LCDEN = 1; /使能信号置1 delayUs(); /地址建立时间TSP1最小30ns LCDEN = 0; /使能信号回复为低电平 delayMs(1);/写数据:RS=1, RW=0;void writeData(uchar dat)/定义写数据函数,参数dat定义为字符型即为需要写的字符 RS = 1; /RS置1为数据选择 P0 = dat; /送要写字符数据 LCDEN = 1; /使能信号E置1 delayUs(); /地址建立时间TSP1最小30ns LCDEN = 0;

19、 /使能信号回复为低电平 delayMs(1); void init()/LCD初始化函数 writeComm(0x38); /显示模式 writeComm(0x0c); /0c: b2位置1开显示;b1位置0指不显示光标;b0位的0指光标不显示 writeComm(0x06); /06: b1位的1指写完一个字符后光标加1;b0位的0指整屏不移 writeComm(0x01); /清屏void writeString(uchar * str, uchar length)/写字符串 uchar i; for(i = 0; i = 10000)/上限温度最高不超过100摄氏度 th= 10000

20、; delayMs(15); while(!s1);/等待按键松开 if(s2=0) delayMs(15); if(s2=0) th= th-100; if(th= th) tl= th; delayMs(15); while(!s3); if(s4=0) delayMs(15); if(s4=0) tl= tl-100; if(tl th)|(tmp tl) d1 = 0; delayMs(20); /LED亮20ms d1 = 1; /LED灭的时间即是后面温度转换所需的约1s时间,故已足够,不用再加延时6、主函数void main() P3=0xff; /按键所连IO口初始为高电平 s

21、endChangeCmd(); /启动温度转换 init(); /初始化1602LCD writeComm(0x80); /指针置于第1行第1个字符处 writeString(table, 12); /写“Temperature:” writeComm(0xc0); /指针置于第2行第1个字符处 writeString(table_th, 3); /写“TH:” writeComm(0xc0+8); /指针置于第2行第9个字符处 writeString(table_tl, 3); /写“TL:” while(1) /循环,不断进行温度转换、刷新显示、键盘扫描 keys(); /键盘扫描 wri

22、teComm(0x80+12); /指针置于第1行第13个字符处 display(getTmpValue(); /显示测量温度值 writeComm(0xc0+3); /指针置于第2行第4个字符处 display(th); /显示报警上限温度 writeComm(0xc0+11); /指针置于第2行第12个字符处 display(tl); /显示报警下限温度 alarm(getTmpValue(); /报警判断 sendChangeCmd(); /重新温度转换 四、电路和程序调试过程与结果 在调试延时子函数时,通过设置断点,观察运行延时函数指令下来所经历的时间,例如对毫秒延时函数,要求运行该函

23、数指令所经历的时间为1ms。观察在运行该函数指令前的时间(如图4.1),执行“单步运行”命令以运行该指令后,再次观察时间(如图4.2),如果大约经历了1ms则符合要求,否则继续修改函数直至符合要求。图4.1未运行指令前图4.2 运行指令后 在Altium Designer09上,设计好电路原理图后转为PCB电路图(见附录2),经过热转印至覆铜板上,并腐蚀和焊接好电路。第一次下载程序到单片机后上电调试,LCD没有显示任何字符,这说明LCD屏幕分辨率未调好。调节电位器使LCD第一行显示出一排清晰黑色小方格,即调好屏幕分辨率,但再此下载程序仍无显示。 经过用万用表对LCD连接单片机的数据传输引脚注意

24、排查,发现LCD使能端引脚6所接单片机的P4.2脚不能正常工作。对比DIP40封装的STC89C52芯片,LQFP-44封装比DIP40封装的多出P4口,但在编程时的头文件reg52.H中并没有P4口的定义,故需在程序中加上对P4口地址的定义sfr P4 = 0xE8,这是根据STC89C52的特殊功能寄存器映像(如图4.3)来定义的。图4.3 后来考虑到P4口驱动能力等问题,最后经调整将LCD使能端引脚6连接至P1.3脚。经修改后再次上电调试,成功显示出测温结果,报警、复位、按键功能正常,如图4.4所示。图4.4五、总结1、作品的优点和不足优点:(1)本设计采用PCB印刷电路板,所占面积小。(2)温度传感器为不锈钢防水型,可测量液体温度。(3)相比数码管,采用LCD液晶显示,使显示结果容易观察,简洁明了。不足:(1)电路板面积还可以做得更小,应充分考虑PCB布线布局。(2)按键电路程序为键盘扫描,没有使用单片机中断功能,所以需要按下键1s左右才有效。(3)PCB布局存在缺陷,使可调电位器与LCD的位置相距太近,相互阻碍,需要把可调电位器倾斜放置。(4)DS18B20温度传感器的温度值分辨率没有重新配置,由于设计要求测温温度

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1