蓝桥杯STC15单片机复习——数码管的使用

STC15F2K60S2单片机——数码管的使用

前言

下面进行数码管的使用复习
主要分为静态显示与动态显示
静态显示
当我们对数码管的显示需求仅为一位时,可以直接通过数码管的静态显示实现,即将对应的位选选通,随后直接向段选输入段码信号即可。
在这里插入图片描述
国信长天的板子的数码管模块的原理图如上图所示,该数码管为共阳数码管,其位选通过74LS138控制为Y6通道,即当P25 = 0;P26 = 1;P27 = 1;时,P0口为数码管位选;其段选为74LS138的Y7通道,即当P25 = 1;P26 = 1;P27 = 1;时,P0口为数码管段选。
1、数码管静态显示

#include <STC15F2K60S2.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

void ALL_Init();
void delay_ms(uint ms);

uchar SEG_num[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void main()
{
	ALL_Init();
	while(1)
	{
		P25 = 0;P26 = 1;P27 = 1;
		P0 = 0x01;
		P25 = 1;P26 = 1;P27 = 1;
		P0 = SEG_num[1];
		delay_ms(100);
	}
}

/*
	函数功能:毫秒级延时函数
	函数参数:时间,单位为ms
	函数返回值:void
*/
void delay_ms(uint ms)
{
	int i;
	for(;ms>0;ms--)
		for(i = 864;i>0;i--);
}

void ALL_Init()
{
	P25 = 1;P26 = 0;P27 = 1;
	P0 = 0x00;
	P25 = 0;P26 = 1;P27 = 1;
	P0 = 0x00;
	P25 = 0;P26 = 0;P27 = 1;
	P0 = 0xff;
}

2、动态显示
数码管的动态显示即利用了人眼的视觉暂留原理,通过数码管的高速刷新,让我们的肉眼看起来数码管各个位像是同时亮起的样子,但是要注意他们其实不是一起亮的,在任一时间点,是只有一位数码管被点亮的。

void main()
{
	ALL_Init();
	while(1)
	{
		SEG_show(1314);
//		P25 = 0;P26 = 1;P27 = 1;
//		P0 = 0x01;
//		P25 = 1;P26 = 1;P27 = 1;
//		P0 = SEG_num[1];
//		delay_ms(100);
	}
}

/*
	函数功能:数码管的动态显示
	函数参数:显示的数字,4位
	函数返回值:void
*/
void SEG_show(int num)
{
	//第一位,千位显示
	P25 = 0;P26 = 1;P27 = 1;P0 = 0x01;
	P25 = 1;P26 = 1;P27 = 1;
	P0 = SEG_num[num/1000];
	delay_ms(10);
	
	//第二位,百位显示
	P25 = 0;P26 = 1;P27 = 1;P0 = 0x02;
	P25 = 1;P26 = 1;P27 = 1;
	P0 = SEG_num[num/100%10];
	delay_ms(10);
	
	//第三位,十位显示
	P25 = 0;P26 = 1;P27 = 1;P0 = 0x04;
	P25 = 1;P26 = 1;P27 = 1;
	P0 = SEG_num[num/10%10];
	delay_ms(10);
	
	//第四位,个位显示
	P25 = 0;P26 = 1;P27 = 1;P0 = 0x08;
	P25 = 1;P26 = 1;P27 = 1;
	P0 = SEG_num[num%10];
	delay_ms(10);
	
	P25 = 0;P26 = 1;P27 = 1;P0 = 0x00;
}

结语

至此,完成了数码管的静态显示与动态显示,其实数码管的动态显示调节是个十分麻烦的问题,当主函数中处理的内容过多时,数码管刷新时间及显示效果调节将变成一个烦人的东西,不过这是后话,后面我们也可以通过定时器进行实现数码管动态显示,这样就不会受主函数其他程序执行的干扰了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值