没测试过不保证其正确性
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
void delay()
{
uint i;
for(i=0;i<20000;i++) {}
}
void UsartConfig()
{
//设置参数
TMOD = 0x20; //设定定时器1的工作方式为方式2
TH1 = 0xfd;
TL1 = 0xfd; //装载TH1、TL1
TR1 = 1; //启动定时器1
REN = 1; //允许串行接收位
SM0 = 0;
SM1 = 1; //设定串口工作方式为方式1
}
void left(){
uint a=0x01;
for(int i=0;i<8;i++)
{
if(a==0x00)a=0x01;
P2=~(a);
a=a<<1;
delay();
}
}
void right(){
uint b=0x80;
for(int i=0;i<8;i++)
{
if(b==0x00)b=0x80;
P2=~(b);
b=b>>1;
delay();
}
}
void main()
{
UsartConfig();
uchar temp=’R’; //初始化流水灯向右流动
while(1){
if(RI){
SBUF = temp;
temp = SBUF;
RI = 0;
}
if(temp == ‘R’)right();
if(temp == ‘L’)left();
if(temp == ‘S’);
}
}