51单片机的共阴数码管怎么显示数字(c语言)

2024-10-28 11:37:37
推荐回答(4个)
回答(1):

要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。

以显示数字“0”为例,c语言程序如下:

#include

#define uchar unsigned char

#define uint unsigned int

//数码管的段码编码

Uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

 void main(){//主函数

P0 = table[0];//显示0,大家可以修改里面的数据。

while(1);//程序不再执行其他步骤;

}

扩展资料:

数字0-9的对应段码:

数字0      0x3f

数字1      0x06

数字2      0x5b

数字3      0x4f

数字4      0x66

数字5      0x6d

数字6      0x7d

数字7      0x07

数字8      0x7f

数字9      0x6f

回答(2):

共阴极数码管也就是说,当控制信号为1时该段LED点亮,8段数码管的数字0~9定义为:

3FH,06H,5BH,4FH,66H ;01234

6DH,7DH,07H,7FH,6fh ;56789

以下为简易8路抢答器的例程:

#include

#define uchar unsigned char

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};

sbit rstkey=P2^2;

sbit speaker=P2^0;

void delay()//延时约400毫秒

{

uchar i,j;

for(i=0;i<200;i++)

for(j=0;j<250;j++);

}

main()

{

uchar i,key;

P2=0xff;

while(1)

{

i=0;

P1=table[i];

while(1)

{

key=P3;

if(key!=0)break;

}

switch(key)

{

case 0x01:i=1;break;

case 0x02:i=2;break;

case 0x04:i=3;break;

case 0x08:i=4;break;

case 0x10:i=5;break;

case 0x20:i=6;break;

case 0x40:i=7;break;

case 0x80:i=8;break;

default:break;

}

P1=table[i];//显示按下抢答器的号

P0=key;//显示按下键号的LED

while(1)

{

if(rstkey==0)break;//主持人按下复位键则重新开始

speaker=~speaker;//否则蜂鸣器报警

delay();

}

}

}


回答(3):

不涉及动态显示,未用锁存器




#include 

#define _x10  (0xfe)

#define _x1   (0xfd)

unsigned char code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void main()

{

    void show(unsigned char duan,unsigned char wei);

    while(1)

    {

        show(0,_x1);

    }

}

void show(unsigned char duan,unsigned char wei)

{

    P2=wei;

    if(duan<10)

    {

        P0=Tab[duan];

    }

    else

    {

        ;

    }

}

回答(4):

你的L1/L2/L3都是什么啊?还有LatchDuan??我有做过类似的设计,需要可以互相交流一下!