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

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! ,这是基础吧。

STC8G1K是一种高性能的单片机芯片,它具有强大的处理能力和丰富的外设接口。在数码管驱动程序中,我们可以利用STC8G1K的GPIO(通用输入输出)口和定时器模块来实现数码管的控制。 首先,我们需要将选用的数码管连接到STC8G1K的GPIO口上。通常数码管的显示是通过七段数码管来实现的,每个段对应一个引脚。我们可以将七段数码管的共阳或共阴端连接到STC8G1K的相应引脚上。 然后,我们需要使用定时器模块来控制数码管的扫描。定时器模块可以用来生成精确的时间间隔,以控制数码管的刷新频率。我们可以通过设置定时器的工作模式、计数值和分频系数,来实现我们需要的刷新频率。 在程序中,我们可以使用循环遍历的方式依次点亮每一个数码管。我们可以定义一个数组,将数码管所需的段码按顺序存放在数组中。然后,通过循环控制每次只点亮一个数码管的相应段。 具体的程序流程如下: 1. 配置GPIO口的工作模式和电平方向,以控制数码管的引脚状态。 2. 配置定时器模块的工作模式、计数值和分频系数。 3. 在主循环中,使用循环遍历的方式依次点亮每一个数码管的相应段。 4. 每次点亮一个数码管的相应段后,等待一段时间,再熄灭该数码管的所有段。 总之,STC8G1K数码管驱动程序主要是利用GPIO口和定时器模块来实现数码管的控制。我们可以根据具体的需求,配置相应的GPIO引脚和定时器参数,通过循环遍历的方式点亮每一个数码管的段,从而实现数码管显示不同的数字或字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值