基于51单片机小型风扇设计—红外遥控
基于51单片机小型风扇设计
(仿真+程序+原理图)
功能介绍
具体功能:
1.单片机控制直流电机(风扇)转动,风速分为4个等级;
2.数码管会显示风速等级;
3.按键可以调整风速;
4.增加无线红外控制;
演示视频:
基于51单片机小型风扇设计—红外遥控
添加图片注释,不超过 140 字(可选)
硬件设计
使用元器件:
单片机:STC89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
自锁开关;电解电容10uF;
电阻10K;瓷片电容30P;
晶振11.0592M;电解电容470uF;
瓷片电容104;电阻470(贴片);
LED(红发红);H1838红外接收;
按键;1位共阳数码管;
DIP40;DIP8;L9110;直流电机;
7*9CM 万能板;USB 公对公线;
M2螺丝配螺母;风扇叶;
扎带;铜柱配螺丝;
2P 排针;遥控器;
导线:若干;
程序
/********51单片机小型风扇设计(带遥控)***********
/***微信公众号:木子单片机****
**************风量:1,2,3,4个等级***************/#include <REGX52.H> //头文件
#define uchar unsigned char
#define uint unsigned int/********定义IO端口********/
#define Key1 P3_2 //调速按键(停止,1级风,2级风,3级风,4级风)
#define SMG_XS P0 //数码管显示
#define IA P2_5 //直流电机控制端口
#define IB P2_4 //直流电机控制端口
#define IR1 P3_3 //红外接收端口
#define LED P1_0 //定义接收指示灯uchar AddData=0; //定义自增变量
uchar HeardData=0; //定义接收到数据的高位变量
bit ExeFlag=0; //定义可执行位变量
uchar flag=0; //风量等级标志位(0:停止、1:1级风、2:2级风、3:3级风、4:4级风)uchar code Data[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管 0 1 2 3 4 5 6 7 8 9 void delay_anjian(uint time) //延时去抖
{uint x,y;for(x=time;x>0;x--)for(y=110;y>0;y--);
}void Init() //系统初始化
{
/***定时器工作方式**/TMOD=0x11; //T0和T1:工作方式1EA=1; //打开总开关/***定时器0初始化(红外)***/ET0=1; //打开定时器0中断TH0=0xff; //时间大约为25uS TL0=0x19; TR0=1; //同意开始定时器0PT0=1; //T0高优先级/*定时器1初始化(产生PWM控制电机转速)*/ ET1=1; //使能T1中断TH1=0xf8; //定时2msTL1=0xcc;TR1=0; //关闭定时器1/****外部中断1初始化******/EX1=1; //同意开启外部中断1IT1=1; //设定外部中断1为低边缘触发类型PX1=1; //外部中断1 高优先级
}void Key_cl() //按键处理
{if(Key1==0) //调速按键按下{delay_anjian(5);//延时去抖if(Key1==0) //再判断按键是否按下{while(Key1==0); //等待按键松开flag++; //风量等级标志位加1 if(flag==5) {flag=0;}//让flag值控制在0到4之间} }
}void Out_cl() //风量输出处理
{switch(flag) {case 0: SMG_XS=Data[flag]; IA=0; IB=0; TR1=0; break; //停止case 1: SMG_XS=Data[flag]; TR1=1; break; //1级风case 2: SMG_XS=Data[flag]; TR1=1; break; //2级风case 3: SMG_XS=Data[flag]; TR1=1; break; //3级风case 4: SMG_XS=Data[flag]; IA=1; IB=0; TR1=0; break; //4级风default: break;}
}void IR1_cl() //红外接收处理
{static uint i=3000; //定义变量i=3000while(i--) //i为0到3000之间的一段时间{ if(IR1==0) //判断延时期间是否有红外信号输入{ExeFlag=1; //将可执行标志位置1}}i=3000; //i设置3000if(ExeFlag==0) //判断可执行标志位{EX1=1; //开启外部中断1}ExeFlag=0; //可执行标志位置0
}void main() //主函数入口
{Init(); //系统初始化 while(1) //主循环{IR1_cl(); //红外接收处理Key_cl(); //按键处理Out_cl(); //风量输出处理}
}void Time1() interrupt 3 //调速定时器1中断服务函数
{static uchar a=1; //定义变量a=1TH1=0xf8; //定时2msTL1=0xcc;switch (flag){case 1: if(a==1) {IA=1; IB=0;} else {IA=0; IB=0;} break; //25%转(1级风)case 2: if(a<=2) {IA=1; IB=0;}else {IA=0; IB=0;} break; //50%转(2级风)case 3: if(a<=3) {IA=1; IB=0;} else {IA=0; IB=0;} break; //75%转(3级风)default:break;}a++; //a加1while(a==5) {a=1;} //a保持在1到4之间
}void Timer0_IR1() interrupt 1 //红外定时器0中断服务函数
{ TH0=0xff; //时间大约为25uS TL0=0x19; AddData++; //自增变量加1
}void Int1_IR1() interrupt 2 //红外接收外部中断1服务函数
{static uint RecvData=0; //定义接收红外数据变量static uchar CountData=0; //定义红外个数计数变量LED=1; //接收指示灯置1(熄灭) if(4==AddData)//0 //判断接收到的数据是0{RecvData=RecvData | 0; //判断到0就将当前位写0RecvData=RecvData << 1; //将当前位向左移动1位}else if(8==AddData)//1 //判断接收到的数据是1{RecvData=RecvData | 1; //将当前位写1RecvData=RecvData << 1; //将当前位向左移动1位}CountData++; //将红外接收位计数器加1if(CountData==8) //判断是否接收到8位数据{HeardData=RecvData; //是8位数据时,则将数据暂存到高位变量中}else if(CountData==16) //判断是否接收到16位数据{ET0=0; //关闭红外定时器0EX1=0; //关闭红外外部中断1AddData=0; //定时时间间隔变量清零if(HeardData==226 || HeardData==112)//判断用户码是否正确{ LED=0; //用户码正确,接收指示灯置0(点亮)HeardData=RecvData; //取出接收到的低八位数据switch(HeardData) //判断低八位数据的值下列那一位{case 32: //电源 //说明按下了电源键{flag=0; //风量等级标志位为0 (停止) break; //返回}case 0: //1 //说明按下数字1键{flag=1; //风量等级标志位为1 (1级风)break; //返回}case 8: //2 //说明按下了数字2键{flag=2; //风量等级标志位为2 (2级风)break; //返回}case 4: //3 //说明按下了数字3键{flag=3; //风量等级标志位为3 (3级风)break; //返回}case 12: //4 //说明按下了数字4键{flag=4; //风量等级标志位为4 (4级风)break; //返回}}}
**//完整资料
***//***微信公众号:木子单片机****RecvData=0; //将接收到的数据清零CountData=0; //将接收计数器清零HeardData=0; //将接收高低数据变量清零return; //返回}AddData=0; //将定时器计数器清零ET0=1; //打开定时器0中断
}
添加图片注释,不超过 140 字(可选)
设计资料
01仿真图
本设计使用Proteus7.8和Proteus8.9两个版本设计!具体如图!
添加图片注释,不超过 140 字(可选)
02原理图
本系统原理图采用Altium Designer19设计,具体如图!
添加图片注释,不超过 140 字(可选)
03程序
本设计使用Keil5版本编程设计!具体如图!
添加图片注释,不超过 140 字(可选)
04设计资料
资料获取请看前面演示视频,全部资料包括仿真源文件 、AD原理图、程序(含注释)、元件清单、实物图等。具体内容如下,全网最全! !
操作演示请观看前面演示视频!
点赞分享一起学习成长。