(还在等待审核。。。)
//甲机通过串口控制乙机LED
//名称:甲机发送控制命令字符
//说明:甲单片机负责向外发送控制命令字符“A”“B”“C”,或者停止发送,乙机根据所接收到的字符完成LED1闪烁、LED2闪烁、双闪烁、或停止闪烁。
//发送:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k=P3^3;
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit A1=P1^0;
sbit A2=P1^1;
sbit A3=P1^2;
sbit A4=P1^3;
sbit A5=P1^4;
void delay(unsigned char z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void send(unsigned char c)
{
SBUF=c; //发送c
while(TI==0); //等待发送完毕
TI=0; //TI清零以便下次发送
}
void main()
{
uchar X=0;
TMOD=0X20; //T1工作模式2
SCON=0X40;// 0100 0000(SM0 SM1 SM2 REN TB8 RB8 TI RI) 串口模式1
//REN=0;SM0=0;SM1=1; // 0 1 0 0 0 0 0 0
TH1=0xfd; //12M 9600bps
TL1=0xfd;
TI=0;
TR1=1;
while(1)
{
if(k==0) //按下K时选择操作代码0,1,2,3
{
while(k==0);
X=(X+1)%4;
}
switch(X) //根据操作代码发送A/B/C或停止发送
{
case 0:
LED1=LED2=0;
break;
case 1:
send('A');
LED1=~LED1;
LED2=0;
break;
case 2:
send('B');
LED2=~LED2;
LED1=0;
break;
case 3:
send('C');
LED1=~LED1;
LED2=~LED2;
break;
}
delay(100);
}
}
///////////////////////////////////////////////////////////////////////////////
//接收 乙机根据所接收到的字符完成LED1闪烁、LED2闪烁、双闪烁、或停止闪烁。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k=P3^3;
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit A1=P1^0;
sbit A2=P1^1;
sbit A3=P1^2;
sbit A4=P1^3;
sbit A5=P1^4;
void delay(unsigned char z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void main()
{
TMOD=0X20; //T1工作模式2
SCON=0X50;// 0100 0000(SM0 SM1 SM2 REN TB8 RB8 TI RI) 串口模式1 允许接收REN=1
// 0 1 0 1 0 0 0 0
TH1=0xfd; //12M 9600bps
TL1=0xfd;
RI=0;
TR1=1;
A1=A2=A3=A4=A5=0;
LED1=LED2=0;
A5=1;
while(1)
{
if(RI) //如收到则LED闪烁
{
RI=0;
switch(SBUF) //根据所收到的不同命令字符完成不同动作
{
case 'A': LED1=~LED1;LED2=0;break; //LED1闪烁
case 'B': LED2=~LED2;LED1=0;break; //LED2闪烁
case 'C': LED1=~LED1;LED2=~LED2; //双闪烁
}
}
else LED1=LED2=0; //关闭LED
delay(100);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
楼上说的是正道。
我不是高手 1年前发的帖子被你翻出来了 啊 学单片机已经有1年多了 但是感觉还是一知半解
一周热门 更多>