久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4585|回復: 3
打印 上一主題 下一主題
收起左側

關于SMBUS的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:135131 發表于 2016-7-26 20:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大神,最近用mlx90614可是用smbus的,本人比較菜不太懂,把PDF后面給的代碼下到開發板里沒效果,一直顯示傳感器檢測的最大值,
代碼:
#include<reg52.h>
#include<intrins.h>
//************************************
#define uint unsigned int
#define uchar unsigned char
#define Nack_counter 10
//**************端口定義**************
//LCD控制線接口
uchar flag1;
sbit RS=P2^6;
sbit RW=P2^5;
sbit LCDE=P2^7;
//mlx90614端口定義
sbit SCL=P2^1;//時鐘線                                                                                                                                                                                                                                                                                                                                                                                                                                                   
sbit SDA=P2^0;//數據線
//************數據定義****************
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;//函數部分
SDA=1;
//delay1();
SCL=1;
    //delay1();
_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<N;i++)
   _nop_();
}
/*void delay1()
{ ;; }*/
//------------------------------
uint memread(void)
{
start_bit();
tx_byte(0x00); //Send SlaveAddress
tx_byte(0x07); //Send Command
//------------
start_bit();
tx_byte(0x01);
bit_out=0;
DataH=rx_byte();
bit_out=0;
DataL=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)
{
  P0=0xff;
  RS=0;
  RW=1;
  LCDE=1;
  flag1=P0;
  LCDE=0;
}
}
void dis_cmd_wrt(uchar cmd) //寫命令子函數
{
chk_busy_flg();
P0=cmd;
RS=0;
RW=0;
LCDE=1;
LCDE=0;
}
void dis_dat_wrt(uchar dat) //寫數據子函數
{
chk_busy_flg();
if(flag1==16)
{
  P0=0XC0;
  RS=0;
  RW=0;
  LCDE=1;
  LCDE=0;
}
P0=dat;
RS=1;
RW=0;
LCDE=1;
LCDE=0;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:149139 發表于 2017-1-6 15:03 | 只看該作者
我也是這個問題,解決了么
回復

使用道具 舉報

板凳
ID:221543 發表于 2017-7-22 10:57 | 只看該作者
你這個是淘寶買的模塊吧,寫著支持I2C協議的,但是給的DATASHEET卻是支持SMBUS的,很蛋疼,解決了么??求教
回復

使用道具 舉報

地板
ID:235025 發表于 2017-9-29 12:12 | 只看該作者
我也遇到相同的問題,解決了嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.99精品| 在线一区二区三区 | 日韩欧美中文字幕在线观看 | 成人av一区 | 国产精品久久久久久一区二区三区 | 亚洲 欧美 在线 一区 | 日本福利片 | 免费国产成人av | 亚洲一区二区av | 日韩精品一区二区三区中文在线 | 国产伦精品一区二区三区精品视频 | 人成在线 | 成年人在线观看视频 | 日韩高清一区 | 在线视频亚洲 | 99国产视频| 久久精品国产精品青草 | 国产精品自产拍在线观看蜜 | 欧美三区 | 二区视频| 韩日一区| 看av网址| 犬夜叉在线观看 | 亚洲欧洲精品在线 | 国产精品精品久久久 | 国产精品色综合 | 欧美中文视频 | 日本淫视频| 久久国内精品 | 激情婷婷 | 亚洲精品一区二区三区蜜桃久 | 国产精品精品视频 | 色久影院 | 久久精品网 | 一区二区三区精品 | 最新超碰 | 午夜综合 | 一级片在线视频 | 777zyz色资源站在线观看 | 亚洲一区二区在线视频 | 一级黄色片免费在线观看 |