单片机学习小组
直播中

王银喜

7年用户 2397经验值
私信 关注

怎样使用单片机89C51的P0和P2口显示52H-1314呢

怎样使用单片机89C51的P0和P2口显示52H-1314呢?其实现过程是怎样的?

回帖(1)

h1654155275.5994

2022-2-23 14:14:52
目标


使用单片机89C51的P0和P2口显示“52H-1314”。

Proteus连线




过程

1、首先定义好数码管的字符码,我习惯采用共阳极的(使用共阴极的数码管直接取反就行了)

uchar code display[]={
        0x0C0,//"0"
        0x0F9,//"1"
        0x0A4,//"2"
        0x0B0,//"3"
        0x99, //"4"
        0x92, //"5"
        0x82, //"6"
        0x0F8,//"7"
        0x80, //"8"
        0x90, //"9"
        0x88, //"A"(10)
        0x83, //"b"(11)
        0x0C6,//"C"(12)
        0x0A1,//"d"(13)
        0x86, //"E"(14)
        0x8E, //"F"(15)
        0x90, //"G"(16)
        0x89, //"H"(17)
        0x8C, //"P"(18)
        0xA1, //"U"(19)
        0xBF//"-"  (20)
        };//共阴极

2、定义好要显示的字符码数组,然后就循循循循循循循环。

int main()
{
        uint shuma[8]={5,2,17,20,1,3,1,4};//"5,2,H,-,1,3,1,4"
        while(1)
        {
                xianshi(shuma);
        }
}

3、通过函数显示数码:

void xianshi(uint *shuma)
{
        uint i=0,p0=0xff,p2=0x01;
        for(i=0;i<8;i++)
        {
                P2=p2;//位选
                P0=display[shuma];//段选
                Delay(3);
                p2=_crol_(p2,1);//段选左移刷屏
        }
}

4、各位只需要在前面补充一个Delay()函数用来延时就可以啦,记得延时不要太久哦,否则容易出现数码管闪烁或者直接无法同时显示所有字符哦。
换个字符串的话比如像这样:

或者像这样:

还有这样:

以上都是因为延时时间过长导致的结果。

所以刷屏的频率一定要足够高,以确保我们的人眼无法捕捉到屏幕的刷屏过程,利用视觉停留作用,就可以让这些数字看起来同时停留在数码管上啦!

举报

更多回帖

发帖
×
20
完善资料,
赚取积分