

免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计课程名称 单片机原理与接口技术课程设计题目名称 温度采集显示系统学生学院 工程学院专业班级级电子科学与技术班学 号 姓 名 指导教师 何榕礼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 电路板展示16温度采集显示系统一、设计任务与要求1、温度测量范围 0 - 99。2、温度分辨率1。3、选择合适的温度传感器。4、使用键盘输入温度的最高点和最低点,温度超出范围时候报警(报警温度不需要保存)。二、原理电路设计1、方案比较(1)单片机的选择采用stc89c52贴片芯片,其性能对于温度采集显示电路已经可以满足需求,国内外有关以51内核扩展出的单片机已被广泛用于工业测控系统,今后一段时间内仍将占有大量市场,而且现在有关51单片机的资料很多、很容易得到,故本课程设计选择stc89c52作为主要芯片以学习并掌握其基本应用,对以后接触单片机及相关开发电路有很大帮助。相比于stm8系列单片机,由于目前有关次系列单片机的资料很有限,而且内核外围结构比51系列复杂,较难学习上手,所以不妨先掌握51系列单片机,然后融汇贯通,将stm8系列作为后面的学习对象。(2)温度传感器的选择ds18b20单总线数字式温度传感器灵敏度高,精度可配置,而且有防水型,可以测量液体温度,其探头较长,也便于测量某些狭窄地方的温度,相比热敏电阻有很大优势,故本设计采用防水型不锈钢封装ds18b20探头式温度传感器。(3)显示器的选择因为led数码管只能显示数字和部分英文字母,可读性差,使用lcd显示可方便观察,清晰明了,能把报警上下限温度和当前温度同时显示出来,免去使用多片led数码管,硬件开销、面积占用大的烦恼。所以本设计采用1602lcd作为显示器。2、整体电路设计单片机最小系统为stc89c52芯片、复位电路和时钟电路,时钟电路使用11.0592mhz的晶振。通过ds18b20测量到的温度输入单片机io口,在lcd上显示出实时温度,同时显示出报警上下限温度,而报警上下限温度可通过按键输入电路修改。整体系统框图如图2.2.1所示。stc89c52单片机时钟电路复位电路led报警电路lcd显示电路ds18b20温度采集电路按键输入电路图2.23、单元电路设计因为本设计需要制作pcb印刷电路板,所以会涉及到altium designer09软件的使用,以便从单元电路设计到完成pcb布线布局,然后用热转印法将pcb电路图转印到覆铜板,再腐蚀多余覆铜,焊接好电路即完成作品。(1)单片机最小系统电路本设计核心mcu型号为stc89c52rc的lqfp-44封装贴片芯片,由该芯片组成的最小系统电路还包括复位电路和外部晶振时钟电路,复位电路为手动按键控制阻容复位,晶振电路采用电容三点式(如图2.3.1和2.3.2)。单片机可以串口下载,也可以借用实验板上的下载模块来下载程序。 图2.3.1 复位电路图2.3.2 时钟电路(2)ds18b20温度采集电路ds18b20为美国达拉斯(dallas)公司的单线数字温度传感器,与传统的热敏电阻不同,ds18b20可直接将被测温度转化成串行数字信号,以供单片机处理。本设计只用一个单线器件,如同时并接多个ds18b20可实现多点测温,r3为单线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电压烧坏背光灯,在15脚串接一个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)按键输入电路为调节报警温度上限温度和下限温度,采用4个独立键盘,其中两个调节上限温度的增加和减少,没按一下增加或减少上限温度1摄氏度,另外两个调节下限温度的增加和减少。如图2.3.6,s1s4为4个独立键盘,一端分别与单片机4个io口相连,另一端共同接地。图2.3.6 键盘输入电路4、电路工作原理整体电路原理图见附录1。ds18b20温度传感器完成温度转换后将温度数据通过单线dq传送给单片机,单片机将数据处理并在1602lcd上显示出来,同时系统初始化设置报警的上下限温度也在lcd上显示。如果测量温度超出报警温度范围,则led发光二极管闪烁报警。通过4个按键s1s4可调节报警的上下限温度,按复位键s0可使系统复位,报警温度恢复为初始化设置值。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贴片电容其中除了复位电容外,其他均用0805封装,复位电容为钽电容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; 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); /等待应答脉冲,应答脉冲到达后跳出 while(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+; 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); /温度转换时间需要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 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度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+datas0);if(datas1 != 0)writedata(0+datas1); /for(count = 1; count 3; count+)/原为count!=5 writedata(0+datas2);writedata(0xdf);/显示度cwritedata(0x43);writedata(0x20);/显示空格3、关于1602lcd的函数sbit rs = p10; /lcd引脚4端为液晶控制器写数据/写命令选择端,接p1.0脚sbit lcden = p13;/ lcd引脚6端为使能信号,接p1.3口void writecomm(uchar comm)/定义写指令函数,参数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;/使能信号回复为低电平 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; 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亮20msd1 = 1;/led灭的时间即是后面温度转换所需的约1s时间,故已足够,不用再加延时6、主函数void main()p3=0xff;/按键所连io口初始为高电平 sendchangecmd();/启动温度转换 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();/键盘扫描writecomm(0x80+12);/指针置于第1行第13个字符处 display(gettmpvalue(); /显示测量温度值writecomm(0xc0+3);/指针置于第2行第4个字符处display(th);/显示报警上限温度writecomm(0xc0+11);/指针置于第2行第12个字符处display(tl);/显示报警下限温度alarm(gettmpvalue();/报警判断 sendchangecmd();/重新温度转换 四、电路和程序调试过程与结果在调试延时子函数时,通过设置断点,观察运行延时函数指令下来所经历的时间,例如对毫秒延时函数,要求运行该函数指令所经历的时间为1ms。观察在运行该函数指令前的时间(如图4.1),执行“单步运行”命令以运行该指令后,再次观察时间(如图4.2),如果大约经历了1ms则符合要求,否则继续修改函数直至符合要求。图4.1未运行指令前图4.2 运行指令后在altium designer09上,设计好电路原理图后转为pcb电路图(见附录2),经过热转印至覆铜板上,并腐蚀和焊接好电路。第一次下载程序到单片机后上电调试,lcd没有显示任何字符,这说明lcd屏幕分辨率未调好。调节电位器使lcd第一行显示出一排清晰黑色小方格,即调好屏幕分辨率,但再此下载程序仍无显示。经过用万用表对lcd连接单片机的数据传输引脚注意排查,发现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印刷电路板,所占面积小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 腰椎间盘突出合并马尾综合征护理查房
- 桡骨远端骨折合并腕管综合征护理查房
- 2020年1月国开电大法律事务专科《行政法与行政诉讼法》期末纸质考试试题及答案
- 广西南宁市第十中学2025年春季学期高一年级历史第21课战时共产主义到斯大林模式同步测试卷
- 社区美篇消防知识培训课件
- 宁夏银川市2024-2025学年高一下学期期末地理试卷(含答案)
- 小车挂靠公司合同范本
- 读书合同范本模板
- 现在的装修合同范本
- 墙体修复合同范本
- 《HSK标准教程3》第1课
- 中国甲状腺相关眼病诊断和治疗指南2022年解读
- 石油储量与产量预测模型研究
- 《学习国旗法》课件
- 中智人力测评题库答案
- 安全保密审计报告
- 《忆秦娥~ 娄山关》
- 医疗设备采购 投标技术方案 (技术方案)
- 小批量试产报告1
- 《项目管理飞行检查管理办法》宣贯交底
- 干熄焦余热发电安全预评价送审
评论
0/150
提交评论