用到的模块:
红外遥控 、OLED 屏幕(iic)、ds1302时钟模块、超声波测距模块、dht11温湿度模块、录音模块、MP3模块、蜂鸣器、LED灯、BH1750光强模块。
功能:红外遥控通过pwm波控制LED灯的不同的亮度,外加光强模块调节亮度,OLED 屏幕显示时间、温湿度、可以设置起床闹钟,超声波测距测量离灯的距离,具有防近视的功能,有语音提示注意保持坐姿,可以通过录音模块自己录制,还增加了MP3播放功能等。
具体代码在压缩包中,这里只提供了主函数的程序。
Keil代码下载:
智能台灯.rar
(327.9 KB, 下载次数: 326)
stm32单片机源码:
- #include "stm32f10x.h"
- #include "gpio.h"
- #include "systick.h"
- #include "dh11.h"
- #include "iic_BH1750.h"
- #include "iic.h"
- #include "USART.H"
- #include "timer3_pwm.h"
- #include "timer.h"
- #include "timer2.h"
- #include "remote.h"
- #include "OLED_I2C.h"
- #include "wave.h"
- #include "RTC.h"
- u8 key_date = 0;
- int main()
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- timer_config();
- timertwo_confing();
- LED_EXTI_cfg();
- LED_NVIC_cfg();
- timer3_pwm_config(); //调节灯的亮度 PA6
- I2C_Configuration(); //iic的配置 PB6 -- SCL; PB7 -- SDA
- OLED_Init(); //显示屏的初始化
- Remote_Init(); //红外接收初始化
- LED_config(); //灯的初始化 灯PB0 人体红外PB1
- DHT11_Init(); //温湿度的初始化 PA11温湿度传感器
- DS1302_config(); //时钟模块的配置 CLK/SCK PB0 DAT/IO PA1 RST PA7
- IIC_Init(); //iic初始化 GPIOB14(SCL),GPIOB15(SDA)
- OLED_CLS(); //清屏
- wave_config(); // 超声波的配置 tring(控制端) PA4 echo(接收端) PA5 录音模块 P-L PB5 P-E PB8
- ds1302_init();//DS1302初始化
- ds1302_write_time(); //写入初始值
- while(1)
- {
- BH1750_TX();//光强
- DHT11_TX();//温湿度
- delay_ms(500);
- OLED_CLS();
- DS1302_TX();//时间 日期 DAT需要上拉电阻
- delay_ms(500);
- OLED_CLS();
- // alarm_set(); //闹钟 8:00 PB11
- LED_On_Off();//红外控制等的开关 LED PA6 红外 PB1
- key_date = Remote_Scan(); //返回按键值
- if(key_date == 0xa2)
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_0); //灯亮 CH-
- }
- else if(key_date == 0x62)
- GPIO_ResetBits(GPIOB,GPIO_Pin_0); //灯灭 CH
- // 灯的亮度调节
- else if(key_date == 0x30) // 1
- set_pwm(200);
- else if(key_date == 0x18) // 2
- set_pwm(600);
- else if(key_date == 0x7a) // 3
- set_pwm(1000);
- else if(key_date == 0x10) // 4
- set_pwm(1400);
- else if(key_date == 0x38) // 5
- set_pwm(1800);
- else if(key_date == 0x5a) // 6
- set_pwm(1999);
- else if(key_date == 0x68) // 0
- set_pwm(0);
-
- if(key_date == 0xe2) //mp3的开关 CH+
- GPIO_SetBits(GPIOB,GPIO_Pin_10);
- if(key_date == 0xc2)
- GPIO_ResetBits(GPIOB,GPIO_Pin_10);
-
- if(key_date == 0x90) //关闭闹钟
-
- GPIO_ResetBits(GPIOB,GPIO_Pin_11);
-
- Wave_StarMeasure(); //测距
- Wave_distance();
- }
- }
复制代码
|