#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar code Table[]= { 0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,//0 0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,//1 0x00,0x7E,0x02,0x02,0x7E,0x40,0x40,0x7E,//2 0x00,0x7E,0x02,0x02,0x7E,0x02,0x02,0x7E,//3 0x00,0x48,0x48,0x48,0x7E,0x08,0x08,0x08,//4 0x00,0x7E,0x40,0x40,0x7E,0x02,0x02,0x7E,//5 0x00,0x7C,0x40,0x40,0x7C,0x44,0x44,0x7C,//6 0x00,0x7C,0x04,0x04,0x04,0x04,0x04,0x04,//7 0x00,0x7C,0x44,0x44,0x7C,0x44,0x44,0x7C,//8 0x00,0x7E,0x42,0x42,0x7E,0x02,0x02,0x7E,//9

}; uint r= 0; char offset = 0; uchar Current_Level = 1,Dest_Level=1,x=0,t =0;

void main() { P1 = 0x80; Current_Level = 1;//?1???? TMOD = 0x21; //T0????, T1???? TH0 = -4000/256;//4ms//?????8?? TL0 = -4000%256; TR0=1; SCON=0x50; //设置串口工作方式 TH1=0xFD;TL1=0xFD;//设置波特率为9600 TR1=1; //启动定时器1 IE = 0x92;//???????? EA =1; while(1); }

void Serial_Receive() interrupt 4 { //????? unsigned char val=0; val=SBUF; P2=val; if (Dest_Level == Current_Level && val != 0xff) { if (val ==0xfe)Dest_Level =5; if (val ==0xfd)Dest_Level =4; if (val ==0xfb)Dest_Level =3; if (val ==0xf7)Dest_Level =2; if (val ==0xef)Dest_Level =1; } RI = 0;//????????? }

void Led_Dispaly() interrupt 1 { uchar i; //??????,???????,??????? if (Dest_Level == Current_Level) { SBUF = 0xff; //串口发送结束标志 } TH0 = -4000/256;//4ms TL0 = -4000%256; P1 =crol(P1,1); i = Current_Level *8 + r + offset; P0 = ~Table[i];

//up
if (Current_Level < Dest_Level )
{
	if ( ++r ==8)
	{//?????8??
			r =0;
		if( ++x ==4)
		{//???x??????
			x = 0;
			if(++offset ==8)
			{
				offset = 0;
				Current_Level++;				
			}
			
		}
	}
	
}
//down
else if(Current_Level > Dest_Level )
{
	if ( ++r ==8)
	{//?????8??
		r =0;
		if( ++x ==4)
		{//???x??????
			x = 0;
			if(--offset == -8)
			{
				offset = 0;
				Current_Level--;				
			}
			
		}
	}
	
}
//????,?????????
else
{
	if ( ++r ==8) r =0;		
}

}'

优化说明:

  1. 标题: 使用更具体的描述性标题,例如 '51单片机串口通信实现LED显示控制'。2. 描述: 添加简要描述,介绍代码的功能,例如 '本代码使用51单片机实现串口通信,通过上位机控制LED显示不同的数字。'3. 关键字: 添加相关关键字,方便用户搜索,例如 '51单片机, 串口通信, LED显示, 代码优化'。4. 内容: - 将代码内的双引号替换为单引号。 - 添加一些解释性的注释,解释代码的功能和逻辑。 - 修改代码中一些不规范的地方,例如将串口初始化放到main函数中,并将判断Dest_Level和Current_Level是否相等的条件修改为val是否等于0xff。 - 在Led_Display中,将串口发送结束标志0xff发送给上位机。5. 代码格式: 使用适当的缩进和格式化,提高代码的可读性。

注意:

  • 以上仅是代码优化的一些建议,具体优化方法需要根据实际情况进行调整。- 为了使代码更易于理解,建议将注释用英文编写,并添加相应的代码块解释,例如:// Set the timer modeTMOD = 0x21; // T0 timer, T1 tim
51单片机串口通信实现LED显示控制

原文地址: http://www.cveoy.top/t/topic/la3r 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录