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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(MLX90614红外测温仪实验指导书含源码.pdf)为本站会员(weiwoduzun)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

MLX90614红外测温仪实验指导书含源码.pdf

1、实验四十四 红外测温仪实验 一实验目的 1通过本实验掌握MLX90614的原理。 2通过实验掌握数码管基本原理 3. 通过实验掌握矩阵键盘的使用 4通过实验掌握1602的使用 二实验内容 通过MLX90614非接触式测得物体温度 三实验器材 1.主控屏+5V电源 2. DCP-PRJ09 红外测温仪 四实验原理图 五实验步骤 1.接上电源 2.运行Keil uVision软件,新建一个工程,新建一个工程文件。将文件添加到工程中并编译,如有错,请更改直到编译成功,如有错,请更改直到编译成功 4.用编程器将生成的HEX文件烧写到单片机中,或用STC单片机专用的串口烧写软件,通过MAX232串口烧写

2、到单片机中(只能用于STC单片机)。或用仿真器来执行程序,将程序下载到仿真器中,具体方法请参考仿真器的使用一节。用编程器将生成的HEX文件烧写到单片机中。 5. 程序下完后可以看到液晶屏有温度显示,用手掌覆盖红外传感器上方2cm处,看到此时液晶屏温度即为手掌的表面温度。 6按下1键可以看到数码管显示,用手掌覆盖红外传感器上方2cm处,看到此时数码管温度即为手掌的表面温度。此时液晶屏温度保持不变。 7按下除1键其他键,此时液晶屏又重新显示温度。 实验代码如下: /- /说明:显示分为2部分:数码管显示,液晶屏显示 /按1键数码管显示,此时液晶屏保持静止 /复位时或按除1键外其他键时,液晶屏显示,

3、数码管熄灭 /- #include #include #define uint unsigned int #define uchar unsigned char #define Nack_number 10 /*端口定义* uchar flag; /LCD控制线接口 sbit RS=P06; /RS端 sbit RW=P07; /读写端 sbit LCDE=P35; /使能端 /mlx90614端口定义 sbit SCK=P37; /时钟线 sbit SDA=P36; /数据线 sbit DPY1 = P32; /温度显示第1个数码管段选 sbit DPY2 = P33; /温度显示第2个数码

4、管段选 sbit DPY3 = P34; /温度显示第3个数码管段选 sbit row1 = P03; /矩阵键盘第1列 sbit row2 = P04; /矩阵键盘第2列 sbit row3 = P05; /矩阵键盘第3列 sbit cow1 = P00; /矩阵键盘第1行 sbit cow2 = P01; /矩阵键盘第2行 sbit cow3 = P02; /矩阵键盘第3行 /*数据定义* bdata uchar flag1; /可位寻址数据 sbit bit_out=flag17; sbit bit_in=flag10; uchar tempH,tempL,err; void CALTE

5、MP(uint TEMP); void ReadKey(void); void initInt(); void delay1(uint z); void show(); uchar key_num; uchar mah5; /*数码管码值定义*/ uchar code LED01= /LED显示代码,0-9 共阳 不带小数点的 0xC0,0xF9,0xA4,0xB0, 0x99,0x92,0x82,0xF8, 0x80,0x90; uchar code LED02= /LED显示代码,0-9 共阳 带小数点的 0x40,0x79,0x24,0x30, 0x19,0x12,0x02,0x78,

