这里是小殷学长,单片机毕业设计篇2 基于stm32的智能台灯系统
创作不易,拒绝白嫖
企鹅号:2836235214
------------------------------------------智能台灯系统-----------------------------------------
1.按键进行模式的切换 以及亮度调节 定时时间设置 和实时时间设置 报警距离和有效距离设置
2.光敏自动调节灯光亮度
3.定时模式 显示时间 到时自动熄灭
4.设置当前时间 进行实时显示
5.蓝牙和语音与其他模式互不影响
6.超声波感应到人则打开灯光 如果距离过近则蜂鸣器报警提示
8.学习时长(久坐)提醒功能 可通过按键改变时间
实物展示
下面为该毕设中所用到的相关硬件说明,具体参数不做细节描述
硬件材料
PCB和原理图
main.c部分代码
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
delay_init(); //延时函数初始化
Init_Usart(); //初始化串口
LED_Init(); //初始化LED
Exit_Init(); //按键外部中断控制
Buzzer_GPIO_Init(); //蜂鸣器初始化
Lsens_Init(); //光敏初始化
TIM3_PWM_Init(); //定时器初始
HC_SR04_init(); //超声波初始化
OLED_Init(); //初始化OLED
OLED_Clear(0);
Init_interface(); //初始化界面只显示一次
printf("===============HardWare Init Finished============\r\n");
Buzzer_Voice();
Buzzer_Voice();
while(1)
{
interface_task(work_mode); //界面切换处理
ldr_task(); //光敏处理任务
csb_task(); //红外处理任务
clock_Action(); //定时处理任务
usart_task(); //串口处理任务
TIM_SetCompare2(TIM3,100-current_duty);
}
}
void interface_task(unsigned char interface)
{
static unsigned char temp_interface = 0; //临时缓存当这次值和上次不同时进行清屏处理
if(temp_interface != interface)
{
delay_ms(500);
OLED_Clear(0);
}
temp_interface = interface;
switch(interface)
{
case 0:Init_interface();break; //初始化界面
case 1:KEY_Display();break; //手动模式显示
case 2:LDR_Display();break; //自动模式显示
case 3:Time_Display();break; //定时模式显示
case 4:Interface_SetT();break; //设置当前时间显示
case 5:Interface_Dis();break; //设置距离相关
case 6:Study_time();break; //学习时长界面显示
default:break; //error
}
}
/*-------------------------------串口中断服务函数-------------------------*/
//串口1接收 PA9 PA10 蓝牙模块
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
Usart1_cmd = USART_ReceiveData(USART1);
//USART_SendData(USART1,Usart1_cmd); //打开可通过串口观察接收的数据
USART_ClearFlag(USART1, USART_FLAG_RXNE);
}
}
//语音 RX- PA2 TX-PA3
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)
{
Usart1_cmd = USART_ReceiveData(USART2);
USART_ClearFlag(USART2, USART_FLAG_RXNE);
}
}
void TIM3_IRQHandler(void) //TIM3中断
{
static unsigned int count = 0,t = 0,t1 = 0;
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
{
if(set_timer == 1)
{
count++;
if(count == 100)
{
count = 0;
sec++;
if(sec == 60)
{
sec = 0;
min++;
if(min== 60)
{
min = 0;
hour++;
if(hour == 24)
{
hour = 0;
}
}
}
//sprintf(str_t,"%02d:%02d:%02d\r\n",hour,min,sec);
//printf("%s\r\n",str_t);
}
}
//下面为定时处理
if(clock_start == 1) //开始计时
{
if(current_duty == 0)
{
current_duty = 80;
}
t++;
if(t == 100) //1s
{
t = 0;
set_time--;
if(set_time == 0) //时间到
{
clock_flag = 1; //标志置1 根据此标志进行其他功能响应 蜂鸣器提示
clock_start = 0; //停止计时
set_time = 10; //再次恢复默认值10s
current_duty = 0;
}
}
}
if(clock_start == 0 && work_mode == 3)
{
current_duty = 0;
}
if(sit_flag == 1)
{
t1++;
if(t1 == 100) //1s
{
t1 = 0;
sit_t++;
if(sit_t > sit_time)
{
//进行警报提示 蜂鸣器响5次
Buzzer_Voice();
Buzzer_Voice();
Buzzer_Voice();
Buzzer_Voice();
Buzzer_Voice();
}
}
}
else
{
sit_flag = 0; //等待下次重新开始
sit_t = 0; //等待下一次
}
dis_count++;
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志 //10ms
}
}
上面为基于stm32f103c8t6的智能台灯系统相关的大致介绍,源码,pcb和原理图以及相关文档说明做了详细说明
创作不易,拒绝白嫖
实物+资料