当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > MLX90614红外测温代码
1.通过本实验掌握MLX90614的原理。2.通过实验掌握数码管基本原理3.通过实验掌握矩阵键盘的使用4.通过实验掌握1602的使用二.实验内容通过MLX90614非接触式测得物体温度三.实验器材1.主控屏+5V电源2.DCP-PRJ09红外测温仪四.实验原理图五.实验步骤1.接上电源2.运行KeiluVision软件,新建一个工程,新建一个工程文件。将文件添加到工程中并编译,如有错,请更改直到编译成功,如有错,请更改直到编译成功4.用编程器将生成的HEX文件烧写到单片机中,或用STC单片机专用的串口烧写软件,通过MAX232串口烧写到单片机中(只能用于STC单片机)。或用仿真器来执行程序,将程序下载到仿真器中,具体方法请参考仿真器的使用一节。用编程器将生成的HEX文件烧写到单片机中。5.程序下完后可以看到液晶屏有温度显示,用手掌覆盖红外传感器上方2cm处,看到此时液晶屏温度即为手掌的表面温度。6.按下1键可以看到数码管显示,用手掌覆盖红外传感器上方2cm处,看到此时数码管温度即为手掌的表面温度。此时液晶屏温度保持不变。7.按下除1键其他键,此时液晶屏又重新显示温度。实验代码如下://----------------------------//说明:显示分为2部分:数码管显示,液晶屏显示//按1键数码管显示,此时液晶屏保持静止//复位时或按除1键外其他键时,液晶屏显示,数码管熄灭//-------------------------------------------------------------------------#includereg52.h#includeintrins.h#defineuintunsignedint#defineucharunsignedchar#defineNack_number10//**************端口定义**************************************************ucharflag;//LCD控制线接口sbitRS=P0^6;//RS端sbitRW=P0^7;//读写端sbitLCDE=P3^5;//使能端//mlx90614端口定义sbitSCK=P3^7;//时钟线sbitSDA=P3^6;//数据线sbitDPY1=P3^2;//温度显示第1个数码管段选sbitDPY2=P3^3;//温度显示第2个数码管段选sbitDPY3=P3^4;//温度显示第3个数码管段选sbitrow1=P0^3;//矩阵键盘第1列sbitrow2=P0^4;//矩阵键盘第2列sbitrow3=P0^5;//矩阵键盘第3列sbitcow1=P0^0;//矩阵键盘第1行sbitcow2=P0^1;//矩阵键盘第2行sbitcow3=P0^2;//矩阵键盘第3行//************数据定义****************************************************bdataucharflag1;//可位寻址数据sbitbit_out=flag1^7;sbitbit_in=flag1^0;uchartempH,tempL,err;voidCALTEMP(uintTEMP);voidReadKey(void);voidinitInt();voiddelay1(uintz);voidshow();ucharkey_num;ucharmah[5];/********数码管码值定义*******************************************************/ucharcodeLED01[]={//LED显示代码,0-9共阳不带小数点的0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};ucharcodeLED02[]={//LED显示代码,0-9共阳带小数点的0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};/**********全局变量定义******************************************************/bitb20ms,b100ms;//定时标志位ucharc20ms,c100ms;//定时毫秒数//**************************LCD1602***********************************//向LCD写入命令或数据*****************************************************#defineLCD_COMMAND0//命令#defineLCD_DATA1//数据#defineLCD_CLEAR_SCREEN0x01//清屏#defineLCD_HOMING0x02//光标返回原点//设置显示模式*******0x08+*********************************************#defineLCD_SHOW0x04//显示开一.实验目的#defineLCD_HIDE0x00//显示关#defineLCD_CURSOR0x02//显示光标#defineLCD_NO_CURSOR0x00//无光标#defineLCD_FLASH0x01//光标闪动#defineLCD_NO_FLASH0x00//光标不闪动//设置输入模式**********0x04+********************************************#defineLCD_AC_UP0x02//光标右移AC+#defineLCD_AC_DOWN0x00//默认光标左移AC-#defineLCD_MOVE0x01//画面可平移#defineLCD_NO_MOVE0x00//默认画面不移动//**************************mlx90614***********************************//commandmode命令模式#defineRamAccess0x00//对RAM操作#defineEepomAccess0x20//对EEPRAM操作#defineMode0x60//进入命令模式#defineExitMode0x61//退出命令模式#defineReadFlag0xf0//读标志#defineEnterSleep0xff//进入睡眠模式//ramaddressreadonlyRAM地址(只读)#defineAbmientTempAddr0x03//周围温度#defineIR1Addr0x04#defineIR2Addr0x05#defineLineAbmientTempAddr0x06//环境温度/*0x00000x4074165000.01/单元-40125*/#defineLineObj1TempAddr0x07//目标温度,红外温度/*0x27ad-0x7fff0x3559226100.02/单元-70.01-382.190.01452.2*/#defineLineObj2TempAddr0x08//eepomaddressEEPROM地址#defineTObjMaxAddr0x00//测量范围上限设定#defineTObjMinAddr0x01//测量范围下限设定#definePWMCtrlAddr0x02//PWM设定#defineTaRangeAddr0x03//环境温度设定#defineKeAddr0x04//频率修正系数#defineConfigAddr0x05//配置寄存器#defineSMbusAddr0x0e//器件地址设定#defineReserverd1Addr0x0f//保留#defineReserverd2Addr0x19//保留#defineID1Addr0x1c//ID地址1#defineID2Addr0x1d//ID地址2#defineID3Addr0x1e//ID地址3#defineID4Addr0x1f//ID地址4//************函数声明*****************************************************voidstart();//MLX90614发起始位子程序voidstop();//MLX90614发结束位子程序ucharReadByte(void);//MLX90614接收字节子程序voidsend_bit(void);//MLX90614发送位子程序voidSendByte(ucharnumber);//MLX90614接收字节子程序voidread_bit(void);//MLX90614接收位子程序voiddelay(uintN);//延时程序uintreadtemp(void);//读温度数据voidinit1602(void);//LCD初始化子程序voidbusy(void);//LCD判断忙子程序voidcmd_wrt(ucharcmd);//LCD写命令子程序voiddat_wrt(uchardat);//LCD写数据子程序voiddisplay(uintTem);//显示子程序voidPrint(uchar*str);//字符串显示程序//*************主函数*******************************************voidmain(){uintTem;//温度变量initInt();SCK=1;SDA=1;delay(4);SCK=0;delay(1000);SCK=1;init1602();//初始化LCDwhile(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);//显示摄氏度delay(100000);//延时再读取温度显示}}}voidPrint(uchar*str)//字符串显示程序{while(*str!='\0')//直到字符串结束{dat_wrt(*str);//转成ASCII码str++;//指向下一个字符}}//--------------输入转换并显示(用于LCD1602)--------------------voiddisplay(uintTem){uintT,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);//显示温度个位}elseif(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);//显示温度小数点后第2位数}else//温度小数点后第1位数等于0{dat_wrt(0x30);//显示温度小数
本文标题:MLX90614红外测温代码
链接地址:https://www.777doc.com/doc-5102054 .html