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

博主借了STC8开发板,记录学习过程。先点亮基础的数码管,板子用两片595芯片控制8位阳码数码管,通过单片机P3.4、P3.5、P3.7的IO口驱动。了解595芯片串入并出工作方式后封装驱动函数,将扫描显示函数放循环中刷新,还提及显示多位数码管的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

数码管的电路图
从电路图可以看出我们用到了单片机的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 <STC8.H>
#include <Dig.h> //数码管显示的头文件
void init_guanjiao() // 配置引脚
{
	P3M0 = 0x00;
	P3M1 = 0x00;
}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值