6、0x00,0x10; /*全局变量定义*/ bit b20ms,b100ms; /定时标志位 uchar c20ms,c100ms; /定时毫秒数 /* LCD1602 * /向LCD写入命令或数据* #define LCD_COMMAND 0 /命令 #define LCD_DATA 1 / 数据 #define LCD_CLEAR_SCREEN 0x01 / 清屏 #define LCD_HOMING 0x02 / 光标返回原点 /设置显示模式* 0x08+ * #define LCD_SHOW 0x04 /显示开 #define LCD_HIDE 0x00 /显示关 #define LC

7、D_CURSOR 0x02 /显示光标 #define LCD_NO_CURSOR 0x00 /无光标 #define LCD_FLASH 0x01 /光标闪动 #define LCD_NO_FLASH 0x00 /光标不闪动 /设置输入模式* 0x04+ * #define LCD_AC_UP 0x02 /光标右移 AC+ #define LCD_AC_DOWN 0x00 /默认 光标左移 AC- #define LCD_MOVE 0x01 /画面可平移 #define LCD_NO_MOVE 0x00 /默认 画面不移动 /* mlx90614 * /command mode 命令模式 #

8、define RamAccess 0x00 /对RAM操作 #define EepomAccess 0x20 /对EEPRAM操作 #define Mode 0x60 /进入命令模式 #define ExitMode 0x61 /退出命令模式 #define ReadFlag 0xf0 /读标志 #define EnterSleep 0xff /进入睡眠模式 /ram address read only RAM地址(只读) #define AbmientTempAddr 0x03 /周围温度 #define IR1Addr 0x04 #define IR2Addr 0x05 #define L

9、ineAbmientTempAddr 0x06 /环境温度 /*0x0000 0x4074 16500 0.01/单元 -40 125*/ #define LineObj1TempAddr 0x07 /目标温度,红外温度 /*0x27ad-0x7fff 0x3559 22610 0.02/单元 -70.01-382.19 0.01 452.2*/ #define LineObj2TempAddr 0x08 /eepom address EEPROM地址 #define TObjMaxAddr 0x00 /测量范围上限设定 #define TObjMinAddr 0x01 /测量范围下限设定 #

10、define PWMCtrlAddr 0x02 /PWM设定 #define TaRangeAddr 0x03 /环境温度设定 #define KeAddr 0x04 /频率修正系数 #define ConfigAddr 0x05 /配置寄存器 #define SMbusAddr 0x0e /器件地址设定 #define Reserverd1Addr 0x0f /保留 #define Reserverd2Addr 0x19 /保留 #define ID1Addr 0x1c /ID地址1 #define ID2Addr 0x1d /ID地址2 #define ID3Addr 0x1e /ID地址

11、3 #define ID4Addr 0x1f /ID地址4 /*函数声明* void start(); /MLX90614发起始位子程序 void stop(); /MLX90614发结束位子程序 uchar ReadByte(void); /MLX90614接收字节子程序 void send_bit(void); /MLX90614发送位子程序 void SendByte(uchar number); /MLX90614接收字节子程序 void read_bit(void); /MLX90614接收位子程序 void delay(uint N); /延时程序 uint readtemp(vo

