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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32的BH1750程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:569034 發表于 2019-10-12 20:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "usart.h"
  4. #include "hard_i2c_driver.h"
  5. #include "arc_lcd.h"
  6. /* Private typedef -----------------------------------------------------------*/
  7. /* Private define ------------------------------------------------------------*/
  8. /* Private macro -------------------------------------------------------------*/
  9. extern I2C_INIT_INFO I2C_Info;        ///<I2C控制器相關信息
  10. /* Private variables ---------------------------------------------------------*/
  11. /* Private function prototypes -----------------------------------------------*/
  12. /* Private functions ---------------------------------------------------------*/

  13. /**
  14.   * @brief  延時函數
  15.   * @param  Time 延時時間參數
  16.   * @retval None
  17.   */
  18. void Delay(uint32_t Time)
  19. {
  20.         while(Time--);
  21. }
  22. /**
  23.   * @brief  串口打印輸出溫度和濕度
  24.   * @param  None
  25.   * @retval None
  26.   */
  27. int main(void)
  28. {
  29.         uint8_t I2C_Data[10],ret;
  30.         uint8_t DataString[100];
  31.         NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000); //重新映射中斷向量表
  32.         SystemInit();//系統時鐘初始化
  33.         USART_Configuration(115200);//串口1初始化
  34.         printf("\x0c\0");printf("\x0c\0");//超級終端清屏
  35.         printf("\033[1;40;32m");//設置超級終端背景為黑色,字符為綠色
  36.         printf("\r\n*******************************************************************************");
  37.         printf("\r\n************************ Copyright 2009-2012, ViewTool ************************");
  38.         printf("\r\n************************* viewtoolcom *************************");
  39.         printf("\r\n***************************** All Rights Reserved *****************************");
  40.         printf("\r\n*******************************************************************************");
  41.         printf("\r\n");
  42.         ARC_LCD_Init();//初始化LCD
  43.         ARC_LCD_Clear(LCD_COLOR_BLACK);
  44.         //根據BH1750FVI傳感器設置I2C初始化數據
  45.         I2C_Info.controlMode = 1;//硬件控制
  46.         I2C_Info.speed=100000;//100K
  47.         I2C_Info.subAddrMode=2;//無子地址模式
  48.         I2C_Info.subAddrWidth=0;//子地址為0字節寬度
  49.         I2C_Info.slaveAddr=0x46;//BH1750FVI傳感器I2C地址
  50.         I2C_Info.channel=1;//使用I2C2
  51.         VT_I2C_HardInit(&I2C_Info);
  52.         I2C_Data[0]=0x01;
  53.         VT_I2C_HardWriteNByte(I2C2,0,I2C_Data,1);//傳感器芯片上電命令
  54.         while(1)
  55.         {
  56.                 I2C_Data[0]=0x11;
  57.                 ret = VT_I2C_HardWriteNByte(I2C2,0,I2C_Data,1);//發送測量命令
  58.                 if(ret){
  59.                         printf("I2C寫數據錯誤 %d\n\r",ret);
  60.                 }
  61.                 Delay(3000000);//等待大于120ms,必須加這個延時,否則傳感器沒準備好數據會出現讀數據錯誤
  62.                 ret = VT_I2C_HardReadNByte(I2C2,0,I2C_Data,2);//讀取光照強度值
  63.                 if(ret){
  64.                         printf("I2C讀數據錯誤 %d\n\r",ret);
  65.                 }else{
  66.                         printf("光強度:%f lx\n\r",((I2C_Data[0]<<8)+I2C_Data[1])/(1.2*2));
  67.                         sprintf((char *)DataString,"%0.1f",((I2C_Data[0]<<8)+I2C_Data[1])/(1.2*2));
  68.                         ARC_LCD_DispMyString(0,70,DataString);//將測得的溫度值在LCD上顯示
  69.                 }
  70.                 Delay(1000000);
  71.         }
  72. }

  73. #ifdef  USE_FULL_ASSERT
  74. /**
  75.   * @brief  報告在檢查參數發生錯誤時的源文件名和錯誤行數
  76.   * @param  file 源文件名
  77.   * @param  line 錯誤所在行數
  78.   * @retval None
  79.   */
  80. void assert_failed(uint8_t* file, uint32_t line)
  81. {
  82.     /* 用戶可以增加自己的代碼用于報告錯誤的文件名和所在行數,
  83.        例如:printf("錯誤參數值: 文件名 %s 在 %d行\r\n", file, line) */

  84.     /* 無限循環 */
  85.     while (1)
  86.     {
  87.     }
  88. }
  89. #endif

  90. /*********************************END OF FILE**********************************/
復制代碼

所有資料51hei提供下載:
光照.7z (732.92 KB, 下載次數: 54)


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

使用道具 舉報

沙發
ID:1 發表于 2019-10-12 23:47 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

板凳
ID:569034 發表于 2019-10-13 21:25 | 只看該作者
#include "BH1750.h"
#include "stdio.h"

uchar  BUF[8];                                   

