基于51单片机的智能窗帘控制系统设计案例

控制/MCU

1814人已加入

描述

主要内容和基本要求

采用51单片机作为系统的控制芯片,设计一个窗帘升降器,并采用步进电机控制窗帘的升降,控制平稳,精度高。

基本要求:

1.系统设置窗帘升、降变速功能,可设置三种不同的速度,分别为快速、中速、慢速。

2.能够通过键盘设定窗帘上升或者下降的任意定点位置,通过光感应,还能够自动控制选择窗帘的升降,设置有全开、半开、全关三个位置。

3.能够对设置的状态发出语音提示,并用数码管显示电机转速与窗帘位置值,用点阵显示器显示上升“↑”、下降“↓”停止“Ⅱ”三个状态。

4.系统具有手动、红外线遥控、光感自控等功能。

部分程序:

#include //库函数

#include //库函数//如果 实物 打开

#include //AD转换库函数

#define uchar unsigned char//宏定意

#define uint unsigned int//宏定意

#define ulong unsigned long //宏定意

sbit rs=P2^0;//LCD 1602 引脚定意

sbit rd=P2^1;//LCD 1602 引脚定意

sbit lcden=P2^2;//LCD 1602 引脚定意

sbit menu=P2^5; //主功能键

sbit add=P2^4;//加键

sbit dec=P2^3;// 减键

sbit open=P2^6;// 手动 开

sbit close=P2^7;// 手动 关

sbit IR=P3^5; //红外感 应

sbit BEEP=P3^1;// 报警

#define MOTORSTEP P1 //宏定义,定义P1口为步进电机驱动端口

uchar dsflj,kval,lofl,menusw,con,befl,zhenfl,fanfl,brigfl;// 各种变量标记 正返转标记

uint sudu,dwbrigfl,humfl; //电机速度 //光度下限/湿度标记

uchar count0,second,zhenzhuan,fanzhuan,timeflg,opensw,closesw,keysw;//时钟变量 正反转 变量

uint adc0,adc1;

uint upbrig,dwbrig,kwbrig,uphum,uptemp,upsmo; // 下限 亮度 上限湿度// 上限温度

uint hour,minit,secon,DSdat,VAldat ,time;//时钟变量

uint ONhour,ONminit,ONsecon; // 开窗时间变量

uint OFhour,OFminit,OFsecon; // 关窗时间变量

uchar U8T_data_H,U8RH_data_H;

#define Imax 14000

//此处为晶振为11.0592时的取值

,

#define Imin 8000 //如用其它频率的晶振时,没

#define Inum1 1450 //要改变相应的取值。

#define Inum2 700

#define Inum3 3000

uchar f=0;

uchar Im[4]={0x00,0x00,0x00,0x00}; // 遥控码存储空间

uchar show[2]={0,0}; // 变量申明

ulong m,Tc; // 变量申明

uchar IrOK; // 变量申明

void delay(uint z);// 开窗时间变量

void write_rvalue(); // 显示函数

// 以下是各种字幕提示语数组 **********

uchar code logo1[]= "Welcome to use ";

uchar code logo2[]="window system ";

uchar code logo3[]="S=253T=85oCU=85%";

uchar code logo4[]="Br= 12:00:00 ";

uchar code logo5[]="window open ";

uchar code logo6[]="window close ";

uchar code logo7[]="GWbrig= LUX ";

uchar code logo8[]="UP-Hum= % ";

uchar code logo9[]="Please input... ";

uchar code logo10[]="Please wait... ";

uchar code logo11[]="UP-TEM= oC ";

uchar code logo12[]="SEtime 12:00:00";

uchar code logo13[]="ONtime 12:00:00";

uchar code logo14[]="OFtime 12:00:00";

uchar code logo15[]="UP-SMO= ";

uchar code logo16[]="KWbrig= LUX ";

void delaymoto() //步进电机每一步间延迟函数

{

uint y=sudu;

while(y--);

}

uchar code FFW[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //步进电机驱动值数组

uchar code REV[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //步进电机驱动值数组

xdata num1 [4] = {0x00,0x00,0x00,0x00,};

xdata num2 [4] = {0x00,0x00,0x00,0x00,};

xdata num3 [4] = {0x00,0x00,0x00,0x00,};

xdata num4 [4] = {0x00,0x00,0x00,0x00,}; // AD转换变量组组

xdata num5 [4] = {0x00,0x00,0x00,0x00,}; // AD转换变量组组

void delaylog(uint z)//延时函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=500;y>0;y--);

}

void delay(uint z)//延时函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=10;y>0;y--);

}

void SETP_MOTOR_FFW() //反转

{

uint i=0;

for(i=0;i<8;i++) //8步一个循环

{

MOTORSTEP=FFW[i]; //取值赋给P1驱动口

delaymoto();

}

}

void SETP_MOTOR_REV() //正转

{

uint i=0;

for(i=0;i<8;i++) //8步一个循环

{

MOTORSTEP=REV[i]; //取值赋给P1驱动口

delaymoto();

}

}

51单片机

51单片机

51单片机

51单片机

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分