目录
一、引言
在学习和应用51单片机时,需要了解其基本原理和工作方式,掌握汇编语言或C语言编程技巧,熟悉51单片机的外设资源及其配置和控制方法。通过实践项目,如LED灯闪烁、温度测量、电机控制等,本文将实现数码管交替显示十六进制数。
二、数码管的介绍
LED数码管:LED数码管是一种常用的显示设备,它由多个发光二极管(LED)组成“8”字型的器件,用于显示数字、字母、符号等信息。
在共阳极数码管中,所有的LED的阳极(正极)连接在一起,而各个LED的阴极(负极)则分别接到控制芯片的输出引脚。通过控制芯片的输出电平,可以点亮或关闭相应的LED,从而显示所需的数字或字符。
在共阴极数码管中,所有的LED的阴极连接在一起,而各个LED的阳极则分别接到控制芯片的输出引脚。同样地,通过控制芯片的输出电平,可以实现相应的显示。
在使用LED数码管时,需要注意以下几点:
- 为了保护LED数码管,应控制电流在合适的范围内,避免过流过压。
- 使用合适的电流限流器,以防止LED数码管烧坏。
- 控制芯片的输出引脚要与数码管的引脚相匹配,确保正确连接。
- 根据需要编写程序或电路设计,控制LED数码管的显示内容和刷新频率。
三、设计
1.电路原理
首先要了解51单片机的原理,了解LED数码管的接口和工作原理。通常LED数码管由多个LED单元组成,每个单元可以显示一个数字、字母或符号。每个单元的LED引脚分别连接到51单片机的IO口,通过控制IO口的高低电平来控制LED的亮灭。
然后,在程序中使用相应的控制指令来控制51单片机的IO口。通过将IO口设置为输出模式,然后将相应的IO口输出高电平或低电平,即可控制相应的LED数码管单元亮灭。
74HC138译码器是一种常用的芯片,可用于将3位二进制输入转换成8位输出,可以通过三个控制器来实现自己想要点亮哪个数码管位置进而达到目标工程。
2.程序代码
①数组的定义
数组:把相同类型的一系列数据统一编制到某一组别中,可以通过数组名+索引号简单快捷的操作大量数据
②代码编写
首先,定义常量和变量,包括SEG_Code数组,用于存储数码管显示的编码;delay_xms函数,用于实现延时;以及i变量。
Ⅰ定义头文件及数据类型
Ⅱ定义数码管编码数组
这段代码使用了一个数组SEG_Code
来存储数码管显示的数字对应的编码。
Ⅲ设置延时函数
void delay_xms(uint xms);
Ⅳ编写主函数
在主函数main中,初始化了P0和P2寄存器,并进入一个无限循环。在循环中,先将P2寄存器清零,然后通过一个for循环遍历SEG_Code数组。在每次循环中,将SEG_Code数组中的元素赋值给P0寄存器,即将对应的数码管编码输出到数码管。
调用delay_xms函数实现延时,控制数码管的显示速度。
整体代码如下:
#define uchar unsigned char
uchar SEG_Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void delay_xms(uint xms);
void main (void)
{
uchar i;
P0 = 0x00;
P2 = 0xFF;
while(1)
{
P2 = 0x00;
for(i=0;i<17;i++)
{
P0 = SEG_Code[i];
delay_xms(150);
}
}
}
void delay_xms(uint xms)
{
uint i;
while(xms--)
{
for(i=0;i<234;i++);
}
}
3.实验效果
视频效果:数码管运行效果-CSDN直播
效果图如下
四、总结
学习51单片机是一项很有趣且富有挑战性的过程。通过学习51单片机,我深入了解了数字电路和嵌入式系统的原理和应用。这种单片机具有强大的控制和处理能力,可以应用于各种设备的控制和处理。学习51单片机是一项很有意义的过程。通过学习,我不仅提升了自己的技能和知识水平,还培养了动手实践和解决问题的能力。