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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

MLX90614红外测温代码文档格式.docx

1、/使能端/mlx90614端口定义sbit SCK=P37;/时钟线sbit SDA=P36;/数据线sbit DPY1=P32;/温度显示第1个数码管段选sbit DPY2=P33;/温度显示第2个数码管段选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

2、 bit_out=flag17;sbit bit_in=flag10;uchar temp H,temp L,err;void CALTEMP(uint TEMP);void Read Key(void);void init Int();void delay1(uint z);void show();uchar key_num;uchar mah5;/*数码管码值定义*/uchar code LED01= /LED显示代码,0-9共阳不带小数点的0x C0,0x F9,0x A4,0x B0,0x99,0x92,0x82,0x F8,0x80,0x90;uchar code LED02= /L

3、ED显示代码,0-9共阳带小数点的0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,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/显示开一实验目的#

4、define LCD_HIDE 0x00/显示关#define LCD_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 mod

5、e命令模式#define Ram Access 0x00/对RAM操作#define Eepom Access 0x20/对EEPRAM操作#define Mode 0x60/进入命令模式#define Exit Mode 0x61/退出命令模式#define Read Flag 0xf0/读标志#define Enter Sleep 0xff/进入睡眠模式/ram address read only RAM地址(只读)#define Abmient Temp Addr 0x03/周围温度#define IR1Addr 0x04#define IR2Addr 0x05#define Line

6、Abmient Temp Addr 0x06/环境温度/*0x0000 0x4074 16500 0.01/单元 -40 125*/ #define Line Obj1Temp Addr 0x07 /目标温度,红外温度 /*0x27ad-0x7fff 0x3559 22610 0.02/单元 -70.01-382.19 0.01 452.2*/ #define Line Obj2Temp Addr 0x08/eepom address EEPROM地址#define TObj Max Addr 0x00/测量范围上限设定#define TObj Min Addr 0x01/测量范围下限设定#d

7、efine PWMCtrl Addr 0x02/PWM设定#define Ta Range Addr 0x03/环境温度设定#define Ke Addr 0x04/频率修正系数#define Config Addr 0x05/配置寄存器#define SMbus Addr 0x0e/器件地址设定#define Reserverd1Addr 0x0f/保留#define Reserverd2Addr 0x19/保留#define ID1Addr 0x1c/ID地址1#define ID2Addr 0x1d/ID地址2#define ID3Addr 0x1e/ID地址3#define ID4Ad

