找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1780|回复: 0
打印 上一主题 下一主题
收起左侧

STM32单片机BH1750_OLED动态显示程序

[复制链接]
跳转到指定楼层
楼主
ID:651755 发表于 2022-3-27 17:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "bh1750.h"
  5. #include "oled.h"


  6. int main(void)
  7. {               
  8.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  9.         delay_init();                     //延时函数初始化         
  10.         uart_init(115200);         //串口初始化为115200
  11.         Light_Init();
  12.         bh_data_send(BHPowOn);   
  13.         bh_data_send(BHReset);
  14.         bh_data_send(BHModeH1); //选择的是分辨率是4lx,测量时间是16ms的
  15.         delay_ms(100);
  16.          
  17.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  18. //        NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级         LED_Init();                             //LED端口初始化
  19. //        delay_ms(8000);
  20.                
  21.         OLED_Clear();
  22.         OLED_Init();                        //初始化OLED  
  23.   while(1)
  24.         {
  25. //                OLED_Clear();
  26.                 printf("%d \n",bh_data_read());
  27.                 OLED_SHOW_BH1750();                //OLED动态显示BH1750光照数值

  28.         }
  29. }
复制代码

  1. #include "delay.h"
  2. #include "bh1750.h"
  3. #include "oled.h"


  4. typedef   unsigned char BYTE;
  5. //BYTE    BUF[8];                         //接收数据缓存区   
  6. //iic接口初始化

  7. void Single_Write_BH1750(uchar REG_Address)
  8. {
  9.    IIC_Start();                  //起始信号
  10.    IIC_Send_Byte(BHAddWrite);   //发送设备地址+写信号
  11.    IIC_Send_Byte(REG_Address);    //内部寄存器地址,
  12.   //  BH1750_SendByte(REG_data);       //内部寄存器数据,
  13.    IIC_Stop();                   //发送停止信号
  14. }

  15. void Light_Init(void)
  16. {
  17.         GPIO_InitTypeDef  GPIO_InitStructure;
  18.        

  19.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能A端口时钟
  20.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;         
  21.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  22.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
  23.         GPIO_Init(GPIOB, &GPIO_InitStructure);          //初始化GPIOB10,11
  24.         GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);       

  25.         Single_Write_BH1750(0x01);
  26. }


  27. /*************************************************************************************/
  28. void bh_data_send(u8 command)
  29. {
  30.     do{
  31.     IIC_Start();                      //iic起始信号
  32.     IIC_Send_Byte(BHAddWrite);       //发送器件地址
  33.     }while(IIC_Wait_Ack());           //等待从机应答
  34.     IIC_Send_Byte(command);          //发送指令
  35.     IIC_Wait_Ack();                   //等待从机应答
  36.     IIC_Stop();                       //iic停止信号
  37. }

  38. u16 bh_data_read(void)
  39. {
  40.         u16 buf;
  41.         IIC_Start();                       //iic起始信号
  42.         IIC_Send_Byte(BHAddRead);         //发送器件地址+读标志位
  43.         IIC_Wait_Ack();                     //等待从机应答
  44.         buf=IIC_Read_Byte(1);              //读取数据
  45.         buf=buf<<8;                        //读取并保存高八位数据
  46.         buf+=0x00ff&IIC_Read_Byte(0);      //读取并保存第八位数据
  47.         IIC_Stop();                        //发送停止信号
  48.         return buf;
  49. }

  50. void OLED_SHOW_BH1750(void)
  51. {
  52.                 OLED_ShowChar(0,0,'L',16);
  53.                 OLED_ShowChar(8,0,'U',16);
  54.                 OLED_ShowChar(18,0,'X',16);
  55.                 OLED_ShowChar(25,0,':',16);
  56.                
  57.                 if(bh_data_read() > 65200)
  58.                 {       
  59.                         OLED_ShowChar(32,0,'E',16);
  60.                         OLED_ShowChar(40,0,'R',16);
  61.                         OLED_ShowChar(48,0,'R',16);
  62.                         OLED_ShowChar(56,0,'O',16);
  63.                         OLED_ShowChar(64,0,'R',16);
  64.                         delay_ms(500);
  65.                         OLED_Clear();
  66.                 }
  67.                 else if(bh_data_read() > 10000 && bh_data_read() < 65200)       
  68.                 {       
  69.                         OLED_ShowNum(32,0,bh_data_read() % 100000 / 10000,1,16);
  70.                         OLED_ShowNum(40,0,bh_data_read() % 10000  / 1000 ,1,16);
  71.                         OLED_ShowNum(48,0,bh_data_read() % 1000   / 100  ,1,16);
  72.                         OLED_ShowNum(56,0,bh_data_read() % 100    / 10   ,1,16);
  73.                         OLED_ShowNum(64,0,bh_data_read() % 10            ,1,16);
  74.                 }
  75.                
  76.                 else if(bh_data_read() > 1000 && bh_data_read() < 10000)       
  77.                 {       
  78.                         OLED_ShowChar(32,0,' ',16);
  79.                         OLED_ShowNum(40,0,bh_data_read() % 10000  / 1000 ,1,16);
  80.                         OLED_ShowNum(48,0,bh_data_read() % 1000   / 100  ,1,16);
  81.                         OLED_ShowNum(56,0,bh_data_read() % 100    / 10   ,1,16);
  82.                         OLED_ShowNum(64,0,bh_data_read() % 10            ,1,16);
  83.                 }
  84.                 else if(bh_data_read() > 100 && bh_data_read() < 1000)       
  85.                 {       
  86.                         OLED_ShowChar(32,0,' ',16);
  87.                         OLED_ShowChar(40,0,' ',16);
  88.                         OLED_ShowNum(48,0,bh_data_read() % 1000   / 100  ,1,16);
  89.                         OLED_ShowNum(56,0,bh_data_read() % 100    / 10   ,1,16);
  90.                         OLED_ShowNum(64,0,bh_data_read() % 10            ,1,16);
  91.                 }
  92.                 else if(bh_data_read() > 10 && bh_data_read() < 100)       
  93.                 {       
  94.                         OLED_ShowChar(32,0,' ',16);
  95.                         OLED_ShowChar(40,0,' ',16);
  96.                         OLED_ShowChar(48,0,' ',16);
  97.                         OLED_ShowNum(56,0,bh_data_read() % 100    / 10   ,1,16);
  98.                         OLED_ShowNum(64,0,bh_data_read() % 10            ,1,16);
  99.                 }
  100.                 else if(bh_data_read()  < 10)       
  101.                 {       
  102.                         OLED_ShowChar(32,0,' ',16);
  103.                         OLED_ShowChar(40,0,' ',16);
  104.                         OLED_ShowChar(48,0,' ',16);
  105.                         OLED_ShowChar(56,0,' ',16);
  106.                         OLED_ShowNum(64,0,bh_data_read() % 10            ,1,16);
  107.                 }
  108. //                else break;
  109.                
  110.                
  111.                 delay_ms(100);
  112. }
复制代码


Keil代码下载: STM32_BH1750_OLED动态显示.7z (192.77 KB, 下载次数: 48)

评分

参与人数 1黑币 +10 收起 理由
admin + 10 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表