




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
传感器原理与应用 实验指导书 Proteus V1 0 版本 实验 1 基于 DS18B20 传感器温度测量实验 步骤 1 在 Proteus 软件画出电路图 2 用 keil C 软件写出 C 程序 并生成 hex 文件 导入到单片机当中 进 行仿真 观察结果 包括 2 个头文件 LCD1602 h 和 DS18B20 h 1 个源文件 LCD 18b20 c 代码如下 LCD1602 h include 用 AT89C51 时就用这个头文件 include 用华邦 W78E58B 时必须用这个头文件 include 注意那个 LCD Wait 函数 它是判 忙 标志的 在实际硬件要把注掉的那种打开 Port Definitions sbit LcdRs P2 0 sbit LcdRw P2 1 sbit LcdEn P2 2 sfr DBPort 0 x80 P0 0 x80 P1 0 x90 P2 0 xA0 P3 0 xB0 数据端口 内部等待函数 unsigned char LCD Wait void LcdRs 0 LcdRw 1 nop LcdEn 1 nop while DBPort 在用 Proteus 仿真时 注意用屏蔽此语句 在调用 GotoXY 时 会进入死循环 可能在写该控制字时 该模块没有返回写入完备命令 即 DBPort return DBPort 向 LCD 写入命令或数据 define LCD COMMAND0 Command define LCD DATA1 Data define LCD CLEAR SCREEN 0 x01 清屏 define LCD HOMING 0 x02 光标返回原点 void LCD Write bit style unsigned char input LcdEn 0 LcdRs style LcdRw 0 nop DBPort input nop 注意顺序 LcdEn 1 nop 注意顺序 LcdEn 0 nop LCD Wait 设置显示模式 define LCD SHOW0 x04 显示开 define LCD HIDE0 x00 显示关 define LCD CURSOR0 x02 显示光标 define LCD NO CURSOR0 x00 无光标 define LCD FLASH0 x01 光标闪动 define LCD NO FLASH0 x00 光标不闪动 void LCD SetDisplay unsigned char DisplayMode LCD Write LCD COMMAND 0 x08 DisplayMode 设置输入模式 define LCD AC UP0 x02 define LCD AC DOWN0 x00 default define LCD MOVE0 x01 画面可平移 define LCD NO MOVE0 x00 default void LCD SetInput unsigned char InputMode LCD Write LCD COMMAND 0 x04 InputMode 初始化 LCD void LCD Initial LcdEn 0 LCD Write LCD COMMAND 0 x38 8 位数据端口 2 行显示 5 7 点阵 LCD Write LCD COMMAND 0 x38 LCD SetDisplay LCD SHOW LCD NO CURSOR 开启显示 无光标 LCD Write LCD COMMAND LCD CLEAR SCREEN 清屏 LCD SetInput LCD AC UP LCD NO MOVE AC 递增 画面不动 void GotoXY unsigned char x unsigned char y if y 0 LCD Write LCD COMMAND 0 x80 x if y 1 LCD Write LCD COMMAND 0 x80 x 0 x40 void Print unsigned char str while str 0 LCD Write LCD DATA str str void LCD Print unsigned char x unsigned char y unsigned char str GotoXY x y Print str DS18b20 h include 用 AT89C51 时就用这个头文件 include 用华邦 W78E58B 时必须用这个头文件 sbit DQ P3 4 定义 DQ 引脚为 P3 4 ds18b20 延迟子函数 晶振 12MHz DS18B20 对时间要求很严 但只能长不能短 在 11 0592M 下也行 因为时间长些 void delay 18B20 unsigned int i while i ds18b20 初始化函数 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 读一个字节 unsigned char ReadOneChar void unsigned char i 0 unsigned char dat 0 for i 8 i 0 i DQ 0 给脉冲信号 dat 1 DQ 1 给脉冲信号 if DQ dat 0 x80 delay 18B20 4 return dat ds18b20 写一个字节 void WriteOneChar unsigned char dat unsigned char i 0 for i 8 i 0 i DQ 0 DQ dat delay 18B20 5 DQ 1 dat 1 读取 ds18b20 当前温度 unsigned char ReadTemperature char TH char TL unsigned char RS unsigned char tt 2 Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 x4E 写入 写暂存器 命令 修改 TH 和 TL 和分辩率配置寄存器 先写 TH 再写 TL 最后写配置寄存器 WriteOneChar TH 写入想设定的温度报警上限 WriteOneChar TL 写入想设定的温度报警下限 WriteOneChar RS 写配置寄存器 格式为 0 R1 R0 1 1 1 1 1 R1R0 00 分辨率娄 9 位 R1R0 11 分辨率为 12 位 delay 18B20 80 this message is wery important Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 x44 启动温度转换 delay 18B20 80 this message is wery important Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 xBE 读取温度寄存器等 共可读 9 个寄存器 前两个就是温度 delay 18B20 80 tt 0 ReadOneChar 读取温度值低位 tt 1 ReadOneChar 读取温度值高位 return tt LCD 18b20 c include 用 AT89C51 时就用这个头文件 include 用华邦 W78E58B 时必须用这个头文件 include include include include include include include LCD1602 h 液晶显示头文件 sbit DQ P3 4 定义 DQ 引脚为 P3 4 unsigned char t 2 pt 用来存放温度值 测温程序就是通过这个数组与主函 数通信的 unsigned char TempBuffer1 9 0 x2b 0 x31 0 x32 0 x32 0 x2e 0 x30 0 x30 0 x43 0 显示实时温度 上电时显示 125 00C unsigned char TempBuffer0 17 0 x54 0 x48 0 x3a 0 x2b 0 x31 0 x32 0 x35 0 x20 0 x54 0 x4c 0 x3a 0 x2b 0 x31 0 x32 0 x34 0 x43 0 显示温度上下限 上电时显示 TH 125 TL 124C unsigned char code dotcode 4 0 25 50 75 因显示分辨率为 0 25 但小数运算比较麻烦 故采用查表的方法 再将表值分离出十位和个位后送到十分位和百分位 void covert0 unsigned char TH unsigned char TL 将温度上下限转换为 LCD 显示的数据 if TH 0 x7F 判断正负 如果为负温 将其转化为其绝对值 TempBuffer0 3 0 x2d 0 x2d 为 的 ASCII 码 TH TH TH else TempBuffer0 3 0 x2b 0 x2B 为 的 ASCII 码 if TL 0 x7f TempBuffer0 11 0 x2d 0 x2d 为 的 ASCII 码 TL TL 1 else TempBuffer0 11 0 x2b 0 x2B 为 的 ASCII 码 TempBuffer0 4 TH 100 0 x30 分离出 TH 的百十个位 if TempBuffer0 4 0 x30 TempBuffer0 4 0 xfe 百位数消隐 TempBuffer0 5 TH 100 10 0 x30 分离出十位 TempBuffer0 6 TH 100 10 0 x30 分离出个位 TempBuffer0 12 TL 100 0 x30 分离出 TL 的百十个位 if TempBuffer0 12 0 x30 TempBuffer0 12 0 xfe 百位数消隐 TempBuffer0 13 TL 100 10 0 x30 分离出十位 TempBuffer0 14 TL 100 10 0 x30 分离出个位 void covert1 void 将温度转换为 LCD 显示的数据 unsigned char x 0 x00 y 0 x00 t 0 pt pt t 1 pt if t 1 0 x07 判断正负温度 TempBuffer1 0 0 x2d 0 x2d 为 的 ASCII 码 t 1 t 1 下面几句把负数的补码 t 0 t 0 换算成绝对值 x t 0 1 t 0 x if x 255 t 1 else TempBuffer1 0 0 x2b 0 xfe 为变 的 ASCII 码 t 1 4 右移 4 位 x x 和前面两句就是取出 t 0 的高四位 t 1 t 1 x 将高低字节的有效值的整数部分拼成一个字节 TempBuffer1 1 t 1 100 0 x30 0 x30 为变 0 9 ASCII 码 if TempBuffer1 1 0 x30 TempBuffer1 1 0 xfe 百位数消隐 TempBuffer1 2 t 1 100 10 0 x30 分离出十位 TempBuffer1 3 t 1 100 10 0 x30 分离出个位 t 0 t 0 取有效的两位小数 t 0 2 左移两位 以便查表 x t 0 y dotcode x 查表换算成实际的小数 TempBuffer1 5 y 10 0 x30 分离出十分位 TempBuffer1 6 y 10 0 x30 分离出百分位 void delay unsigned char i while i main unsigned char TH 110 TL 20 下一步扩展时可能通过这两个变量 调节上下限 测温函数返回这个数组的头地址 while 1 pt ReadTemperature TH TL 0 x3f 上限温度 22 下限 24 分辨率 10 位 也就是 0 25C 读取温度 温度值存放在一个两个字节的数组中 delay 100 covert1 covert0 TH TL LCD Initial 第一个参数列号 第二个为行号 为 0 表示第一行 为 1 表示第二行 第三个参数为显示数据的首地址 LCD Print 0 0 TempBuffer0 LCD Print 0 1 TempBuffer1 实验 2 基于 MPX4115 传感器温度测量实验 步骤 1 在 Proteus 软件画出电路图 2 用 keil C 软件写出 C 程序 并生成 hex 文件 导入到单片机当中 进行仿真 观察结果 压力测试仪 系统描述 输入 15 115kPA 压力信号 输出 00h ffh 数字信号 adc0832 在 LCD 上显示实际的压力值 如果超限则报警 线性区间标度变换公式 y 115 15 243 13 X 15kpa 作者 单位 日期 2008 3 7 include include intrins h define uint unsigned int define uchar unsigned char ADC0832 的引脚 sbit ADCS P2 0 ADC0832 chip seclect sbit ADDI P3 7 ADC0832 k in sbit ADDO P3 7 ADC0832 k out sbit ADCLK P3 6 ADC0832 clock signal unsigned char dispbitcode 8 0 xf7 0 xfb 0 xfd 0 xfe 0 xef 0 xdf 0 xbf 0 x7f 位扫描 unsigned char dispcode 11 0 xC0 0 xF9 0 xA4 0 xB0 0 x99 0 x92 0 x82 0 xF8 0 x80 0 x90 0 xff 共阳数码管字段码 unsigned char dispbuf 4 uint temp uchar getdata 获取 ADC 转换回来的值 void delay 1ms void 12mhz delay 1 01ms unsigned char x y x 3 while x y 40 while y void display void 数码管显示函数 char k for k 0 k 1 nop nop ADCLK 0 拉低
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中家长会课件教学
- 员工薪酬福利管理准则
- 宪法九版习题及答案汇 第1-8章
- 2025-2026学年北师大版小学数学四年级上册(全册)教学设计(附目录P175)
- 离婚协议书起草及财产分割专项合同模板
- 髌骨骨折查房课件
- 私立医院与心理治疗师心理干预聘用协议
- 知识产权贯标认证辅导与专利申请合同
- 离婚后子女抚养费用监管与财产分割执行协议范本
- 特色学校教师进修与继续教育聘用合同模板
- 供应商罚款联络函
- 怎样引导初中生克服数学学习的心理障碍
- 振荡指标MACD(波段操作精解)
- 化工行业档案管理制度
- DB3715-T 46-2023 麦套朝天椒直播栽培技术规程
- 危大工程清单及安全管理措施(样表)
- 新苏教版六年级上册《科学》全一册全部课件(含19课时)
- 信息系统用户满意度评价表
- 牙周检查记录表
- 2024建筑安全员《B证》考试题库
- 颅颌面生长发育
评论
0/150
提交评论