8、dr 0x1f/ID地址4/*函数声明*void start();/MLX90614发起始位子程序void stop();/MLX90614发结束位子程序uchar Read Byte(void);/MLX90614接收字节子程序void send_bit(void);/MLX90614发送位子程序void Send Byte(uchar number);void read_bit(void);/MLX90614接收位子程序void delay(uint N);/延时程序uint readtemp(void);/读温度数据void init1602(void);/LCD初始化子程序void b

9、usy(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;/温度变量init Int();SCK=1;SDA=1;delay(4);SCK=0;delay(1000);init1602();/初始化LCDwhile(1)while(b100ms)/每100ms扫描一次键盘b100ms=0;Read Key();

10、if(key_num=1)/按下1键时,进行数码管显示Tem=readtemp();CALTEMP(Tem);show();if(key_num!=1)/液晶屏显示/读取温度cmd_wrt(0x01);/清屏Print(Temperature:);/显示字符串Temperature:且换行display(Tem);/显示温度C/显示摄氏度delay(100000);/延时再读取温度显示void Print(uchar *str) /字符串显示程序 while(*str!=0) /直到字符串结束dat_wrt(*str); /转成 ASCII 码str+; /指向下一个字符 /-输入转换并显示(

11、用于 LCD1602)-void display(uint Tem) uint T,a,b; T=Tem*2;if(T=27315) /温度为正T=T-27315; / a=T/100; /温度整数b=T-a*100; /温度小数if(a=100) /温度超过 100 度dat_wrt(0x30+a/100); /显示温度百位dat_wrt(0x30+a%100/10); /显示温度十位dat_wrt(0x30+a%10); /显示温度个位 else if(a=10) /温度超过 10 度else /温度不超过 10 度dat_wrt(0x30+a);dat_wrt(0x2e); /显示小数点

12、if(b=10) /温度小数点后第 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);else /温度为负T=27315-T; b=T-a*100;dat_wrt(0x2d); /显示负号=10) /温度低于负 10 度dat_wrt(0x30+a/10);else /温度高于负 10 度/-根据十六进制计算温度- void CALTEMP(u

13、int TEMP) uint T;uint a,b;uchar A4,A5,A6,A7,A8;T=TEMP*2;=27315) =100) A4=a/100;a=a%100;A5=a/10;a=a%10;A6=a;else if(a=10) A4=0;else A5=0;A7=b/10;b=b%10;A8=b;A7=0;A4=9;mah4=A4;mah3=A5;mah2=A6;mah1=A7;mah0=A8; /- void start(void) /停止条件是SCK=1 时,SDA 由 1 到 0 SDA=0;void stop(void) /停止条件是SCK=1 时,SDA 由 0 到 1

14、 /-发送一个字节- void Send Byte(uchar number)uchar i,n,dat;n=Nack_number; /可以重发次数Send_again:dat=number;for(i=0;i8;i+) /8 位依次发送if(dat&0x80) /取最高位bit_out=1; /发 1 bit_out=0; /发 0 send_bit(); /发送一个位dat=dat1; /左移一位read_bit(); /接收 1 位应答信号if(bit_in=1) /无应答时重发stop();if(n!=0) n-; /可以重发 Nack_number=10 次goto Repeat;

15、 /重发goto exit; /退出Repeat:start(); /重新开始goto Send_again;exit: ;/-发送一个位-void send_bit(void)if(bit_out=1) _nop_(); /上升沿/-接收一个字节- uchar Read Byte(void) uchar i,dat;dat=0; /初值为 0 i+) /左移 /接收一位if(bit_in=1) dat=dat+1; /为 1 时对应位加 1 /发送应答信号 0 return dat; /带回接收数据/-接收一个位- void read_bit(void) /数据端先置 1 bit_in=1;

16、bit_in=SDA; /读数据uint readtemp(void) /开始条件Send Byte(0x00); /发送从地址 00 RS=0; /指向指令寄存器Send Byte(0x07); /发送命令Send Byte(0x01); /读从地址 00 temp L=Read Byte(); /读数据低字节temp H=Read Byte(); /读数据高字节err=Read Byte(); /读错误信息码 /停止条件return(temp H*256+temp L);/*LCD 显示子函数* void init1602(void) /初始化 LCD /清屏cmd_wrt(0x0c);

17、/开显示,不显示光标,不闪烁cmd_wrt(0x06); /完成一个字符码传送后,光标左移,显示不发生移位cmd_wrt(0x38); /162 显示,57 点阵,8 位数据接口void busy(void) /LCD 忙标志判断flag=0x80; /赋初值高位为 1 禁止while(flag&0x80) /读写操作使能位禁止时等待继续检测P1=0xff;RS=0; /指向地址计数器RW=1; /读LCDE=1; /信号下降沿有效flag=P1; /读状态位高位为状态LCDE=0;void cmd_wrt(uchar cmd) /写命令子函数busy(); /检测读写操作使能吗P1=cmd; /命令 /指向命令计数器RW=0; /写 /高电平有效void dat_wrt(uchar dat) /写数据子函数if(flag=16) P1=0XC0; /指向第二行RS=1; /指向数据寄存器P1=dat; /写数据/-延时-void delay(uint n) uint j;for(j=0;jn;j+) /-定时器初始化函数- void init Int() TMOD = 0x10; /定时器 1 方式 1 TH1=(65536-1000)/256; /定时器 1 设置 1ms 定时TL1=(65536-1000

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

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