主要內(nèi)容和基本要求
采用51單片機(jī)作為系統(tǒng)的控制芯片,設(shè)計(jì)一個(gè)窗簾升降器,并采用步進(jìn)電機(jī)控制窗簾的升降,控制平穩(wěn),精度高。
基本要求:
1.系統(tǒng)設(shè)置窗簾升、降變速功能,可設(shè)置三種不同的速度,分別為快速、中速、慢速。
2.能夠通過(guò)鍵盤(pán)設(shè)定窗簾上升或者下降的任意定點(diǎn)位置,通過(guò)光感應(yīng),還能夠自動(dòng)控制選擇窗簾的升降,設(shè)置有全開(kāi)、半開(kāi)、全關(guān)三個(gè)位置。
3.能夠?qū)υO(shè)置的狀態(tài)發(fā)出語(yǔ)音提示,并用數(shù)碼管顯示電機(jī)轉(zhuǎn)速與窗簾位置值,用點(diǎn)陣顯示器顯示上升“↑”、下降“↓”停止“Ⅱ”三個(gè)狀態(tài)。
4.系統(tǒng)具有手動(dòng)、紅外線遙控、光感自控等功能。
部分程序:
#include //庫(kù)函數(shù)
#include //庫(kù)函數(shù)//如果 實(shí)物 打開(kāi)
#include //AD轉(zhuǎn)換庫(kù)函數(shù)
#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;// 手動(dòng) 開(kāi)
sbit close=P2^7;// 手動(dòng) 關(guān)
sbit IR=P3^5; //紅外感 應(yīng)
sbit BEEP=P3^1;// 報(bào)警
#define MOTORSTEP P1 //宏定義,定義P1口為步進(jìn)電機(jī)驅(qū)動(dòng)端口
uchar dsflj,kval,lofl,menusw,con,befl,zhenfl,fanfl,brigfl;// 各種變量標(biāo)記 正返轉(zhuǎn)標(biāo)記
uint sudu,dwbrigfl,humfl; //電機(jī)速度 //光度下限/濕度標(biāo)記
uchar count0,second,zhenzhuan,fanzhuan,timeflg,opensw,closesw,keysw;//時(shí)鐘變量 正反轉(zhuǎn) 變量
uint adc0,adc1;
uint upbrig,dwbrig,kwbrig,uphum,uptemp,upsmo; // 下限 亮度 上限濕度// 上限溫度
uint hour,minit,secon,DSdat,VAldat ,time;//時(shí)鐘變量
uint ONhour,ONminit,ONsecon; // 開(kāi)窗時(shí)間變量
uint OFhour,OFminit,OFsecon; // 關(guān)窗時(shí)間變量
uchar U8T_data_H,U8RH_data_H;
#define Imax 14000
//此處為晶振為11.0592時(shí)的取值
,
#define Imin 8000 //如用其它頻率的晶振時(shí),沒(méi)
#define Inum1 1450 //要改變相應(yīng)的取值。
#define Inum2 700
#define Inum3 3000
uchar f=0;
uchar Im[4]={0x00,0x00,0x00,0x00}; // 遙控碼存儲(chǔ)空間
uchar show[2]={0,0}; // 變量申明
ulong m,Tc; // 變量申明
uchar IrOK; // 變量申明
void delay(uint z);// 開(kāi)窗時(shí)間變量
void write_rvalue(); // 顯示函數(shù)
// 以下是各種字幕提示語(yǔ)數(shù)組 **********
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() //步進(jìn)電機(jī)每一步間延遲函數(shù)
{
uint y=sudu;
while(y--);
}
uchar code FFW[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //步進(jìn)電機(jī)驅(qū)動(dòng)值數(shù)組
uchar code REV[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //步進(jìn)電機(jī)驅(qū)動(dòng)值數(shù)組
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轉(zhuǎn)換變量組組
xdata num5 [4] = {0x00,0x00,0x00,0x00,}; // AD轉(zhuǎn)換變量組組
void delaylog(uint z)//延時(shí)函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=500;y>0;y--);
}
void delay(uint z)//延時(shí)函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
void SETP_MOTOR_FFW() //反轉(zhuǎn)
{
uint i=0;
for(i=0;i<8;i++) //8步一個(gè)循環(huán)
{
MOTORSTEP=FFW[i]; //取值賦給P1驅(qū)動(dòng)口
delaymoto();
}
}
void SETP_MOTOR_REV() //正轉(zhuǎn)
{
uint i=0;
for(i=0;i<8;i++) //8步一個(gè)循環(huán)
{
MOTORSTEP=REV[i]; //取值賦給P1驅(qū)動(dòng)口
delaymoto();
}
}
評(píng)論
查看更多