int mcy;              
uint date[4];
uint dis_data;      
void GPIOConfig(void)  
{
          GPIO_InitTypeDef GPIO_InitStruct;
       
          RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
       
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Pin = sda | scl;   

void Delay_5us(void)
{
         uint16_t i=0;
         uint16_t timer = 5;
         while(timer--)
          {
                         i=10;
                         while(i--);
    }
}

void Delay_mms(uint16_t tmp)
{
          uint16_t i=0;
          while(tmp--)
                  {
                                i=12000;
                                while(i--);
      }
}

void BH1750_Start()
{
    GPIO_SetBits(GPIOB, sda);                  
    GPIO_SetBits(GPIOB, scl);                 
    Delay_5us();               
    GPIO_ResetBits(GPIOB, sda);                  
    Delay_5us();               
}


void BH1750_Stop()
{
                GPIO_ResetBits(GPIOB, scl);               
    GPIO_ResetBits(GPIOB, sda);                  
    GPIO_SetBits(GPIOB, scl);                     
    Delay_5us();               
    GPIO_SetBits(GPIOB, sda);                  
    Delay_5us();               
}
void BH1750_SendACK(int ack)
{
          GPIO_InitTypeDef GPIO_InitStruct;
       
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Pin = sda;
    GPIO_Init(GPIOB, &GPIO_InitStruct);  
       
       
    if(ack == 1)   
                        GPIO_SetBits(GPIOB, sda);
                else if(ack == 0)
                        GPIO_ResetBits(GPIOB, sda);
                else
                        return;
                       
    GPIO_SetBits(GPIOB, scl);   
    Delay_5us();               
    GPIO_ResetBits(GPIOB, scl);      
    Delay_5us();               
}

int BH1750_RecvACK()
{
          GPIO_InitTypeDef GPIO_InitStruct;
       
          GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;  
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Pin = sda;
    GPIO_Init(GPIOB, &GPIO_InitStruct);
       
    GPIO_SetBits(GPIOB, scl);           
    Delay_5us();                 
       
          if(GPIO_ReadInputDataBit( GPIOB, sda ) ==1 )
        mcy = 1 ;  
    else
        mcy = 0 ;                       
       
    GPIO_ResetBits(GPIOB, scl);                    
    Delay_5us();                 
  
   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init( GPIOB, &GPIO_InitStruct );
       
    return mcy;
}

void BH1750_SendByte(uchar dat)
{
    uchar i;

    for (i=0; i<8; i++)      
{
                                if( 0X80 & dat )
          GPIO_SetBits( GPIOB, sda);
        else
          GPIO_ResetBits( GPIOB, sda);
                         
       dat <<= 1;
        GPIO_SetBits(GPIOB, scl);               
        Delay_5us();           
        GPIO_ResetBits(GPIOB, scl);              
        Delay_5us();           
      }
    BH1750_RecvACK();
}

uchar BH1750_RecvByte()     
{
    uchar i;
    uchar dat = 0;
          uchar bit;
          
         GPIO_InitTypeDef GPIO_InitStruct;
         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
   GPIO_InitStruct.GPIO_Pin = sda;
   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init( GPIOB, &GPIO_InitStruct );
       
    GPIO_SetBits( GPIOB, sda);         
    for (i=0; i<8; i++)        
    {
        dat <<= 1;
        GPIO_SetBits( GPIOB, scl);              
        Delay_5us();           
                       
                          if( SET == GPIO_ReadInputDataBit( GPIOB, sda ) )
             bit = 0X01;
       else
             bit = 0x00;  
                       
        dat |= bit;               
                       
        GPIO_ResetBits( GPIOB, scl);               
        Delay_5us();            
    }
               
                GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init( GPIOB, &GPIO_InitStruct );
    return dat;
}

void Single_Write_BH1750(uchar REG_Address)
{
    BH1750_Start();                 
    BH1750_SendByte(SlaveAddress);   
    BH1750_SendByte(REG_Address);   
  //  BH1750_SendByte(REG_data);     
    BH1750_Stop();                  
}


void Init_BH1750()
{
   //Single_Write_BH1750(0x01);  
       
                Single_Write_BH1750(0x01);  
       
    Single_Write_BH1750(0x10);   
   Delay_mms(180);            
}

void mread(void)
{   
          uchar i;       
    BH1750_Start();                     
    BH1750_SendByte(SlaveAddress+1);      
          for (i=0; i<3; i++)                     
    {
       BUF[i] = BH1750_RecvByte();         

                          
                         dis_data=BUF[i];

             date[i]=(dis_data<<8)+BUF[i];      

                         if (i == 3)
       {
          BH1750_SendACK(1);              
       }
       else
       {               
          BH1750_SendACK(0);         
       }
                         Delay_mms(5);
   }
          date[0]=(date[0]+date[1]+date[2])/3;
    BH1750_Stop();                          
    Delay_mms(5);
}

BH1750光強傳感器.pdf

433.63 KB, 下載次數: 12, 下載積分: 黑幣 -5

模塊詳細資料

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产91久久久久游泳池 | 请别相信他免费喜剧电影在线观看 | 国产视频福利 | 欧美视频精品 | 欧美精品久久久久 | 久久国产精品一区二区 | 成人福利在线视频 | 日本手机看片 | 国产精品久久久久久婷婷天堂 | 亚洲视频免费 | 亚洲欧美日韩精品久久亚洲区 | 午夜免费在线电影 | 国产在线看片 | 久草福利 | av在线播放网址 | 婷婷综合五月天 | 欧美影院 | 黄色一级免费观看 | 国产女人第一次做爰毛片 | av大全在线观看 | 国产美女在线观看 | 欧美成人一区二免费视频软件 | 欧美一级淫片免费视频黄 | 欧美精品一区二区三区四区五区 | 久久精品欧美视频 | 中文字幕在线视频一区二区三区 | 国产一区二区三区高清 | 97精品国产97久久久久久免费 | 成人免费观看男女羞羞视频 | 亚洲精品一区二区 | 欧美一级精品片在线看 | 91看片网| 国产精品久久久久久妇女 | 久久精品日 | 亚洲日本一区二区 | 久久久青草婷婷精品综合日韩 | 久久综合久色欧美综合狠狠 | 久久久久久久久久久丰满 | 最新国产精品精品视频 | 久久久久国产精品一区二区 | 亚洲精品久久久一区二区三区 |