文章目录
- 前言
- 仿真图
- 如何去绘制一个数字
- 示例代码
- 选择某个数码管
- 显示某个数字
- 示例代码
- 总结
前言
在嵌入式系统的世界中,单片机扮演着至关重要的角色。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单片机的更多功能,并将其应用到更复杂的项目中去。记住,每个伟大的发明都始于简单的想法,而最重要的是你已经开始了这个旅程。祝你学习愉快!