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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7044|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)驅(qū)動ADS1115的程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:337087 發(fā)表于 2018-5-24 10:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>   
#include <intrins.h>         

sbit   SCL=P1^0;         //SCL
sbit         SDA=P1^1;         //SDA

sbit led0 = P1^2;
sbit led1 = P1^3;

unsigned char   Initdata[4]={0};

code unsigned char seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //不帶小數(shù)點(diǎn)的共陽數(shù)碼管段碼
code unsigned char seg7codeB[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff}; //帶小數(shù)點(diǎn)的共陽數(shù)碼管段碼

unsigned int date;

unsigned char cnt;


//******************延時子程序 *******************************
void delay(unsigned char i)
{
for(i;i>0;i--);
}

void delay1ms(unsigned char t)
{
unsigned char i;
unsigned char j;
for(i=124;i>0;i--);
        for(j=0;j<t;j++);
}

/****************************開始ADC通信*************************/
void StartADcom()
{
        SDA =0;
  SCL=1;
  delay(100);
  SDA =1;
  delay(20);
  SDA =0;
  SCL=0;  
  delay(10);
}

/***********************************停止ADC通信**************************************/
void StopADcom()
{
  SDA=0;
  delay(10);
  SCL=1;
  delay(20);
  SDA=1;
  delay(10);
}
/********************************單字節(jié)I2C傳輸**************************************/
void Send_Byte(unsigned char byte)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
                if((byte<<i)&0x80)
                  SDA=1;
    else
                  SDA=0;
          delay(5);
          SCL=1;
          delay(10);
    SCL=0;       
    delay(10);             
        }
  delay(5);
  SDA=1;
  delay(5);
  SCL=1;
  delay(10);
  SCL=0;
  delay(10);  
}
/*************************讀取一個字節(jié)*****************************/
unsigned char Read_Byte()
{
  unsigned char temp=0;
  unsigned char i;
  for(i=0;i<8;i++)
        {
                temp=temp<<1;           //shift left to receive next bit
                SCL=0;                        //set clock high
                delay(10);
                SCL=1;
                _nop_();
                delay(5);
                if(SDA==1)                //check if Data=high
                temp|=0x01;            //yes - set bit high
                _nop_();
                delay(10);               
        }
  SCL=0;
  delay(5);
  SDA=0;
  delay(5);
  SCL=1;
  delay(20);
  SCL=0;
  delay(5);
  SDA=1;
  return temp;
}
/**************************配置ADC轉(zhuǎn)換芯片*************************************/
void Confige1115(unsigned char channel_x)
{
  unsigned char i=0;
  unsigned char a_channel;
  switch(channel_x)
        {
                case 1:              
                a_channel=0x42;               
                break;       
               
                case 2:              
                a_channel=0x52;               
                break;
               
                case 3:              
                a_channel=0x62;               
                break;
               
                case 4:              
                a_channel=0x72;               
                break;
               
                default:
                break;       
        }
  Initdata[0] =0x90;      
  Initdata[1] =0x01;      
  Initdata[2]=a_channel;   
  Initdata[3] =0x83;      
  SCL=1;
  StartADcom();
  for(i=0;i<4;i++)
        {
                Send_Byte(Initdata[i]);
                delay(20);
        }
  StopADcom();
}
/********指向轉(zhuǎn)換結(jié)果寄存器**************************/
void Pointregister(void)
{
  unsigned char i=0;
  Initdata[0] =0x90;           
  Initdata[1] =0x00;            
  SCL=1;
  StartADcom();
  for(i=0;i<2;i++)
  {
          Send_Byte(Initdata[i]);
    delay(20);
        }
  StopADcom();
  delay(10);
}
/*****************讀取ADC轉(zhuǎn)換結(jié)果*******************/
unsigned int Read1115(void)
{
  unsigned char   ResultL,ResultH;
  unsigned int    Result;
  Initdata[0] =0x91;      
  SCL=1;
  StartADcom();
  delay(10);
  Send_Byte(Initdata[0]);
  delay(20);
  ResultH=Read_Byte();
  delay(10);
  ResultL=Read_Byte();        
  StopADcom();
  Result=ResultH*256+ResultL;   
  return   Result;
}
/*****ADC模擬量采集轉(zhuǎn)化為數(shù)字量*********/
unsigned int  Ad_1115(unsigned char channel_Ad)                        
{
        unsigned int adc_value;
        Confige1115(channel_Ad);
        delay1ms(1);
        Pointregister();               
        delay(10);
        adc_value=Read1115();               
        return   adc_value;
}

