历史上的今天
返回首页

历史上的今天

今天是:2025年02月21日(星期五)

正在发生

2020年02月21日 | 51单片机MLX90614非接触红外测温程序

2020-02-21 来源:51hei

这个模块采用I2C通讯,只需要接两个上拉电阻,就可以了,还是很好用的。

单片机源程序如下:

#include"at89x52.h" 

#include"intrins.h" 

//************************************ 

#define  uint  unsigned int 

#define  uchar unsigned char 

#define  Nack_counter  10 

//************** 端口定义************** 

//LCD 控制线接口 

uchar flag1; 

sbit  RS=P0^7; 

sbit  RW=P0^6; 

sbit  LCDE=P0^5; 

//mlx90614 端口定义 

sbit  SCL=P1^6;// 时钟线 

sbit  SDA=P1^7;// 数据线 

//************ 数据定义**************** 

bdata uchar flag;//可位寻址数据 

sbit bit_out=flag^7; 

sbit bit_in=flag^0; 

uchar DataH,DataL,Pecreg; 

//************ 函数声明***************************************** 

void   start_bit();                 //MLX90614 发起始位子程序 

void   stop_bit();                 //MLX90614发结束位子程序 

uchar  rx_byte(void);              //MLX90614 接收字节子程序 

void   send_bit(void);             //MLX90614发送位子程序 

void   tx_byte(uchar dat_byte);     //MLX90614 接收字节子程序 

void   receive_bit(void);           //MLX90614接收位子程序 

void   delay(uint N);              //延时程序 

uint   memread(void);             // 读温度数据 

void   init1602(void);        //LCD 初始化子程序 

void   chk_busy_flg(void);         //LCD 判断忙子程序 

void   dis_cmd_wrt(uchar cmd);     //LCD 写命令子程序 

void   dis_dat_wrt(uchar dat);       //LCD 写数据子程序 

void   display(uint Tem);           // 显示子程序 

//*************主函数******************************************* 

void main() 

uint Tem; 

//函数部分 

SCL=1;SDA=1;_nop_(); 

_nop_();_nop_();_nop_(); 

SCL=0; 

delay(1000); 

SCL=1; 

init1602(); 

while(1) 

   Tem=memread(); 

   display(Tem); 

   delay(20); 

//*********输入转换并显示********* 

void display(uint Tem) 

uint T,a,b; 

T=Tem*2; 

  dis_cmd_wrt(0x01);//清屏 

if(T>=27315) 

   T=T-27315; 

   a=T/100; 

   b=T-a*100; 

//--------------------------- 

   if(a>=100) 

   { 

    dis_dat_wrt(0x30+a/100); 

    a=a%100; 

    dis_dat_wrt(0x30+a/10); 

    a=a%10; 

    dis_dat_wrt(0x30+a); 

   } 

   else if(a>=10) 

   { 

    dis_dat_wrt(0x30+a/10); 

    a=a%10; 

    dis_dat_wrt(0x30+a); 

   } 

   else 

   { 

    dis_dat_wrt(0x30+a); 

   } 

   dis_dat_wrt(0x2e);// 显示点 

   //--------------------------- 

  if(b>=10) 

  { 

    dis_dat_wrt(0x30+b/10); 

//    b=b%10; 

//    dis_dat_wrt(0x30+b); 

  } 

  else 

  { 

    dis_dat_wrt(0x30); 

//    dis_dat_wrt(0x30+b); 

  } 

//==========

else 

  T=27315-T; 

  a=T/100; 

    b=T-a*100; 

  dis_dat_wrt(0x2d); 

//-------------------------- 

  if(a>=10) 

  { 

    dis_dat_wrt(0x30+a/10); 

    a=a%10; 

    dis_dat_wrt(0x30+a); 

  } 

  else 

  { 

    dis_dat_wrt(0x30+a); 

  } 

  dis_dat_wrt(0x2e);//显示点 

//-------------------------- 

  if(b>=10) 

  { 

    dis_dat_wrt(0x30+b/10); 

    b=b%10; 

    dis_dat_wrt(0x30+b); 

  } 

  else 

  { 

    dis_dat_wrt(0x30); 

    dis_dat_wrt(0x30+b); 

  } 


//************************************ 

void   start_bit(void) 

   SDA=1; 

   _nop_();_nop_();_nop_();_nop_();_nop_(); 

   SCL=1; 

   _nop_();_nop_();_nop_();_nop_();_nop_(); 

   SDA=0; 

   _nop_();_nop_();_nop_();_nop_();_nop_(); 

   SCL=0; 

   _nop_();_nop_();_nop_();_nop_();_nop_(); 