12、id); /读温度数据 void init1602(void); /LCD初始化子程序 void busy(void); /LCD判断忙子程序 void cmd_wrt(uchar cmd); /LCD写命令子程序 void dat_wrt(uchar dat); /LCD写数据子程序 void display(uint Tem); /显示子程序 void Print(uchar *str); /字符串显示程序 /*主函数* void main() uint Tem; /温度变量 initInt(); SCK=1; SDA=1; delay(4); SCK=0; delay(1000); SC

13、K=1; init1602(); /初始化LCD while(1) while(b100ms) /每100ms扫描一次键盘 b100ms=0; ReadKey(); if(key_num=1) /按下1键时,进行数码管显示 Tem=readtemp(); CALTEMP(Tem); show(); if(key_num!=1) /液晶屏显示 Tem=readtemp(); /读取温度 cmd_wrt(0x01); /清屏 Print(“ Temperature: “); /显示字符串 Temperature: 且换行 display(Tem); /显示温度 Print(“ C“); /显示摄氏

14、度 delay(1000); /延时再读取温度显示 /-字符串显示程序- void Print(uchar *str) /字符串显示程序 while(*str!=0) /直到字符串结束 dat_wrt(*str); /转成ASCII码 str+; /指向下一个字符 /-输入转换并显示(用于LCD1602)- void display(uint Tem) uint T,a,b; T=Tem*2; if(T=27315) /温度为正 T=T-27315; / a=T/10; /温度整数 b=T-a*10; /温度小数 if(a=10) /温度超过100度 dat_wrt(0x30+a/100);

15、/显示温度百位 dat_wrt(0x30+a%100/10); /显示温度十位 dat_wrt(0x30+a%10); /显示温度个位 else if(a=10) /温度超过10度 dat_wrt(0x30+a%100/10); /显示温度十位 dat_wrt(0x30+a%10); /显示温度个位 else /温度不超过10度 dat_wrt(0x30+a); /显示温度个位 dat_wrt(0x2e); /显示小数点 if(b=10) /温度小数点后第1位数不等于0 dat_wrt(0x30+b/10); /显示温度小数点后第1位数 dat_wrt(0x30+b%10); /显示温度小数点

16、后第2位数 else /温度小数点后第1位数等于0 dat_wrt(0x30); /显示温度小数点后第1位数0 dat_wrt(0x30+b); /显示温度小数点后第2位数 else /温度为负 T=27315-T; a=T/100; b=T-a*100; dat_wrt(0x2d); /显示负号 if(a=10) /温度低于负10度 dat_wrt(0x30+a/10); /显示温度十位 dat_wrt(0x30+a%10); /显示温度个位 else /温度高于负10度 dat_wrt(0x30+a); /显示温度个位 dat_wrt(0x2e); /显示小数点 if(b=10) /温度小

17、数点后第1位数不等于0 dat_wrt(0x30+b/10); /显示温度小数点后第1位数 dat_wrt(0x30+b%10); /显示温度小数点后第2位数 else /温度小数点后第1位数等于0 dat_wrt(0x30); /显示温度小数点后第1位数0 dat_wrt(0x30+b); /显示温度小数点后第2位数 /-根据十六进制计算温度- void CALTEMP(uint TEMP) uint T; uint a,b; uchar A4,A5,A6,A7,A8; T=TEMP*2; if(T=27315) T=T-27315; a=T/100; b=T-a*100; if(a=100

18、) A4=a/100; a=a%100; A5=a/10; a=a%10; A6=a; else if(a=10) A4=0; A5=a/10; a=a%10; A6=a; else A4=0; A5=0; A6=a; if(b=10) A7=b/10; b=b%10; A8=b; else A7=0; A8=b; else T=27315-T; a=T/100; b=T-a*100; A4=9; if(a=10) A5=a/10; a=a%10; A6=a; else A5=0; A6=a; if(b=10) A7=b/10; b=b%10; A8=b; else A7=0; A8=b; m

19、ah4=A4; mah3=A5; mah2=A6; mah1=A7; mah0=A8; /- void start(void) /停止条件是 SCK=1时,SDA由1到0 SDA=1; delay(4); SCK=1; delay(4); SDA=0; delay(4); SCK=0; delay(4); /- void stop(void) /停止条件是 SCK=1时,SDA由0到1 SCK=0; delay(4); SDA=0; delay(4); SCK=1; delay(4); SDA=1; /-发送一个字节- void SendByte(uchar number) uchar i,n

20、,dat; n=Nack_number; /可以重发次数 Send_again: dat=number; for(i=0;i= 20) /20ms计时器 c20ms = 0; b20ms = 1; if(c100ms = 50) /100ms计时器 c100ms = 0; b100ms = 1; /-温度显示函数- void show() DPY1=0; P2=LED01mah3; /转换8位数显示,不带小数点的 delay1(2); P2=0xFF; DPY1=1; DPY2=0; P2=LED02mah2; /转换8位数显示,带小数点的 delay1(2); P2=0xFF; DPY2=1

21、; DPY3=0; P2=LED01mah1; /转换8位数显示,不带小数点的 delay1(2); P2=0xFF; DPY3=1; void ReadKey(void) row1=0; /矩阵键盘第1列,将第一列拉低,扫描是否有按键按下,第一列按键包括:1,4,7 row2=1; /矩阵键盘第2列 row3=1; /矩阵键盘第3列 cow1=1; /矩阵键盘第1行 cow2=1; /矩阵键盘第2行 cow3=1; /矩阵键盘第3行 _nop_(); /延时函数 if(!(cow1 if(cow2=0) key_num=4; if(cow3=0) key_num=7; return; row

22、1=1; /矩阵键盘第1列,将第一列拉低,扫描是否有按键按下,第一列按键包括:2,5,8 row2=0; /矩阵键盘第2列 row3=1; /矩阵键盘第3列 cow1=1; /矩阵键盘第1行 cow2=1; /矩阵键盘第2行 cow3=1; /矩阵键盘第3行 _nop_(); /延时函数 if(!(cow1 if(cow2=0) key_num=5; if(cow3=0) key_num=8; return; row1=1; /矩阵键盘第1列,将第一列拉低,扫描是否有按键按下,第一列按键包括:3,6 row2=1; /矩阵键盘第2列 row3=0; /矩阵键盘第3列 cow1=1; /矩阵键盘第1行 cow2=1; /矩阵键盘第2行 _nop_(); /延时函数 if(!(cow1 if(cow2=0) key_num=6; return; /-数码管显示延时函数- void delay1(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报