STM32项目分享:基于智能电扇的设计与实现
“我们不做一锤子买卖,只做技术成长的长期伙伴!”
目录
一、视频展示
二、项目简介
三、原理图设计
四、PCB硬件设计
五、程序设计
六、资料分享
一、视频展示
基于智能电扇的设计与实现 -视频分享
二、项目简介
题目:基于智能电扇的设计与实现
主控:STC89C52RC
显示:LCD1602
传感器:
风扇
ASR-PRO语音识别芯片
三按键
DC供电
功能:
1、屏幕显示当前挡位。
2、可手动调节挡位,也可语音调节挡位。
3、定时模式,会根据时间会在10s后关闭(方便展示)。
4、睡眠模式下,电风扇的转速会在快速和慢速之间一直往复运行。
三、原理图设计
四、PCB硬件设计
五、程序设计
#include <reg52.h> //调用单片机头文件
#include <intrins.h>
#include "lcd1602.h"
#include "uart.h"
#include "ds18b20.h"#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
extern unsigned char TIME[7];//按键引脚定义
sbit SET = P1^0;
sbit ADD = P1^1;
sbit DEC = P1^2;sbit jdq1 = P1^4;
sbit BEEP = P2^4;
sbit ren = P1^5;
uchar set_flag,add_flag,dec_flag,show_flag,dec_TEMP=10,max_TEMP=90,show1_flag,on_flage,off_flage,liang_flag=100;
uchar light,times,count,count1,ssa=0;
extern uchar receive_data[8];
extern uint bytes;
extern uint bytes_old;uchar mp3[] = {0xaa,0x00};void key_scan(void)
{if(SET== 0)//设置键按下{ delay_ms(20);if(SET== 0){while(!SET);set_flag=1;lcd_clear();}}if(ADD == 0)//加键按下{delay_ms(20);if(ADD == 0){while(!ADD);add_flag = 1;}}if(DEC == 0)//减键按下{delay_ms(20);if(DEC == 0){while(!DEC);dec_flag = 1;}}
}void main()
{TMOD = 0x01; //定时器0工作方式1TH0 = 0xfc; //设置定时初值TL0 = 0x67;ET0 = 1; //允许定时器0中断EA = 1; //允许总中断TR0 = 1; //启动定时器0
// ES=1;lcd_init();//1602初始化uart_init();
// ren=0;while(1){key_scan();if (set_flag == 1){count1=0;show_flag++;set_flag = 0;lcd_write_com(0x01);if(show_flag==3){show_flag=0;}}if (show_flag == 0){lcd_write_str(0,0,"Intelligent fan");lcd_write_str(12,1,"MANU");lcd_write_str(0,1,"LEVEL:");if(add_flag == 1){add_flag = 0;on_flage++;if(on_flage>=4){on_flage=0;}}switch(on_flage){case 0:liang_flag=100;break;case 1:liang_flag=70; lcd_write_str(6,1,"1");break;case 2:liang_flag=40; lcd_write_str(6,1,"2");break;case 3:liang_flag=10; lcd_write_str(6,1,"3");break;}if(liang_flag==100){lcd_write_str(6,1,"0");}}if(show_flag==2){lcd_write_str(0,0,"Intelligent fan");lcd_write_str(11,1,"SLEEP");times++;if(times>=40)times=0;else if(times>=30)liang_flag=10;else if(times>=20)liang_flag=40;else if(times>=10)liang_flag=70;else if(times>=0)liang_flag=100;}if (show_flag == 1){lcd_write_str(0,1,"10");lcd_write_str(0,0,"Intelligent fan");lcd_write_str(12,1,"TIME");if(ssa==1){ssa=0;count1=0;}if(count1<=10){switch(on_flage){case 0:liang_flag=100;break;case 1:liang_flag=70; lcd_write_str(6,1,"1");break;case 2:liang_flag=40; lcd_write_str(6,1,"2");break;case 3:liang_flag=10; lcd_write_str(6,1,"3");break;}}else{liang_flag=100;count1=12;}if(dec_flag == 1){dec_flag = 0;count1=0;}}}
}
void timer0_int(void) interrupt 1
{uint i,j;TH0 = 0xfc; //重新设置定时初值TL0 = 0x67;i++;j++;if(i >= liang_flag){jdq1=0;}if(i == 100){jdq1=1;i = 0;}if(j>=1000){j=0;count++;if(count>=10){count=0;count1++;}}
}
void Com_Int(void) interrupt 4
{EA = 0;if(RI==1) //此句判断不能省略,否则发送数据时也会执行此语句,造成字符串错误!!!(RI为接收数据标志,当接收到数据自动置为1){RI=0;receive_data[0] = SBUF;//接收到的数据bytes++;} EA = 1;if(receive_data[0] == 'A') //低速{lcd_write_com(0x01);receive_data[0]=0;show_flag = 0;on_flage=1;}if(receive_data[0] == 0X42)//中速{lcd_write_com(0x01);receive_data[0]='0';show_flag = 0;on_flage=2;}if(receive_data[0] == 'C')//高速{lcd_write_com(0x01);receive_data[0]='0';show_flag = 0;on_flage=3;}if(receive_data[0] == 'D')//手动{lcd_write_com(0x01);receive_data[0]='0';show_flag = 0;on_flage=0;}if(receive_data[0] == 'E')//定时{count1=0;lcd_write_com(0x01);receive_data[0]='0';show_flag = 1;}if(receive_data[0] == 'F')//停止{lcd_write_com(0x01);receive_data[0]='0';show_flag = 0;on_flage=0;}if(receive_data[0] == 'G')//睡眠{lcd_write_com(0x01);receive_data[0]='0';show_flag = 2;}if(receive_data[0] == 'H')//睡眠{lcd_write_com(0x01);receive_data[0]='0';ssa=1;}}
六、资料分享
点击即可查看当前资料分享。