历史上的今天
今天是:2024年09月21日(星期六)
2020年09月21日 | 51单片机MLX90614红外温度计
2020-09-21 来源:51hei
/***********************************************************
*
* 功能:利用MLX90614实现红外测温
*
* 平台:keil5 + STC89C52
*
* 作者:辟邪居士
*
*
* 日期:2020年9月19
*
************************************************************/
#include"reg52.h"
#include"intrins.h"
//************************************
#define uint unsigned int
#define uchar unsigned char
#define delay_5t {_nop_();_nop_();_nop_();
_nop_();_nop_();} //延时5个机器周期
# define LcdDB P0
//************** 端口定义**************
//LCD 控制线接口
uchar flag1;
sbit LcdRS=P2^6;
sbit LcdRW=P2^5;
sbit LcdEN=P2^7;
//************ 函数声明*****************************************
void delay(uint N); //延时程序
void LCD_show(uchar x,uchar y);
void LcdBusy();
void LcdwrDat(uchar dat);
void LcdwrCmd(uchar cmd);
void LCD_init ();
void display(uint Tem); // 显示子程序
bit SMB_ack(); //应答信号
//*************主函数*******************************************
//mlx90614 端口定义
sbit SCL=P1^1;// 时钟线
sbit SDA=P1^2;// 数据线
//************ 数据定义****************
bdata uchar flag; //可位寻址数据
sbit bit_out=flag^7;
sbit bit_in=flag^0;
uchar TeL; //温度低八位
uchar TeH; //温度高八位
uchar PEC;
uint TEP; //存储温度
void Delay10us() //@11.0592MHz
{
unsigned char i;
i = 2;
while (--i);
}
void SMBus_Start() //开始信号
{
SDA = 1;
delay_5t;
SCL = 1;
delay_5t;
SDA = 0;
delay_5t;
SCL = 0;
delay_5t;
}
void SMBus_Stop() //停止信号
{
SCL = 0;
delay_5t;
SDA = 0;
delay_5t;
SCL = 1;
delay_5t;
SDA = 1;
}
bit SMBus_writer(uchar DAT) //写一个字节
{
uchar i;
uchar temp; //缓存寄存器
bit ack; //定义位变量,反馈应答信号
temp = DAT; //待发送字节存入缓冲寄存器
for(i = 0;i < 8;i++) //循环发送8位数据
{
SCL = 0; //拉低时钟线
if((temp&0x80)==0x80) //判断temp的高位是0还是1
SDA=1;
else
SDA=0; //送出相应数据
delay_5t ; //延时5个机器周期
SCL = 1; //拉低时钟线
temp = temp << 1; //待发送数据左移一位
delay_5t ; //延时5个机器周期
}
SCL = 0; //拉低时钟线
ack = SMB_ack(); //调用应答信号检测子函数
return ack; //返回检测到的应答信号
}
/*
bit SMBus_writer(uchar dat)
{
bit ack1;
uchar i;
SCL = 0;
for(i=0;i<8;i++)
{
Delay10us();
SDA = dat >> 7; //将发送的数据右移7位
dat = dat << 1; //将发送的数据左移1位
SCL = 1;
Delay10us();
SCL = 0;
}
SDA = 1;
Delay10us();
SCL = 1;
while(SDA) //等待从机应答信号,超过2000us,返回
{
uint j;
j++;
if(j>2000)
{
SCL = 0;
Delay10us();
return 0;
}
}
ack1 = SMB_ack();
return ack1;
}
*/
/*
//---------- 接收一个位----------
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 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 send_bit(void) //发送一位
{
if(bit_out==0)
SDA=0;
else
SDA=1;
SCL=1;
delay_5t;
SCL=0;
delay_5t;
}
uchar rx_byte() //读一个字节
{
uchar i;
uchar dat;
SDA = 1;
_nop_();_nop_();
for(i=0;i<8;i++)
{
SCL = 1;
_nop_();
dat = dat << 1;
dat|=SDA;
_nop_();
SCL = 0;
_nop_();
}
send_bit(); //主设备向从设备发送应答
return dat;
}
bit SMB_ack() //IIC应答
{
bit ack;
SDA = 1;
Delay10us();
SCL = 1;
Delay10us();
SCL =0;
ack = SDA;
return ack;
}
uint MLX90614()
{
SMBus_Start(); //开始信号
SMBus_writer(0x00); //写从设备地址
SMBus_writer(0x07); //写命令
SMBus_Start(); //重新开始
SMBus_writer(0x01); //写地址
史海拾趣
|
1. AVR单片机原理及应用 【内容简介】 本书在概述ATMEL公司开发的AT89系列、AT90系列、AT91M系列单片机之后,详细介绍了AVR增强型RISC单片机的结构、指令系统、90系列多种单片机、实用程序设计以及AVR单片机的应用实例,最后介绍了AVR单片机 ...… 查看全部问答> |
|
sdram的时序问题 state_cntrl_sig 在非idl_cycle下每个时钟加1 哪位高手能告诉我下为什么下面的state_cntrl_sig要计到那时候才变为空闲周期 WHEN idl_cycle => IF (cmnd_cycle_req = \'1\') THEN &nbs ...… 查看全部问答> |
|
最近在看这个: -----i2c源代码情景分析(Beta2)---------- 但是上面提到的-----本文档中的源代码以i2c-2.9.1包及www.arm.linux.org.uk上下载的pxa的i2c适配器的补丁2360-2为准 ----------2360-2的源码一直没有找到,网站也看了,可能我水平不行 ...… 查看全部问答> |
|
国的多数读者对89C51系列的单片机是很熟悉的,为了加深对 MSP430 系列单片机的认识,我对两者进行一下比较。 第一,89C51单片机是 8 位单片机。其指令是采用的被称为“ CISC ”的复杂指令集,共具有 ...… 查看全部问答> |
|
第一个问题: /* ********************************************************************************************************* * ...… 查看全部问答> |




