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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

PT100数字温度计.docx

1、PT100数字温度计单片机课程设计 PT100数字温度计 学院: 物理电气信息学院 班级:电气工程与自动化(1班) 学号:12012241992 姓名: 于高乐PT100数字温度计一. 设计目的与任务采用PT100温度传感器,设计一款可以实时显示温度的数字温度计二. 设计中所需软件及设备 PC机电脑、Keil C软件、Protues软件。 本次设计所需软件为Keil C51以及Proteus ISIS仿真软件,应用Proteus ISIS对实验电路进行仿真,得到实验结果。三.设计原理说明1.实验方案设计图由于是16路的24V电源输入,所以不能直接将24V电源输入到单片机,故需要有隔离或转换电路

2、,将16路24V电源转换为转换为16路的信号输入到单片机I/O口,由单片机采集16路电平信号。方案设计结构图如下图晶振控制单片机芯片AT89S521602显示器 温度检测电路2.硬件设计与结构图(1)单片机模块及最小系统(2)液晶显示模块(3)温度模拟模块 四.总体电路原理图及其仿真图五设计程序主函数首先实现单片机的初始化。然后将I/O口数据传送至虚拟终端。最后执行虚拟终端显示打印函数,在加一段演示程序,便于观察。源程序#include #include #include #define uchar unsigned char #define uint unsigned int sbit RS

3、 = 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; delayUs(); LCDEN = 0; delayMs(1); /写数据:RS=

4、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 : /N=1, 当读/写一个字符后地址指针加1, 且光标也加1; N=0则相反 /

5、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 0) i-; ds = 1; /产生一个上升沿, 进入等待应答状态 i = 4; while(i0) i-; void dsWai

6、t() unsigned int i; while(ds); while(ds); /检测到应答脉冲 i = 4; while(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(i0) i-; /延时约64us, 符合读时隙不低于60us要求 return b;/读取一字节数据, 通过调用readBit()来实现unsigned char readByte

7、() 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;/写1, 将DQ拉低15us后, 在15us60us内将DQ拉高, 即完成写1 if(b) ds = 0; i+; i+; /拉低约16us, 符号要求1560us内 ds = 1

8、; i = 8; while(i0) i-; /延时约64us, 符合写时隙不低于60us要求 else /写0, 将DQ拉低60us120us ds = 0; i = 8; while(i0) i-; /拉低约64us, 符号要求 ds = 1; i+; i+; /整个写0时隙过程已经超过60us, 这里就不用像写1那样, 再延时64us了 void sendChangeCmd() dsInit(); /初始化DS18B20, 无论什么命令, 首先都要发起初始化 dsWait(); /等待DS18B20应答 delayMs(1); /延时1ms, 因为DS18B20会拉低DQ 60240us

9、作为应答信号 writeByte(0xcc); /写入跳过序列号命令字 Skip Rom writeByte(0x44); /写入温度转换命令字 Convert Tvoid sendReadCmd() dsInit(); dsWait(); delayMs(1); writeByte(0xcc); /写入跳过序列号命令字 Skip Rom writeByte(0xbe); /写入读取数据令字 Read Scratchpad/获取当前温度值int getTmpValue() unsigned int tmpvalue; int value; /存放温度数值 float t; unsigned c

10、har low, high; sendReadCmd(); /连续读取两个字节数据 low = readByte(); high = readByte(); /将高低两个字节合成一个整形变量 /计算机中对于负数是利用补码来表示的 /若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的value tmpvalue = high; tmpvalue 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,

11、 0; unsigned int tmp = 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(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(); 六.设计结果与总结七课程设计心得与总结 经过这次单片机课程设计,终于完成了我的数字

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

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