1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標(biāo)題:
mlx90614跟我的單片機(jī)一直不能通訊,下面是程序,求各位大佬幫助
[打印本頁]
作者:
zfd
時間:
2018-4-3 19:01
標(biāo)題:
mlx90614跟我的單片機(jī)一直不能通訊,下面是程序,求各位大佬幫助
各位大佬,我的單片機(jī)一直不能跟MLX90614t通訊,希望大家可以幫忙解決,有點急,麻煩各位了。
#include"HT66F2390.h"
#include"oled.h"(這是oled的程序文件,不在下面)
#ifndef HW_H
#define HW_H
#define uchar unsigned char
#define Nack 10
//*******端口定義***********
//mlx90614
#define SDA _pf4
#define SCL _pg0
#define RamAccess 0x00
#define AbmientTempAddr 0x03 //周圍溫度
#define IR1Addr 0x04
#define IR2Addr 0x05
#define LineAbmientTempAddr 0x06 //環(huán)境溫度
#define LineObj1TempAddr 0x07 //目標(biāo)溫度,紅外溫度
#define EepomAccess 0x20
#define Mode 0x60
#define ExitMode 0x61
#define ReadFlag 0xf0
#define LineObj2TempAddr 0x08 //eepom address EEPROM地址
int out=0, in=0;
//*******函數(shù)聲明**********
void start_bit(); //MLX90614 發(fā)起始位子程序
void stop_bit(); //MLX90614 發(fā)結(jié)束位子程序
uchar rx_byte(void); //MLX90614 接收字節(jié)子程序
void send_bit(void); //MLX90614 發(fā)送位子程序
void tx_byte(uchar dat_byte); //MLX90614 接收字節(jié)子程序
void jieshou(); //MLX90614 接收位子程序 //延時程序
void delay_h(unsigned int k); //延時
unsigned int memread(void); //讀溫度數(shù)據(jù)
void display_h(unsigned int Tem);
//*********輸入轉(zhuǎn)換并顯示*********
void display_h(unsigned int Tem)
{
unsigned int T,a,b;
uchar c;
T=Tem*2;
if(T>=27315)
{
T=T-27315;
a=T/100;
b=T-a*100;
if(a>=100)
{
c=a/100;
write_wx1(c,1,6);//oled 顯示程序函數(shù)
a=a%100;
c=a/10;
write_wx1(c,7,6) ;
c=a%10;
write_wx1(c,13,6) ;
}
else if(a>=10)
{
c=a/10;
write_wx1(11,1,6);
write_wx1(c,7,6) ;
c=a%10;
write_wx1(c,13,6) ;
}
else
{
write_wx1(11,1,6);
write_wx1(11,7,6) ;
c=a%10;
write_wx1(c,13,6) ;
}
write_wx1(2,19,6) ;
//分隔開
if(b>=10)
{
b=b/10;
write_wx1(b,25,6);
}
else
{
write_wx1(0,25,6) ;
}
}
else
{
T=27315-T;
a=T/100;
b=T-a*100;
if(a>=10)
{
c=a/10;
write_wx1(c,7,6) ;
c=a%10;
write_wx1(c,13,6) ;
}
else
{
c=a%10;
write_wx1(c,7,6) ;
}
write_wx1(2,19,6) ;
//分隔開
if(b>=10)
{
c=b/10;
write_wx1(c,25,6) ;
}
else
{
write_wx1(c,25,6) ;
}
}
}
void delay_h(unsigned int k)
{
while(k--);
}
//*********開始觸發(fā)*******
void start_bit(void)
{
SDA=1;
delay(5);
SCL=1;
delay(5);
SDA=0;
delay(5);
SCL=0;
delay(5);
}
//*********結(jié)束*******
void stop_bit(void)
{
SCL=0;
delay(5);
SDA=0;
delay(5);
SCL=1;
delay(5);
SDA=1;
}
//---------發(fā)送一個字節(jié)---------
void tx_byte(uchar dat_byte)
{
uchar i,n,dat;
n=Nack;
TX_again:
dat=dat_byte;
for(i=0;i<8;i++)
{
if(dat&0x80)
out=1;
else
{
out=0;
}
send_bit();
dat=dat<<1;
}
jieshou();//
if(in==1)//?
{
stop_bit();
if(n!=0)
{
n--;
goto Repeat;
}
else
goto exit;
}
else
{
goto exit;
}
Repeat:
start_bit();
goto TX_again;
exit: ;
}
//*********發(fā)送一個位*******
void send_bit(void)
{
if(out==1)
SDA=1;
else
{
SDA=0;
}
delay(5);
SCL=1;
delay(8);
SCL=0;
delay(8);
}
//----------接收一個字節(jié)--------
uchar rx_byte(void)
{
uchar i,dat;
dat=0;
for(i=0;i<8;i++)
{
dat=dat<<1;
jieshou();//
if(in==1)
dat=dat+1;
}
SDA=0;
send_bit();//?
return dat;
}
//----------接收一個位----------
void jieshou()
{
SDA=1;
in=1;
SCL=1;
delay(8);
in=SDA;
delay(1);
SCL=0;
delay(8);
}
//-----------讀溫度--------------
unsigned int memread(void)
{
uchar DataH,DataL,Pecreg;
start_bit();
tx_byte(0x00); //Send SlaveAddress
tx_byte(0x07); //Send Command
start_bit();
tx_byte(0x1);
out=0;
DataL=rx_byte();
out=0;
DataH=rx_byte();
out=1;//
Pecreg=rx_byte();
stop_bit();
return(DataH*256+DataL);
}
#endif
主函數(shù):
#include "HT66F2390.h"
#include"hw.h"
#include"oled.h"
void main()
{
unsigned int tem;
_wdtc = 0xa8;
_pec = 0x00;
_scc = 0x00;
_pfc = 0x00;
_hirc0 =0;
_hirc1 =0;
Init();
qp();
write_x(5,10);
SCL=1;
SDA=1;
delay(4);
SCL=0;
delay(1000);
SCL=1;
while(1)
{
tem =memread();
display_h(tem);
delay(20);
}
復(fù)制代碼
作者:
18387385089
時間:
2020-4-21 14:55
樓主請問Oled.h的代碼是什么
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1