//------------------------------ 

void   stop_bit(void) 


   SCL=0; 

   _nop_();_nop_();_nop_();_nop_();_nop_(); 

   SDA=0; 

   _nop_();_nop_();_nop_();_nop_();_nop_(); 

   SCL=1; 

   _nop_();_nop_();_nop_();_nop_();_nop_(); 

   SDA=1; 

//--------- 发送一个字节--------- 

void  tx_byte(uchar dat_byte) 

   char i,n,dat; 

   n=Nack_counter; 

TX_again: 

   dat=dat_byte; 

   for(i=0;i<8;i++) 

   { 

     if(dat&0x80) 

      bit_out=1; 

     else 

      bit_out=0; 

     send_bit(); 

     dat=dat<<1; 

   } 

   

      receive_bit(); 

   if(bit_in==1) 

   { 

    stop_bit(); 

    if(n!=0) 

    {n--;goto Repeat;} 

    else 

     goto exit; 

   } 

   else 

    goto exit; 

Repeat: 

    start_bit(); 

    goto TX_again; 

exit: ; 

//-----------发送一个位--------- 

void  send_bit(void) 

  if(bit_out==0) 

  

       SDA=0; 

  else 

     SDA=1; 

  _nop_(); 

  SCL=1; 

  _nop_();_nop_();_nop_();_nop_(); 

  _nop_();_nop_();_nop_();_nop_(); 

  SCL=0; 

  _nop_();_nop_();_nop_();_nop_(); 

  _nop_();_nop_();_nop_();_nop_(); 

//---------- 接收一个字节-------- 

uchar rx_byte(void) 

  uchar i,dat; 

  dat=0; 

  for(i=0;i<8;i++) 

  { 

    dat=dat<<1; 

    receive_bit(); 

    if(bit_in==1) 

     dat=dat+1; 

  } 

  send_bit(); 

  return dat; 


//---------- 接收一个位---------- 

void receive_bit(void) 

  SDA=1;bit_in=1; 

  SCL=1; 

  _nop_();_nop_();_nop_();_nop_(); 

  _nop_();_nop_();_nop_();_nop_(); 

  bit_in=SDA; 

  _nop_(); 

  SCL=0; 

  _nop_();_nop_();_nop_();_nop_(); 

  _nop_();_nop_();_nop_();_nop_(); 

//------------ 延时-------------- 

void   delay(uint N) 

  uint i; 

  for(i=0;i  

     _nop_(); 

//------------------------------ 

uint memread(void) 

  start_bit(); 

  tx_byte(0xB4);  //Send SlaveAddress ==============================

  //tx_byte(0x00); 

  tx_byte(0x07);  //Send Command 

  //------------ 

  start_bit(); 

  tx_byte(0x01); 

  bit_out=0; 

  DataL=rx_byte(); 

  bit_out=0; 

  DataH=rx_byte(); 

  bit_out=1; 

  Pecreg=rx_byte(); 

  stop_bit(); 

  return(DataH*256+DataL); 

//******************LCD 显示子函数*********************** 

void init1602(void)        // 初始化LCD 

   dis_cmd_wrt(0x01); 

   dis_cmd_wrt(0x0c); 

   dis_cmd_wrt(0x06); 

   dis_cmd_wrt(0x38); 

   

   } 


void chk_busy_flg(void) //LCD 忙标志判断 

   flag1=0x80; 

  while(flag1&0x80) 

   P2=0xff; 

   RS=0; 

   RW=1; 

   LCDE=1; 

   flag1=P2; 

   LCDE=0; 


void dis_cmd_wrt(uchar cmd)    // 写命令子函数 

   chk_busy_flg(); 

   P2=cmd; 

   RS=0; 

   RW=0; 

   LCDE=1; 

   LCDE=0; 


void dis_dat_wrt(uchar dat) // 写数据子函数 

  chk_busy_flg(); 

  if(flag1==16) 

  { 

   P2=0XC0; 

   RS=0; 

   RW=0; 

   LCDE=1; 

   LCDE=0; 

  } 

   P2=dat; 

   RS=1; 

   RW=0; 

   LCDE=1; 

   LCDE=0; 

推荐阅读

史海拾趣

Arima Lasers Corp公司的发展小趣事

Arima Lasers Corp深知人才是企业发展的核心驱动力。因此,公司高度重视人才培养和团队建设。通过制定完善的培训计划和激励机制,公司吸引了一批批优秀的研发人才和管理人才。这些人才为公司的发展注入了源源不断的动力,推动了公司在技术、市场和管理等各个方面的全面提升。

CTC [Compact Technology Corp.]公司的发展小趣事

