STC8系列学习笔记(一) 数码管的驱动设计

STC8系列学习笔记(一) 数码管的驱动设计

暑假从实验室借了一块stc8的开发板,简单的记录下自己学习的过程。

我不知道咋分类的,因为我是物联网工程专业的,就分类到物联网把。

刚开始首先得要把最基础的数码管点亮吧,我们这块板子用的是两片595芯片控制8位阳码数码管显示,下图是具体的电路图。

STC8系列学习笔记(一) 数码管的驱动设计_第1张图片
从电路图可以看出我们用到了单片机的P3.4、P3.5、P3.7的IO口控制数码管的驱动,要想驱动数码管得先了解595芯片是怎样工作的,具体的得去看595芯片的数据手册,从数据手册我们可以看出,595芯片是串入并出的工作方式,我们一次让595芯片发送一比特数据,也就是8位,下面是驱动595芯片发送一比特数据的函数。

sbit SH_CP = P3^5;
sbit ST_CP = P3^4;
sbit DS    = P3^7;
void send_byte(unsigned char dat) 
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SH_CP = 0;
		DS = dat & 0x80;
		SH_CP = 1;
		dat <<= 1;	
	}
}

考虑到数码管的点亮在以后的项目中用的会很多,我们不如把它给封装起来,到时候用的时候,直接加个头文件进去,方便以后的移植。具体的实现过程就不演示了。
数码管一共8位,要每时每刻都在刷新数码管,我们可以把扫描数码管显示的函数放进while()循环中,让数码管不停的进行刷新,设置一个数据缓存区改变要显示的值。

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
	                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码管段选位
unsigned char code weixuan[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位选
unsigned char Digbuff[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //数据缓存区
void SetDigOData(unsigned char seat,unsigned char num)// 设置一位数码管显示
{
	if (seat > 7) 
		return;	
	if (num > 15) 
		num = 16;	
	Digbuff[seat] = table[num];
}
void DigDisplay()  // 数码管动态扫描
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		send_byte(weixuan[i]);
		send_byte(Digbuff[i]);
		ST_CP = 1;
		ST_CP = 0;
	}
}

我们这样就基本算完成了,那么要想显示两位数码管呢?
只需要调用显示一位数码管的函数就可以了,以此论推。

void SetDigTData(unsigned char seat,unsigned char num)// 设置两位数码管显示
{
	SetDigOData(seat,   num / 10);
	SetDigOData(seat+1, num % 10);
}

把以上的函数全部封装到一起,我们只需要在主函数中调用它就可以了。

#include 
#include  //数码管显示的头文件
void init_guanjiao() // 配置引脚
{
	P3M0 = 0x00;
	P3M1 = 0x00;
}

void main()
{
	init_guanjiao();
	SetDigOData(0,15);// 设置数码管显示
	SetDigTData(3,0);
	while(1)
	{
		DigDisplay(); // 数码管动态扫描
	}
}


点亮个数码管,我觉得是学习单片机的第一步,就跟学习C语言,刚开始要学习个
Hello Word! ,这是基础吧。

你可能感兴趣的:(STC8系列学习笔记(一) 数码管的驱动设计)