




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机课程设计 PT100数字温度计 学院: 物理电气信息学院 班级:电气工程与自动化(1班) 学号: 姓名: 于高乐PT100数字温度计一. 设计目的与任务采用PT100温度传感器,设计一款可以实时显示温度的数字温度计二. 设计中所需软件及设备 PC机电脑、Keil C软件、Protues软件。 本次设计所需软件为Keil C51以及Proteus ISIS仿真软件,应用Proteus ISIS对实验电路进行仿真,得到实验结果。三.设计原理说明1.实验方案设计图由于是16路的24V电源输入,所以不能直接将24V电源输入到单片机,故需要有隔离或转换电路,将16路24V电源转换为转换为16路的信
2、号输入到单片机I/O口,由单片机采集16路电平信号。方案设计结构图如下图单片机芯片AT89S521602显示器晶振控制 温度检测电路2.硬件设计与结构图(1) 单片机模块及最小系统(2)液晶显示模块(3) 温度模拟模块 四.总体电路原理图及其仿真图五设计程序主函数首先实现单片机的初始化。然后将I/O口数据传送至虚拟终端。最后执行虚拟终端显示打印函数,在加一段演示程序,便于观察。源程序#include <reg52.H> #include <intrins.H> #include <math.H> #define uchar unsigned char #de
3、fine uint unsigned int sbit RS = P26; /数据/命令选择端(H/L) sbit LCDEN = P27; /使能端 void delayUs() /短延时 _nop_(); void delayMs(uint a) /长延时 uint i, j; for(i = a; i > 0; i-) for(j = 100; j > 0; j-); /第一行开始地址为0x80, 第二行开始地址为0xc0; /写命令:RS=0, RW=0; void writeComm(uchar comm) RS = 0; P1 = comm; LCDEN = 1; de
4、layUs(); LCDEN = 0; delayMs(1); /写数据:RS=1, RW=00 void writeData(uchar dat) RS = 1; P1 = dat; LCDEN = 1; delayUs(); LCDEN = 0; delayMs(1); /初始化函数 /显示模式, 固定指令为00111000=0x38, 16*2显示, 5*7点阵,8位数据接口 /显示开/关及光标设置00001100=0x0c /指令1: 00001DCB : D:开显示/关显示(H/L); C:显示光标/不显示(H/L), B:光标闪烁/不闪烁(H/L) /指令2: 000001NS :
5、 /N=1, 当读/写一个字符后地址指针加1, 且光标也加1; N=0则相反 /S=1, 当写一个字符, 整屏显示左移(N=1)或右移(N=0), 但光标不移动; S=0, 整屏不移动 void init() writeComm(0x38); /显示模式 writeComm(0x0c); /开显示, 关光标 writeComm(0x06); /写字符后地址加1, 光标加1 writeComm(0x01); /清屏 void writeString(uchar * str, uchar length) uchar i; for(i = 0; i < length; i+) writeDat
6、a(stri); /*PT100*/ sbit ds = P34; void dsInit() /对于11.0592MHz时钟, unsigned int型的i, 作一个i+操作的时间大于为8us unsigned int i; ds = 0; i = 100; /拉低约800us, 符合协议要求的480us以上 while(i>0) i-; ds = 1; /产生一个上升沿, 进入等待应答状态 i = 4; while(i>0) i-; void dsWait() unsigned int i; while(ds); while(ds); /检测到应答脉冲 i = 4; whil
7、e(i > 0) i-; bit readBit() unsigned int i; bit b; ds = 0; i+; /延时约8us, 符合协议要求至少保持1us ds = 1; i+; i+; /延时约16us, 符合协议要求的至少延时15us以上 b = ds; i = 8; while(i>0) i-; /延时约64us, 符合读时隙不低于60us要求 return b;/读取一字节数据, 通过调用readBit()来实现unsigned char readByte() unsigned int i; unsigned char j, dat; dat = 0; for
8、(i=0; i<8; i+) j = readBit(); /最先读出的是最低位数据 dat = (j << 7) | (dat >> 1); return dat;void writeByte(unsigned char dat) unsigned int i; unsigned char j; bit b; for(j = 0; j < 8; j+) b = dat & 0x01; dat >>= 1;/写"1", 将DQ拉低15us后, 在15us60us内将DQ拉高, 即完成写1 if(b) ds = 0; i
9、+; i+; /拉低约16us, 符号要求1560us内 ds = 1; i = 8; while(i>0) i-; /延时约64us, 符合写时隙不低于60us要求 else /写"0", 将DQ拉低60us120us ds = 0; i = 8; while(i>0) i-; /拉低约64us, 符号要求 ds = 1; i+; i+; /整个写0时隙过程已经超过60us, 这里就不用像写1那样, 再延时64us了 void sendChangeCmd() dsInit(); /初始化DS18B20, 无论什么命令, 首先都要发起初始化 dsWait();
10、/等待DS18B20应答 delayMs(1); /延时1ms, 因为DS18B20会拉低DQ 60240us作为应答信号 writeByte(0xcc); /写入跳过序列号命令字 Skip Rom writeByte(0x44); /写入温度转换命令字 Convert Tvoid sendReadCmd() dsInit(); dsWait(); delayMs(1); writeByte(0xcc); /写入跳过序列号命令字 Skip Rom writeByte(0xbe); /写入读取数据令字 Read Scratchpad/获取当前温度值int getTmpValue() unsign
11、ed int tmpvalue; int value; /存放温度数值 float t; unsigned char low, high; sendReadCmd(); /连续读取两个字节数据 low = readByte(); high = readByte(); /将高低两个字节合成一个整形变量 /计算机中对于负数是利用补码来表示的 /若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的value tmpvalue = high; tmpvalue <<= 8; tmpvalue |= low; value = tmpvalue; t = value * 0.06
12、25; /将它放大10倍, 使显示时可显示小数点后一位, 并对小数点后第二位进行4舍5入 /如t=11.0625, 进行计数后, 得到value = 111, 即11.1 度 /如t=-11.0625, 进行计数后, 得到value = -111, 即-11.1 度 value = t * 10 + (value > 0 ? 0.5 : -0.5); /大于0加0.5, 小于0减0.5 return value;void display(int v) unsigned char count; unsigned char datas = 0, 0, 0, 0; unsigned int t
13、mp = abs(v); datas0 = tmp / 1000; datas1 = tmp % 1000 / 100; datas2 = tmp % 100 / 10; datas3 = tmp % 10; writeComm(0xc0+3); if(v < 0) writeString("- ", 2); else writeString("+ ", 2); if(datas0 != 0) writeData('0'+datas0); for(count = 1; count != 4; count+) writeData(
14、39;0'+datascount); if(count = 2) writeData('.'); /*PT100*/void main() uchar table = "Now Temperature " delayMs(1); sendChangeCmd(); init(); writeComm(0x80); writeString(table, 16); while(1) delayMs(1000); /温度转换时间需要750ms以上 writeComm(0xc0); display(getTmpValue(); sendChangeCmd();
15、 六.设计结果与总结七课程设计心得与总结 经过这次单片机课程设计,终于完成了我的数字温度计的设计,虽然不能做到很完美,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思呀! 在本次设计的过程中,我发现很多的问题,也许是第一次进行这种系统的设计所以感觉完成这样一次小系统设计我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代仓库运营的趋势与挑战计划
- 提升社区信息化服务的思路计划
- 行业内竞争策略的制定计划
- 财务技能提升的路径计划
- 乡村生态保护与绿色发展策略指导书
- 招牌门头施工方案
- 医疗行业智慧医疗管理系统优化方案
- 快递物流产业快递网络优化与配送效率提升方案
- 二零二五年方言区儿童普通话正音智能诊断系统研发
- 2025授权委托合同样本(合同版本)
- 代办转学合同范例
- 2024年扬州市事业单位统考招聘笔试真题
- 高中主题班会 高一下学期《自律自主自觉-成就更好的自己》主题班会教案
- 舞蹈简史考试题及答案
- 3.1公民基本权利 课件 2024-2025学年统编版道德与法治八年级下册
- 2025年浙江安防职业技术学院单招职业倾向性考试题库汇编
- 2025年ACR痛风管理指南
- 2024年毕节市东关坡粮食储备有限公司社会招聘笔试真题
- DBJ50T-309-2018 地下管网危险源监控系统技术标准
- 广东省汕头市2025年普通高考第一次模拟考试生物学试题(含答案)
- 酒店服务人员职业道德课件
评论
0/150
提交评论