1.分类

数码管分 共阳数码管 和 共阴数码管。

数码管其实就是8个段的发光二极管,只点亮其中的几个段即可显示出数字或字母用来表达信息。

共阳数码管:把8段LED的正极并在一起作为公共端连接在5V上(共阳极),然后8个LED通过单片机的8个IO端口输出高低电平使其决定点亮哪几个段。原理跟第二章的8盏LED硬件连接一样。

共阴数码管的介绍参考《手把手教你学51单片机》文档5.3.1节即可,因为我们的开发板用的是共阳数码管,所以共阴数码管在这里就不讲解了。

 

2.硬件连接

我们先拿一个数码管进行简单讲解

数码管1

上图是开发板上6个数码管中最右端那个的硬件连接简化图,我们叫它数码管0以好区分。引脚1和6(也就是A A)做为所有内部LED的公共端,此时IO0输出低电平三极管导通,那么这个公共端就接上了5V,而通过P0的8个IO端口中哪几个IO端口输出0数码管中的哪几个段就被点亮。

 

3.代码分析

我们把第二章第4讲的代码复制过来,修改三八译码器的逻辑选择,使IO0输出为0,也就是P1.2输出0,P1.1输出0,P1.0输出0。但这样之前讲的8盏小灯就不能被点亮了,因为三八译码器一次只能使其中的IOx输出低电平,其他7个IO都输出高电平了。

如果我们要让数码管显示数字0,那么看到上图所示,只需a,b,c,d,e,f段的LED点亮,剩下g段和dp段不点亮即可。

对应的二进制值为 11000000,十六进制就为0xC0。把0xC0赋值给P0即可点亮最右端的数码管0显示数字0。

#include <reg52.h> 
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;

void main()
{   
    ADDR3 = 1;//使能三八译码器
    ENLED = 0;// 
  
    ADDR2 = 0;//*****************************************************************************
    ADDR1 = 0;//让三八译码器的IO0输出低电平。此时的小灯是不可能被点亮了,因为IO6输出高电平了
    ADDR0 = 0;//*****************************************************************************
  
    P0=0xC0;  //使最右端的数码管0显示数字0
    while (1);
}
点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)