//********************顯示函數(shù)****************
void display()
{
         P2=0xfe;     //P1.0=0,選通第一位
         P0=seg7codeB[date/10000];  //十位數(shù),查表,輸出
         delay1ms(1);
         P0=0xff;        //消隱
       
         P2=0xfd;     //P1.1=0,選通第二位,個位數(shù)
         P0=seg7code[date%10000/1000];
         delay1ms(1);
         P0=0xff;       //消隱
       
         P2=0xfb;     //P1.3=0,選通第三位,小數(shù)點(diǎn)第一位
         P0=seg7code[date%1000/100];
         delay1ms(1);
         P0=0xff;         //消隱
       
         P2=0xf7;     //P1.3=0,選通第四位,小數(shù)點(diǎn)第二位
         P0=seg7code[date%100/10];
         delay1ms(1);
         P0=0xff;       //消隱
}

void Timer1Init(void)               
{               
        TMOD &= 0x0F;               
        TMOD |= 0x10;               
        TL1 = 0x00;               
        TH1 = 0xff;               
        TF1 = 0;               
        TR1 = 1;               
}



//**************************** //主程序
main()
{
        Timer1Init();
        EA = 1;
        ET1 = 1;
while(1)
{
         //date=Ad_1115(1) * 1.2;
         display();
         if(date>40000)
         {
                led0 = 1;
                led1 = 0;
                }
                else if(date>35000)
         {
                led0 = 0;
                delay(50);
                led0 = 1;
                led1 = 0;
                }
                else if(date>15000)
         {
                led0 = 0;
                led1 = 1;
                }
                else
         {
                led0 = 0;
                delay(1);
                led0 = 1;
                led1 = 1;
                }
}
}

void Timer1_isr(void) interrupt 3
{
        ET1 = 0;
        TH0=0x00;                  
        TL0=0xff;
        cnt = cnt + 1;
        if(cnt == 1)
        {
                cnt = 0;
                date=Ad_1115(1) * 1.2;
                //display();
        }
        ET1 = 1;  

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:375976 發(fā)表于 2018-7-20 16:12 | 只看該作者
能不能發(fā)個原理圖出來啊
回復(fù)

使用道具 舉報

板凳
ID:416501 發(fā)表于 2019-9-30 16:01 | 只看該作者
同上,確實只有代碼看著暈。
回復(fù)

使用道具 舉報

地板
ID:583839 發(fā)表于 2019-10-16 15:33 | 只看該作者
我把這個程序進(jìn)行了編譯,那示波器看這個SCL和SDA,兩條線都統(tǒng)一被拉高了,沒有數(shù)據(jù)變化呀
回復(fù)

使用道具 舉報

5#
ID:66862 發(fā)表于 2025-5-24 00:07 | 只看該作者
測試了一下,好像不能用
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费黄色a视频 | 国产欧美日韩精品一区 | 久久99视频| 国产免费一区二区 | 国产一区二区在线视频 | 欧美中文字幕在线 | 国产精品高清一区二区三区 | 91精品久久久久 | 亚洲综合久久精品 | 韩日免费视频 | 日韩高清一区 | 亚洲啪啪 | 日本不卡一区二区三区在线观看 | 黄色免费网站在线看 | 色综合成人网 | 日韩中文字幕第一页 | 美女毛片免费看 | 国产精品九九九 | 中文字幕视频在线观看 | 国产毛片久久久 | 最新中文字幕一区 | 精品亚洲国产成av人片传媒 | 国产精品久久久乱弄 | 夜夜干夜夜操 | 草草视频在线播放 | 国产精品无码久久久久 | 亚洲成人在线免费 | 黄色大片在线播放 | 日韩欧美中文字幕在线视频 | 超碰男人天堂 | 91中文字幕在线观看 | 祝你幸福电影在线观看 | 久久久av| 精品一区电影 | 免费三级网 | 黄色大片网站 | 精品福利一区二区三区 | 国产视频第一页 | 国产一区亚洲二区三区 | 久久精品网 | 国产精品久久久乱弄 |