C51单片机串口调试助手控制心形灯

实验内容

在pc端的串口调试助手中发送1,LED全亮;发送2,LED全闪烁;发送3,LED1~LED17流水;发送4,LED17-LED1流水。

思路分析

需要用到中断服务函数,检测发送过来的是什么
如果要实现在pc的串口调试助手发送一个字符,在pc端可以显示相应的字符:
大致过程就是先将单片机中SBUF的值取出到receiveData,表示数据已经被接收,然后清除接收中断标志位(需要手动清0)。

再将取到的数据送入SBUF发送出去,等到数据发送完成,清除发送完成标志位。

如果不需要在pc端显示的话,就不用再将数据发送回去。直接先手动清0,取出SBUF中的数据即可。

代码实现

#include<reg52.h>
#include<intrins.h>
unsigned char receiveData;
unsigned char a;
unsigned char b;
sbit led17=P3^6;

void UsartInit();

void Delay(unsigned int x);
void Full();//全亮
void Null();//全灭
void dispa();
void dispb();


void main()
{
	UsartInit();
		
		while(1)
			{
			
			switch(receiveData)
			{
				case '1':
					Full();
					break;
				case '2':
					Null();
					break;
				case '3':
					a=0x7f;
		 			b=0xfe;
					dispa();
					break;
				case '4':
					a=0x7f;
					b=0xfe;
					dispb();
					break;
				default:
					break;
			}
		}
}

void UsartInit()
{
	SCON=0X50;
	TMOD=0X20;
	PCON=0X80;
	TH1=0XF4;
	TL1=0XF4;
	ES=1;
	EA=1;
	TR1=1;
}


void  Usart() interrupt 4
{
	RI=0;//手动清零
	receiveData=SBUF; 
}


void Delay(unsigned int x)
{
	unsigned int j;
	for(;x>0;x--){
		for(j=110;j>0;j--);
		}
}
//全亮
void Full()
{
	P0=0x00;
	P2=0x00;
	led17=0;
}
//闪烁
void Null()
{
	//灭
	P0=0xff;
	P2=0xff;
	led17=1;
	Delay(1000);
	//亮
	P0=0x00;
	P2=0x00;
	led17=0;
	Delay(1000);
	//灭
	P0=0xff;
	P2=0xff;
	led17=1;
	//Delay(10000);
}
//顺时针流水
void dispa()
{
	
	unsigned int i=0;
		
		while(i<17)
		{
		//控制D1~D8的流水
		if(i<8&&i>=0)
		{
			P2=a;
			Delay(300);
			a=_cror_(a,1);
			
		}
		//D17
		if(i==8)
		{//i=0;
			P2=0xff;
			led17=0;
			Delay(300);
			led17=1;
		}
		//控制D16~D9的流水
		if(i>8)
		{
			P0=b;
			Delay(300);
			b=_crol_(b,1);
			if(i==16)
			{
				P0=0xff;
			}
		}
		i++;
		}
}

//逆时针流水
void dispb()
{
	unsigned int i=0;
	while(i<17)
	{	
		 //控制D9~D16的流水
		if(i<8&&i>=0)
		{
			P0=a;
			Delay(300);
			a=_cror_(a,1);
		}
		//D17
		 if(i==8)
		{
			P0=0xff;
			led17=0; 
			Delay(300);
			led17=1;
		}
		//控制D1~D8的流水
		if(i>8)
		{
			P2=b;
			Delay(300);
			b=_crol_(b,1);
			if(i==16)
			{
				P2=0xff;
			}
		}
		//D17
		i++;
	}
}

	

实验效果

发送1,灯全亮;
然后发送2,可以看到灯先灭后亮再灭,达到一个闪烁的效果;
发送3和4,分别进行相应的流水。

串口调试助手控制心形灯

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值