#include<reg51.h>
#include<string.h>
#define uchar unsigned char
sbit LED=P1^0
uchar buf[16],num
uchar strOpen="Open"
uchar strClose="Close"
void uart() interrupt 4
{
if(RI)
{
RI=0
buf[num]=SBUF
num++
}
if(TI)TI=0
}
void initbuf()
{
uchar i
for(i=0i<16i++)buf[i]=0x00
}
main()
{
TMOD=0x20
SCON=0x50
TH1=TL1=0xfd
TR1=1
ES=1
EA=1
initbuf()
while(1)
{
switch(num)
{
case 0:break
case 1:break
case 2:break
case 3:break
case 4:
if(strcmp(strOpen,buf)==0)LED=0
initbuf()
num=0
break
case 5:
if(strcmp(strClose,buf)==0)LED=1
initbuf()
num=0
break
default:num=0break
}
}
}
串口发来2字节的数据(一般还要加上校验),按16进制显示用4个数码管,10进制用5个数码管。如果是10进制,先转换成5个0-9的数(16进制转换成4个0-15的数),再分别按照数码管驱动对照表从控制口发出0-9(0-15)对应的驱动码就可以了。void Usart() interrupt 4{ static k
receivedata[k]=SBUF
RI=0
SBUF=receivedata[k]
while(!TI)
TI=0
k++
if(SBUF==0x21) { flag=1 k=0}
}
不能与函数output() 共用一个变量 i;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)