开发板上这个独立的数码管刚好接在单片机的P0引脚上。

对应关系:  P0.0 ->A  P0.1->B  P0.2->C  P0.3->D………

3.7.2 数码管介绍

LED数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。

LED数码管常用的段数一般为7段,有的另加一个小数点 。

LED数码管根据LED的接法不同,分为共阴和共阳两类 。

当前开发板使用的数码管是共阳极。

使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。

51单片机开发之静态数码管_java

图3-7-3

 

3.7.3 对共阳极数据管进行编码

P07 P06 P05 P04 P03 P02 P01 P00

dp | g | f | e | d | c | b | a

---------------------------------

0    1   0   0   0   0   0   0   0x40 | 0 

0    1   1   1   1   0   0   1   0x79 | 1

0    0   1   0   0   1   0   0   0x24 | 2

0    0   1   1   0   0   0   0   0x30 | 3

0    0   0   1   1   0   0   1   0x19 | 4

0    0   0   1   0   0   1   0   0x12 | 5

0    0   0   0   0   0   1   0   0x02 | 6

0    1   1   1   1   0   0   0   0x78 | 7

0    0   0   0   0   0   0   0   0x00 | 8

0    0    0   1   0    0   0    0   0x10 | 9

通过得到的编码,定义成数组,小数点是默认点亮。 数字0~9

 

  •  
code char led_buff[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

 

3.7.4 Keil 51中const与code关键字

Keil 51中,code修饰的变量放在ROM(Flash)中,而const修饰的变量为只读(不可修改),放在RAM中。在Keil MDK中,如进行STM32的开发,code修饰符无法使用,使用的话会报错,此时是用const,用const修饰的变量是存放在ROM中的。

3.7.5 示例代码

下面代码实现,按下矩阵键盘,在数码管上显示当前矩阵键盘按下的键值。

硬件平台说明CPU是STC90C516RD 、晶振频率12MHZ 、工作在12T模式下、一个机器周期为1us时间)

 

 

#include <reg51.h>//共阳极数码管编码,小数点默认点亮//数字0~9code u8 LED_Coding[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};/*静态数码管显示*/void LED_StaticDisplay(u8 val){    LED=LED_Coding[val]; //显示数字}int main(){    u8 key;     while(1)    {        key=Array_Scan(); //检测矩阵键盘键值        if(key)        {            if(key<=9)LED_StaticDisplay(key); //数码管的显示范围只能是0~9          }}}