【51单片机】数码管显示

简介: 【51单片机】数码管显示

数码管

普中-2&普中-3&普中-4开发板原理图

两个四位共阴极数码管

68cefd9e913205083ed17e585e6b4ef7_743cca49ea6545f2b98eeb10cba395b7.png

74HC138译码器(三线控八线,节省单片机I/O口占用)

30d2b22e6223cadf0b1772ad3461c4f7_1491162325cc4a31a8a533ffdd5f201c.png

点亮一个数码管,只需给I/O口一个高电平,一个低电平,由于此单片机(型号:STC89C52RC)数码管是共阴极连接,我们只需给I/O口一个高电平(即给1),就可以点亮了

晶体管LED从左边到右边依次为LED8、LED7……LED1

138译码器P2_4、P2_3、P2_2由高位到低位,如下编码就是选中LED位置(段选)

8(111) 7(110) 6(101) 5(100) 4(011) 3(010) 2(001) 1(000)

1. switch (location) { //选中LED位置
2. 
3.    case 0:P2_4 = 1;P2_3 = 1;P2_2 = 1;break;//第一位数码管
4.    case 1:P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
5.    case 2:P2_4 = 1;P2_3 = 0;P2_2 = 1;break;
6.    case 3:P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
7.    case 4:P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
8.    case 5:P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
9.    case 6:P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
10.     case 7:P2_4 = 0;P2_3 = 0;P2_2 = 0;break;//第八位数码管
11.   }

为了在对应位置显示想要的数字和字母,我们要把数字字母写出来

先截取一位数码管原理图,相当于由八个发光二极管组成 ,对应的数字或字母,给 1 是亮

5b8e68e39d4b9fad3886479252492230_ce561d38d62c430892c932ddaf919f26.png

选中的顺序依次为dp.g.f.e.d.c.b.a

4e4d836608f324204cd1ee170813af29_00c2a49f11414426972a448a24c21712.png

总结一下:

992f864d9a536f80d0d338683a856c6e_e6ec0f9bc2b64f7e9c89c5218b4bbda3.png

1. //共阴极数码管段码表
2. char NixieTable[20]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
3.         //number    0    1    2    3    4    5    6    7    8    9    A    B    C   D    E    F
4.  // 空 0x00
5. 
6. 
7. //共阴极数码管段码或上一个0x80,就带小数点了( |0x80 )
8. 
9. //带小数点  共阴数码管段码
10. unsigned char code Pnumber[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1}; 
11.

数码管函数

1. void Delay(int xms) {  //@11.0592MHz
2.  unsigned char i, j;
3.  while (xms--) {
4.    i = 2;
5.    j = 199;
6.    do {
7.      while (--j);
8.    } while (--i);
9.  }
10. }
11. 
12. 
13. void Nixie(int location,int number)//(位置,数字)
14. {
15.   switch(location)//选中LED位置,位选
16.   {
17.     case 1:P2_4=1;P2_3=1;P2_2=1;break;
18.     case 2:P2_4=1;P2_3=1;P2_2=0;break;
19.     case 3:P2_4=1;P2_3=0;P2_2=1;break;
20.     case 4:P2_4=1;P2_3=0;P2_2=0;break;
21.     case 5:P2_4=0;P2_3=1;P2_2=1;break;
22.     case 6:P2_4=0;P2_3=1;P2_2=0;break;
23.     case 7:P2_4=0;P2_3=0;P2_2=1;break;
24.     case 8:P2_4=0;P2_3=0;P2_2=0;break;
25.   }
26.   P0=NixieTable[number];//数字
27.   Delay(1);P0=0x00;//消影清零
28. }

然后在while(1)里调用此函数即可

1. Nixie(1,1);
2. Nixie(2,0);
3. Nixie(3,2);
4. Nixie(4,4);
5. Nixie(5,1);
6. Nixie(6,0);
7. Nixie(7,2);
8. Nixie(8,4);

这样数码管上就会显示1024 1024,想要修改显示内容,自己修改即可了~


相关文章
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
1054 1
【期末不挂科-单片机考前速过系列P3】(第三章:13题MOV&MOVX&MOVC&数码管速过)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P3】(第三章:13题MOV&MOVX&MOVC&数码管速过)经典例题盘点(带图解析)
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
639 0
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
794 0
|
算法
51单片机不用定时器的数码管倒计时
51单片机不用定时器的数码管倒计时
290 0
5-1 51单片机数码管
5-1 51单片机数码管
152 1
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
|
芯片 数据格式
【51单片机】要实现动静态数码管,你首先需要知道这些【数码管项目前置知识】
【51单片机】要实现动静态数码管,你首先需要知道这些【数码管项目前置知识】