蓝桥杯单片机串口-点亮数码管

串口传输数据的一种简单利用。其中涉及了数码管,选择器等常规外设。通过串口等配置,用电脑通过串口,向板子发送16进制的数据。在通过简单的计算把所要传输的数据显示出来。

通过这个例程还可以和更多的外设相连接。例如通过串口设置一个参考值。与AD/DA,超声波,温度传感器,PWM等等联系起来。只要知道,串口是如何传输,传输后的数据是什么格式的。简单的利用分析运算。就可以实现很多功能。

如下是自己的代码,用电脑传输两位的数据。可请大家批评指正:

#include <reg52.h>
#include <intrins.h>


//-------------系统定义----------------//
sfr AUXR = 0x8e;

typedef unsigned char u8;
typedef unsigned int u16;
u8 code SMG_duanma[18]=
{
	0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
	0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
	0xbf,0x7f
};
u8 yi,er,san,si,wu,liu,qi,ba;
u8 Rdat;



//--------------函数声明---------------//
void SelectHC573(u8 channel);     //HC573锁存器函数
void sys_init();                  //系统初始化函数(关闭LED,蜂鸣器等函数)

void Display_bit(u8 pos,u8 value);//单个数码管显示函数
void display_all();               //整体数码管显示函数
void delay(u16 t);                //一般延时函数
void sendbyte(u8 dat);            //串口发送函数
void uart_init();                 //串口初始化

//--------------延时函数----------------//
void delay(u16 t)
{
	while(t--);
}





//-------------系统初始化---------------//
void SelectHC573(u8 channel)
{
	switch(channel)
	{
		case 4:
			P2=P2&0x1f|0x80;
		break;
		case 5:
			P2=P2&0x1f|0xa0;
		break;
		case 6:
			P2=P2&0x1f|0xc0;
		break;
		case 7:
			P2=P2&0x1f|0xe0;
		break;
		case 0:
			P2=P2&0x1f|0x00;
		break;
	}
}

void sys_init()
{
	SelectHC573(4);
	P0=0xff;
	SelectHC573(0);
	SelectHC573(5);
	P0=0x00;
	SelectHC573(0);
	SelectHC573(7);
	P0=0xff;
	SelectHC573(0);
}


//--------------数码管--------------//
void Display_bit(u8 pos,u8 value)
{
	SelectHC573(6);
	P0=0x01 << pos;
	SelectHC573(0);
	SelectHC573(7);
	P0=value;
	SelectHC573(0);
}

void display_all()
{
	Display_bit(0,yi);
	delay(300);Display_bit(0,0xff);
	Display_bit(1,er);
	delay(300);Display_bit(1,0xff);
	Display_bit(2,san);
	delay(300);Display_bit(2,0xff);
	Display_bit(3,si);
	delay(300);Display_bit(3,0xff);
	
	Display_bit(4,wu);
	delay(300);Display_bit(4,0xff);
	Display_bit(5,liu);
	delay(300);Display_bit(5,0xff);
	Display_bit(6,qi);
	delay(300);Display_bit(6,0xff);
	Display_bit(7,ba);
	delay(300);Display_bit(7,0xff);
}

//------------串口通信模块函数--------------//
void uart_init()
{
	SCON = 0x50;
	AUXR &= 0xBF;
	AUXR &= 0xFE;
	TMOD &= 0x0F;
	TL1 = 0xE8;
	TH1 = 0xFF;
	
	EA = 1;
	ES = 1;
	ET1 = 0;
	TR1 = 1;
}

void sendbyte(u8 dat)
{
	SBUF = dat;
	while(TI == 0);
	TI=0;
}

void ServiceUart() interrupt 4      
{
	if(RI==1)
	{
		Rdat = SBUF;
		RI = 0;
		sendbyte(Rdat);
	}
}

//--------------主函数--------------//
void main()
{
	sys_init();
	uart_init();
	
	while(1)
	{
		yi=er=san=si=wu=liu=0xff;
		qi = SMG_duanma[Rdat/16];
		ba = SMG_duanma[Rdat%16];
		display_all();
	}
}

 如果还有任何不解的地方可以评论,私信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chen_kng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值