#include
#define uint unsigned int
#define uchar unsigned char
uchar r_buf; //藍牙接收到的字符存儲緩沖區
sbit PWMA=P2^0;? ? ? ? //電機驅動模塊接口
sbit IN1=P2^2;
sbit IN2=P2^1;
sbit STBY=P2^3;
sbit LED1=P0^0;? ? ? ? //LED燈接口
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit key1=P1^0;? ? ? ???//按鍵接口
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit beep=P2^4;? ? ? ?? ?//蜂鳴器接口
uchar state;? ? ? ?? ?//聲明一個變量,取名state
void delay(uint x)? ? ? ? //延時函數
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void turnon()? ? ? ?? ?//開門函數
{
IN1=0;
IN2=1;
delay(700);
}
void turnoff()? ? ? ?? ?//關門函數
{
IN1=1;
IN2=0;
delay(700);
}
void turnstop()? ? ? ???//停止函數
{
IN1=1;
IN2=1;
}
void InitUART()? ? //串口初始化9600
{
//初始化串口定時器9600
TMOD = 0x20;? ?//0x20=0010 0000 TMOD中的M0和M1為控制方式的選擇 M1=1,M0=0 T1,方式2
PCON = 0x00;? ?//波特率不倍增
SCON = 0x50;? ?//串口模式1,允許接收
TH1 = 0xFD;? ? ? ?? ? //波特率9600
TL1 = 0xFD;? ? ? ?? ? //波特率9600
EA = 1;? ? ? ? ? ? ? ?? ? //開總中斷
TR1 = 1;? ? ? ?? ? //啟動定時器1
ES = 1;? ? ? ?? ?? ???//打開串行口中斷
STBY = 1;? ? ? ?? ? //電機驅動STBY=1有效,等于1,才能驅動電機
PWMA = 1;? ? ? ?? ? //
}
void SendOneByte(uchar c) //發送字符函數
{
SBUF = c-0x30;
while(!TI);
TI = 0;
}
void keyscan()? ? ? ? ? ? ? ? ? ? ? ?? ?//鍵盤掃描函數
{
if(key1 == 0)? ? ? ???? ? ? ?? ?//掃描按鍵key1
{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?//延時10ms,消抖
delay(10);
if(key1 == 0)
{
beep=0;? ? ? ? ? ? ? ?? ?//蜂鳴器響
LED2=1;? ? ? ? ? ? ? ?? ?//紅燈關掉
LED3=0;? ? ? ? ? ? ? ?? ?//黃燈亮
delay(400);? ? ? ?? ?//延時400毫秒
beep=1;? ? ? ? ? ? ? ?? ?//關閉蜂鳴器
turnon();? ???//打開門
turnstop();? ?//停止
state=1;? ? ? ?? ?//將1賦值給state
while(!key1); //等待按鍵釋放
}
}
if(key2==0)? ? ? ???? ? ? ? ? ? ? ?? ?//掃描按鍵key2
{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?//延時10ms,消抖
delay(10);
if(key2 == 0)
{
beep = 0;? ? ? ?? ?//蜂鳴器響
LED1 = 1;? ? ? ?? ?//綠燈關掉
LED3 = 0;? ? ? ?? ?//黃燈亮
delay(400);? ? ? ?? ?//延時400毫秒
beep = 1;? ? ? ?? ?//關閉蜂鳴器
turnoff();? ? ? ?? ?//關門
turnstop();? ? ? ?? ?//停止
state = 2;? ? ? ?? ?//將2賦值給state
while(!key2); //等待按鍵釋放
}
}
}
void main()
{
InitUART();
//r_buf = '2';
while(1)
{
keyscan();? ? ? ? ? ? ? ???//
if(state == 1)? ?//sate==1,也就是打開了門,亮LED1綠燈
{
LED1 = 0;
LED2 = 1;
LED3 = 1;
}
else if(state == 2)? ? ? ???//sate==2,也就是關閉了門,亮LED2紅燈燈
{
LED1 = 1;
LED3 = 1;
LED2 = 0;
}
else
{
LED1 = 1;
LED2 = 1;
LED3 = 0;
}
}
}
void UARTInterrupt(void) interrupt 4 //串口接收字符
{
if(RI)
{
RI = 0;? ?? ? ? ?? ?//
r_buf = SBUF;? ???//
if(state!=1)
{
if(r_buf == '0')??//如果為字符‘0’
{
beep = 0;? ? ? ?? ?//蜂鳴器響
LED2 = 1;? ? ? ?? ?//紅燈關掉
LED3 = 0;? ? ? ?? ?//黃燈亮
delay(400);? ? ? ?? ?//延時400毫秒
beep = 1;? ? ? ?? ?//關閉蜂鳴器
turnon();? ???//打開門
turnstop();? ?//停止
state = 1;? ? ? ?? ?//將1賦值給state
}
}
if(state!=2)
{
if(r_buf == '1')??//如果為字符‘1’
{
beep = 0;? ? ? ?? ?//蜂鳴器響
LED1 = 1;? ? ? ?? ?//綠燈關掉
LED3 = 0;? ? ? ?? ?//黃燈亮
delay(400);? ? ? ?? ?//延時400毫秒
beep = 1;? ? ? ?? ?//關閉蜂鳴器
turnoff();? ? ? ?? ?//關門
turnstop();? ? ? ?? ?//停止
state = 2;? ? ? ?? ?//將2賦值給state
}
}
else //如果為其它字符
{
LED3 = 1;
}
SendOneByte(r_buf);//向手機回發該字符
}
}