找回密码
 立即注册
首页 业界区 安全 51单片机_数码管显示

51单片机_数码管显示

懵诬哇 3 天前
51单片机_数码管显示

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

2.png

数码管字符编码表(共阴/共阳对照)
字符共阴极段码(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口
3.png

4.png
  1. //这里结合两张图片一起介绍
  2. // P2_4 = 1;P2_3 = 1;P2_2 = 1;  控制LED8
  3. // P2_4 = 1;P2_3 = 1;P2_2 = 0;  控制LED7
  4. // P2_4 = 1;P2_3 = 0;P2_2 = 1;  控制LED6
  5. // P2_4 = 1;P2_3 = 0;P2_2 = 0;  控制LED5
  6. // P2_4 = 0;P2_3 = 1;P2_2 = 1;  控制LED4
  7. // P2_4 = 0;P2_3 = 1;P2_2 = 0;  控制LED3
  8. // P2_4 = 0;P2_3 = 0;P2_2 = 1;  控制LED2
  9. // P2_4 = 0;P2_3 = 0;P2_2 = 0;  控制LED1
复制代码
5.png

6.png

数码管静态显示
  1. #include <REGX52.H>
  2. void Delay(unsigned int xms);
  3. //数码管段码表
  4. unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  5. //数码管显示子函数
  6. void Nixie(unsigned char Location,Number)
  7. {
  8.         switch(Location)                //位码输出
  9.         {
  10.                 case 1:P2_4=1;P2_3=1;P2_2=1;break;
  11.                 case 2:P2_4=1;P2_3=1;P2_2=0;break;
  12.                 case 3:P2_4=1;P2_3=0;P2_2=1;break;
  13.                 case 4:P2_4=1;P2_3=0;P2_2=0;break;
  14.                 case 5:P2_4=0;P2_3=1;P2_2=1;break;
  15.                 case 6:P2_4=0;P2_3=1;P2_2=0;break;
  16.                 case 7:P2_4=0;P2_3=0;P2_2=1;break;
  17.                 case 8:P2_4=0;P2_3=0;P2_2=0;break;
  18.         }
  19.         P0=NixieTable[Number];        //段码输出
  20. }
  21. void main()
  22. {
  23.         Nixie(1,6);        //在数码管的第1位置显示6
  24.         while(1)
  25.         {
  26.                
  27.         }
  28. }
  29. // 延时1ms
  30. void Delay(unsigned int xms)                //@12.000MHz
  31. {
  32.         unsigned char i, j;
  33.         while(xms)
  34.         {
  35.                 i = 2;
  36.                 j = 239;
  37.                 do
  38.                 {
  39.                         while (--j);
  40.                 } while (--i);
  41.                 xms--;
  42.         }
  43. }
  44. // 现象:数码管的第1位置显示6
复制代码
让数码管数字动起来:0 ~ 9 循环显示
[code]#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 12_4=12_3=12_2=1;break;                case 22_4=12_3=12_2=0;break;                case 32_4=12_3=02_2=1;break;                case 42_4=12_3=02_2=0;break;                case 52_4=02_3=12_2=1;break;                case 62_4=0;P2_3=1;P2_2=0;break;                case 72_4=0;P2_3=0;P2_2=1;break;                case 82_4=0;P2_3=0;P2_2=0;break;        }        P0=NixieTable[Number];        //段码输出}void main() {        unsigned char i;                while(1)        {                for(i = 0; i

相关推荐

您需要登录后才可以回帖 登录 | 立即注册