【51单片机入门】点亮数码管


前言

在嵌入式系统的世界中,单片机扮演着至关重要的角色。51单片机,作为最早的微控制器之一,至今仍被广泛应用在各种设备中。本文将介绍如何使用51单片机点亮数码管,这是每个学习单片机的初学者都必须掌握的基本技能。我们将通过实际的操作步骤,让你了解如何编程控制单片机,以驱动数码管显示数字或字符。


仿真图

搜索7seg即可,MPX+数字,其中数字为数码管的个数,CA为共阳,CC为共阴,我们这里使用共阳
在这里插入图片描述
电路图:
在这里插入图片描述

如何去绘制一个数字

下面就是单个数码管的图片,我们输入对应的高低电平给对应的led就可以点亮对应的led
在这里插入图片描述

在共阳数码管中,你需要输入0给led,即可点亮他
共阴就是反一下。

示例代码

选择某个数码管

共阳数码管当该引脚为高电平时,即选中了他,比如1输入高电平,就可以操作显示0这个数码管了
在这里插入图片描述

void Choose(unsigned char index)
{
    P1 = 0;
    P1 = (1 << index);
}

显示某个数字

unsigned char num[6] = {
  0xC0, // ?? 0
  0Xf9, // ?? 1
  0Xa4, // ?? 2
  0Xb0, // ?? 3
  0X99, // ?? 4
  0X92, // ?? 5
};

void show(unsigned char digit)
{
  P2 = num[digit]; // ????????????P2??
}

这段代码是用来驱动数码管显示数字的。首先,我们来看看这个数组num

unsigned char num[6] = {
  0xC0, // ?? 0
  0Xf9, // ?? 1
  0Xa4, // ?? 2
  0Xb0, // ?? 3
  0X99, // ?? 4
  0X92, // ?? 5
};

这个数组存储了6个16进制数,每个数对应一个数字(0到5)在数码管上的显示方式。这些数是通过设置数码管的各个段(一般为7段或8段)的亮灭来显示对应的数字。

然后,我们看看show函数:

void show(unsigned char digit)
{
  P2 = num[digit];
}

这个函数接收一个数字(0到5),然后将这个数字对应的数码管显示方式(也就是num数组中对应的那个数)赋值给P2。在这里,P2是一个端口,它连接着数码管。通过改变P2的值,我们就可以改变数码管的显示。

所以,这段代码之所以能点亮数码管,是因为它通过改变连接数码管的端口P2的值,来改变数码管的显示。

如果你想添加新的字符,可以看这张图,1为开,0为关,写出对应的二进制,然后转换为16进制,放到num中即可
在这里插入图片描述

示例代码

#include <regx52.h>

typedef unsigned char u8;

unsigned char num[10] = {
  0xC0, // ?? 0
  0Xf9, // ?? 1
  0Xa4, // ?? 2
  0Xb0, // ?? 3
  0X99, // ?? 4
  0X92, // ?? 5
};


void delay(unsigned int ms) {
    unsigned int i, j;
    for(i = ms; i > 0; i--)
        for(j = 120; j > 0; j--);
}

void Choose(unsigned char index)
{
    P1 = 0;
    P1 = (1 << index);
}

// ???????
void show(unsigned char digit)
{
  P2 = num[digit]; // ????????????P2??
}

char ix = 0;

void main()
{
	P0 = 0;
	Choose(1); // ????????
	show(1); // ????1
	
	
	while(1)
	{
		
		Choose(ix);
		show(ix);
		ix++;
		ix%=6;
		delay(10);
	}
}


总结

通过本文的学习,我们了解了如何使用51单片机来点亮数码管。这个过程虽然看似简单,但它涵盖了许多重要的概念,如I/O编程,寄存器操作,以及时序控制等。掌握了这些,你就已经迈出了成为一名嵌入式系统工程师的第一步。希望你能继续探索51单片机的更多功能,并将其应用到更复杂的项目中去。记住,每个伟大的发明都始于简单的想法,而最重要的是你已经开始了这个旅程。祝你学习愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

人才程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值