懵诬哇 发表于 2026-1-7 20:10:00

51单片机_数码管显示

51单片机_数码管显示

在51单片机的应用中,数码管显示是一项基础且常见的功能。数码管能够显示数字和一些字符,通过内部的发光二极管(LED)来实现。根据公共端的不同,数码管分为共阳极和共阴极两种类型。在共阴极数码管中,所有LED的阴极连接在一起,而阳极则分别通过不同的引脚控制。要点亮特定的LED,只需在相应的阳极引脚上提供高电平信号。


数码管字符编码表(共阴/共阳对照)
字符共阴极段码(HEX)共阳极段码(HEX)说明二进制显示(abcdefg dp)数字00x3F0xC0数字00011 1111 / 1100 000010x060xF9数字10000 0110 / 1111 100120x5B0xA4数字20101 1011 / 1010 010030x4F0xB0数字30100 1111 / 1011 000040x660x99数字40110 0110 / 1001 100150x6D0x92数字50110 1101 / 1001 001060x7D0x82数字60111 1101 / 1000 001070x070xF8数字70000 0111 / 1111 100080x7F0x80数字80111 1111 / 1000 000090x6F0x90数字90110 1111 / 1001 0000大写字母A0x770x88字母A0111 0111 / 1000 1000C0x390xC6字母C0011 1001 / 1100 0110E0x790x86字母E0111 1001 / 1000 0110F0x710x8E字母F0111 0001 / 1000 1110G0x3D0xC2字母G0011 1101 / 1100 0010H0x760x89字母H0111 0110 / 1000 1001I0x060xF9字母I0000 0110 / 1111 1001J0x1E0xE1字母J0001 1110 / 1110 0001L0x380xC7字母L0011 1000 / 1100 0111O0x3F0xC0字母O0011 1111 / 1100 0000P0x730x8C字母P0111 0011 / 1000 1100S0x6D0x92字母S0110 1101 / 1001 0010U0x3E0xC1字母U0011 1110 / 1100 0001Y0x660x99字母Y0110 0110 / 1001 1001小写字母b0x7C0x83小写b0111 1100 / 1000 0011c0x580xA7小写c0101 1000 / 1010 0111d0x5E0xA1小写d0101 1110 / 1010 0001h0x740x8B小写h0111 0100 / 1000 1011n0x540xAB小写n0101 0100 / 1010 1011o0x5C0xA3小写o0101 1100 / 1010 0011r0x500xAF小写r0101 0000 / 1010 1111t0x780x87小写t0111 1000 / 1000 0111u0x1C0xE3小写u0001 1100 / 1110 0011y0x6E0x91小写y0110 1110 / 1001 0001特殊字符-0x400xBF减号/负号0100 0000 / 1011 1111.0x800x7F小数点1000 0000 / 0111 1111_0x080xF7下划线0000 1000 / 1111 0111=0x480xB7等号0100 1000 / 1011 0111空格0x000xFF全灭0000 0000 / 1111 1111全亮0xFF0x00所有段亮1111 1111 / 0000 0000普中51开发板使用的是两个4位的共阴极数码管,详细介绍如下:
74HC138译码器简介
作用:节省单片机I/O口


//这里结合两张图片一起介绍
// P2_4 = 1;P2_3 = 1;P2_2 = 1;控制LED8
// P2_4 = 1;P2_3 = 1;P2_2 = 0;控制LED7
// P2_4 = 1;P2_3 = 0;P2_2 = 1;控制LED6
// P2_4 = 1;P2_3 = 0;P2_2 = 0;控制LED5
// P2_4 = 0;P2_3 = 1;P2_2 = 1;控制LED4
// P2_4 = 0;P2_3 = 1;P2_2 = 0;控制LED3
// P2_4 = 0;P2_3 = 0;P2_2 = 1;控制LED2
// P2_4 = 0;P2_3 = 0;P2_2 = 0;控制LED1

数码管静态显示

#include <REGX52.H>

void Delay(unsigned int xms);

//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//数码管显示子函数
void Nixie(unsigned char Location,Number)
{
        switch(Location)                //位码输出
        {
                case 1:P2_4=1;P2_3=1;P2_2=1;break;
                case 2:P2_4=1;P2_3=1;P2_2=0;break;
                case 3:P2_4=1;P2_3=0;P2_2=1;break;
                case 4:P2_4=1;P2_3=0;P2_2=0;break;
                case 5:P2_4=0;P2_3=1;P2_2=1;break;
                case 6:P2_4=0;P2_3=1;P2_2=0;break;
                case 7:P2_4=0;P2_3=0;P2_2=1;break;
                case 8:P2_4=0;P2_3=0;P2_2=0;break;
        }
        P0=NixieTable;        //段码输出
}

void main()
{
        Nixie(1,6);        //在数码管的第1位置显示6
        while(1)
        {
               
        }
}


// 延时1ms
void Delay(unsigned int xms)                //@12.000MHz
{
        unsigned char i, j;
        while(xms)
        {
                i = 2;
                j = 239;
                do
                {
                        while (--j);
                } while (--i);
                xms--;
        }
}
// 现象:数码管的第1位置显示6让数码管数字动起来:0 ~ 9 循环显示
#include void Delay(unsigned int xms);//数码管段码表unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示子函数void Nixie(unsigned char Location,Number){        switch(Location)                //位码输出        {                case 1:P2_4=1;P2_3=1;P2_2=1;break;                case 2:P2_4=1;P2_3=1;P2_2=0;break;                case 3:P2_4=1;P2_3=0;P2_2=1;break;                case 4:P2_4=1;P2_3=0;P2_2=0;break;                case 5:P2_4=0;P2_3=1;P2_2=1;break;                case 6:P2_4=0;P2_3=1;P2_2=0;break;                case 7:P2_4=0;P2_3=0;P2_2=1;break;                case 8:P2_4=0;P2_3=0;P2_2=0;break;        }        P0=NixieTable;        //段码输出}void main() {        unsigned char i;                while(1)        {                for(i = 0; i

背竽 发表于 2026-1-10 05:02:54

东西不错很实用谢谢分享

骆贵 发表于 2026-1-14 18:32:08

感谢发布原创作品,程序园因你更精彩

梦霉 发表于 2026-1-17 08:16:09

这个好,看起来很实用

佴莘莘 发表于 2026-1-17 22:01:47

感谢,下载保存了

圄旧剖 发表于 2026-1-20 02:34:06

前排留名,哈哈哈

尹疋 发表于 2026-1-21 21:49:59

分享、互助 让互联网精神温暖你我

醋辛 发表于 2026-1-22 07:38:29

谢谢楼主提供!

砂歹汤 发表于 2026-1-25 12:34:08

分享、互助 让互联网精神温暖你我

钦遭聘 发表于 2026-1-26 07:10:56

不错,里面软件多更新就更好了

沦嘻亟 发表于 2026-2-3 07:59:58

感谢分享,学习下。

郁兰娜 发表于 2026-2-4 09:52:20

前排留名,哈哈哈

魁睥 发表于 2026-2-5 04:24:55

用心讨论,共获提升!

荦绅诵 发表于 2026-2-5 10:00:41

很好很强大我过来先占个楼 待编辑

粹脍誊 发表于 2026-2-6 09:36:52

不错,里面软件多更新就更好了

蓬庄静 发表于 2026-2-6 09:49:55

用心讨论,共获提升!

蒙飘 发表于 2026-2-8 20:37:03

前排留名,哈哈哈

邹语彤 发表于 2026-2-10 06:51:48

感谢分享

峰襞副 发表于 2026-2-11 17:29:13

谢谢楼主提供!

处匈跑 发表于 2026-2-13 17:33:08

过来提前占个楼
页: [1] 2
查看完整版本: 51单片机_数码管显示