📄 0x01.c
字号:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define pindate P0
sbit RE_DE=P1^3;
sbit MUSIC=P1^0;
sbit YIN=P1^5;
sbit SHI=P1^4;
sbit C=P2^0;
sbit D=P2^1;
sbit X=P2^2;
sbit M=P2^3;
uint R_485;
uchar temp,louhao,fanghao,flag;
uint i,addr;
uchar call[] = {0xd5,23,1,0} ;//呼叫数据
uchar close[] = {0xd5,26,1,0}; //关视频音频
uchar opendoor[] = {0xd5,24,1,0}; //用户机控制门口机开门数据
uchar danger[] = {0xd5,22,1,0}; //紧急呼叫
uchar xying[] = {0xd5,25,1,0}; //有人应答
uchar xian=0xd6; //空闲
sys_initial()
{pindate=0xff;
YIN=0;
SHI=0;
MUSIC=0;
TMOD=0x20; //T1方式2,初值自动恢复
TL1=0xfd; //
TH1=0xfd;
PCON=0x00; //串行口波特率不加倍
TR1=1; //开启定时/计数器T1
//SCON=0xf8 //串口工作方式3,SM2=1,REN=1允许接收,TB8=1表示主机发送的是地址 主从成功使用
SCON=0x50; //SM2=0,REN=1,TB8=1
//SCON=0xf0;
PS=1;
//PX1=0; //从主成功使用
EA=1; //EA为CPU中断允许控制位,为1开中
// EX0=1; //外中断INTO中断允许控制位,为1开中
// EX1=1; //外中断INT1中断允许控制位,为1开中
// IT0=0;
// IT1=0; //脉冲触发方式,下降沿有效
//P3_5=0; //发送
//加上串行口中断开中
// ES=1; //串行口中断开中
ES=1;
}
void delay()
{uint i,j;
for(i=0;i<1000;i++)
{
for(j=0;j<100;j++)
;
}
}
void sentopendoor( )
{
ES=0;
RE_DE=1;
opendoor[3]=pindate;
for(i=0;i<4;i++)
{
SBUF=opendoor[i];
while(!TI);
TI=0;
}
delay();
TI=0;
SBUF= xian;
while(TI!=1);
TI=0;
ES=1;
RE_DE=0;
}
void sentclose( )
{
ES=0;
RE_DE=1;
close[3]=addr;
for(i=0;i<4;i++)
{
SBUF=close[i];
while(!TI);
TI=0;
}
delay();
TI=0;
SBUF= xian;
while(TI!=1);
TI=0;
ES=1;
RE_DE=0;
}
void sentdanger( )
{
ES=0;
RE_DE=1;
danger[3]=addr;
for(i=0;i<4;i++)
{
SBUF=danger[i];
while(!TI);
TI=0;
}
delay();
TI=0;
SBUF= xian;
while(TI!=1);
TI=0;
ES=1;
RE_DE=0;
}
void sentxying( )
{
ES=0;
RE_DE=1;
xying[3]=addr;
for(i=0;i<4;i++)
{
SBUF=xying[i];
while(!TI);
TI=0;
}
delay();
TI=0;
SBUF= xian;
while(TI!=1);
TI=0;
ES=1;
RE_DE=0;
}
main()
{
R_485=0;
RE_DE=0;
addr=pindate;
sys_initial(); //串口初始化
while(1)
{
if(D==0)
{
sentopendoor();
}
if(C==0)
{YIN=1;
SHI=1;
MUSIC=0;
sentxying();
}
if(X==0)
{
YIN=0;
SHI=0;
sentclose();
}
if( M==0)
{sentdanger();
}
}
}
void serial(void) interrupt 4 using 3
{
while(!RI);
RI=0;
temp=SBUF;
if(R_485==0) //
{
if(temp==0xd5)
{
R_485=1;
goto reback;
}
else if(temp==0xd6)
{
goto reback;
}
else
{R_485=0;
goto reback;
}
}
else if (R_485==1) //
{
flag=temp;
R_485=2;
goto reback;
}
else if (R_485==2) //
{
louhao=temp;
R_485=3;
goto reback;
}
else if (R_485==3) //接收
{
fanghao=temp;
R_485=0;
}
if(flag==23) //接收用户ID
{
if( louhao==1 )
{
if(fanghao==addr)
{ MUSIC=1;
MUSIC=1;
flag=0;
}
}
}
//
else if(flag==22)
{
if( louhao==1 )
{
if(fanghao==addr)
{ MUSIC=1;
YIN=1;
SHI=1;
flag=0;
fanghao=0;
louhao=0;
MUSIC=0;
}
}
}
reback: ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -