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

#include<reg52.h>

sbit LED1=P1^1;

void main()
{
LED1=0;
//下面的代码:八位共阴数码管的第一位显示一个0
LatchWei=1;
L0=0;
L1=1;
L2=1;
L3=1;
L4=1;
L5=1;
L6=1;
L7=1;
LatchWei=0;
LatchDuan=1;
L0=1;
L1=1;
L2=1;
L3=1;
L4=1;
L5=1;
L6=0;
L7=0;
LatchDuan=0;

while(1)
{
}
}

按照以上的类似的代码,我想做到在 任意一位 显示任意一个数 ,能够实现吗?要怎么写?如果不能的话,又要怎么实现我的想法?

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

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

#include<reg52.h>

#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

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-29

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

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

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

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

#include<reg51.h>

#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();

}

}

}


第2个回答  推荐于2017-09-09

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




#include <reg51.h>

#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

    {

        ;

    }

}

追问

我是新手 没看太明白,能解释一下么,而且我下到单片机内数码管也没显示啥

追答

不给我实际的硬件连接,接口定义,怎么可能会有反应呢,这个代码只是个演示,只对应上面的那副图的连接

追问

本回答被提问者采纳
第3个回答  2013-03-05
你的L1/L2/L3都是什么啊?还有LatchDuan??我有做过类似的设计,需要可以互相交流一下!追问

是少了
sbit L0=P0^0;
sbit L1=P0^1;
sbit L2=P0^2;
sbit L3=P0^3;
sbit L4=P0^4;
sbit L5=P0^5;
sbit L6=P0^6;
sbit L7=P0^7;
sbit LatchWei=P2^1;
sbit LatchDuan=P2^0;

追答

有必要这么麻烦么、、、、、、、、、、、、、、、、、、、

相似回答