为了进一步扩大市场份额,CTC公司开始寻求与其他行业的跨界合作。一次与汽车制造商的洽谈中,CTC公司提出将自身的电子技术应用于汽车制造中,以提升汽车的性能和智能化水平。双方经过深入交流,达成了合作意向。这一跨界合作不仅为CTC公司带来了新的业务领域,也推动了汽车行业的创新发展。

GCi Technologies公司的发展小趣事
通过内部电路检测充电电流,并与预设的恒流值进行比较,调整输出以维持恒定的充电电流。
GainSpan ( Telit)公司的发展小趣事

为了进一步提升技术实力和创新能力,风华高科于1998年成为全国36家扩大博士后试点企业之一,并建立起国家级首批博士后流动工作站。这一举措为公司吸引了大量高层次人才,为公司的技术研发和产品创新提供了有力支持。同时,公司还注重内部人才培养和团队建设,形成了一支高素质的研发和生产队伍。这些人才为公司的发展注入了源源不断的动力。

BEKA Associates Ltd公司的发展小趣事

在快速发展的过程中,BCD Semi(Diodes)积极寻求风险投资和资本运作的支持。公司通过吸引国内外知名的投资机构参与投资,获得了大量的资金支持,为公司的研发、生产和市场拓展提供了有力的保障。同时,BCD Semi还通过并购、合作等方式,与行业内的其他企业实现资源共享和优势互补,进一步提升了公司的综合实力。

思瑞浦微电子科技(3PEAK INCORPORATED)公司的发展小趣事

在快速发展的过程中,BCD Semi(Diodes)积极寻求风险投资和资本运作的支持。公司通过吸引国内外知名的投资机构参与投资,获得了大量的资金支持,为公司的研发、生产和市场拓展提供了有力的保障。同时,BCD Semi还通过并购、合作等方式,与行业内的其他企业实现资源共享和优势互补,进一步提升了公司的综合实力。

问答坊 | AI 解惑

模拟电路

我模拟电路学的不 怎么样 。 幸好有电子工程论坛啊…

查看全部问答>

TI2000系列DSP开发应用

TI2000系列DSP开发应用,课件。…

查看全部问答>

运动与健康市场的人体传感器网络PAN

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 近年来,随着各种短距离无线通信技术的发展,人们提出了一个新的概念,即个人局域网PAN(Personal Area Network)。      PAN 核心思想是,用无线电或红外线或者蓝牙代替传统的有线电缆 ...…

查看全部问答>

超正的红外解码资料 不看就走宝咯

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 喜欢就顶下吧  …

查看全部问答>

DS18B20

问下 就是DS18B20负温度如何弄 ,我做来总是有1度的误差…

查看全部问答>

《小强爬行记》全套漫画:道尽毕业生辛酸

近日,天涯社区一名广州的网友“卖身找工作”,自称是仍然失业的应届毕业生,他结合眼下“被就业”“跨省追捕”等时兴话题及自 身的经历,以漫画“小强爬行记”道尽自己大学毕业以来就业路上的种种辛酸经历。他调侃自己为一只“踩不死的小强,就算 ...…

查看全部问答>

奇特的发光引路带子

  你有没有当夜猫子的习惯,有没有半夜起床翻冰箱,找水喝的“恶习”。但是又不想开电打扰家人或者麻烦去开电,那就让发光带子给你引路吧...把这些带子贴在你晚上频繁经过的地方,沙发角、茶几角、阶梯、门把手,白天你几乎看不到这些带子 ...…

查看全部问答>

FIR滤波器的问题

写了一个FIR滤波器的程序。要求大约是200Hz采样速率,16阶,17抽头。算出来延迟是40毫秒。并且算好了滤波系数。 可能是我对“延迟”的理解有问题,代码写成滤波函数定时每40毫秒运行一次,取当时最近的一次采样结果进行滤波。运行的结果当然是惨不 ...…

查看全部问答>

100分请教高手Trace32如何加载符号

在cmm文件中设置如下: &UBOOT_EXECUTED_ADDRESS=0x33e00000 &UBOOT_PATH=\"Y:\\svn\\uboot_tao\\uboot-1.3.4-m9\" &UBOOT_IMAGE=\"&UBOOT_PATH\\u-boot\" &UBOOT_CODE=\"&UBOOT_PATH\\\" print \"u-boot loading again for Debugging\" Data ...…

查看全部问答>

ShellExecuteEx 打开bat文件一闪

= _T(\"searchlist.bat\");          //执行DOS命令                                TCHAR szAppPath[MAX_PATH] = _T(\"\");& ...…

查看全部问答>