📄 zj.c
字号:
#include <reg51.h>
#define uchar unsigned char
void send(uchar number,uchar comand);
void read();
void closed();
void open();
void wai();
void delay();
uchar cort=0x03;
sbit p35=P3^5;
sbit p10=P1^0;
sbit p11=P1^1;
void main(){
P2=0Xff;
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
PCON=0x00;
TR1=1;
SCON=0xD8;
IT0=1;
EX0=1;
EA=1;
ES=1;
p35=1;
while(1)
{
if(p10==0) switch(cort) {
case 3:send(0x01,0x03);break;
case 4:send(0x01,0x04);break;
case 5:send(0x01,0x05);break;
default:;
}
if(p11==0) switch(cort) {
case 3:send(0x02,0x03);break;
case 4:send(0x02,0x04);break;
case 5:send(0x02,0x05);break;
default:;
}
}
}
//发送函数
void send(uchar number,uchar comand)
{
a1:p35=1;SM2=0;SBUF=number;while(TI==0);TI=0;//发从机号
p35=0;TB8=0;while(RI==0);RI=0;//接收从机号
if(SBUF!=number){p35=1;SBUF=0x80;while(TI==0);TI=0;//从机号不一致,重发
delay();TB8=1;goto a1;}
p35=1;SBUF=0X00;while(TI==0);TI=0;//发正确信号
delay();
do{p35=1;SBUF=comand;while(TI==0);TI=0;//发送命令
delay();
p35=1;SBUF=comand;while(TI==0);TI=0;//发校验命令
p35=0;while(RI==0);RI=0;//接收从机应答
}while((SBUF&0X80)==0X80);
switch (comand){
case 0x03:read();break;
case 0x04:closed();break;
case 0x05:open();break;
default:;
}
SM2=1;TB8=1;p35=1;
}
//read函数
void read()
{uchar result;
a2:p35=0;while(RI==0);RI=0;result=SBUF;//接收从机数据
p35=0;while(RI==0);RI=0;//二次接收
if(SBUF!=result){p35=1;SBUF=0x80;while(TI==0);TI=0;goto a2;}//两次接收不相同,重新接受
p35=1;SBUF=0x00;while(TI==0);TI=0;//两次接收相同,发送0x00;结束
P2=result;
}
//closed函数
void closed()
{P2=0xf0;}//
//open函数
void open()
{P2=0x0f;}
void delay()
{uchar i;
for(i=5;i>0;i--);
}
//
void wai() interrupt 0
{
++cort;
P2=cort;
if(cort>=0x06)cort=0x03;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -