美文网首页
单片机数码管显示函数

单片机数码管显示函数

作者: 星空无痕 | 来源:发表于2023-11-09 15:22 被阅读0次

    1. 使用子函数优化程序代码:

    原理:首先定义子函数,进行传参,Nixie第一个参数是地址(第几个数码管的位置,从左往右)(原理图上的LED0/1/2/3/4/5/6/7在51单片机上体现是从右往左的),第二个是数字(数码管上显示的数字大小);

    switch语句选择8个位置,每个位置上对应译码器的输出二进制数;切记用break截止,否则将连续执行;

    用数组定义:0-9的数字,也就是在数码管上显示出来的数字大小;a b c d e f g dp对应高电位亮,最后转成十六进制位输出;P0直接调用;

        #include <REGX52.H>

        #include <INTRINS.H>

        unsigned char NixieTable[]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

        void Nixie(unsigned char Location,Number)

        {

        switch(Location)

        {

        case 1:P2_4=1;P2_3=1;P2_2=1;break;

        case 2:P2_4=1;P2_3=1;P2_2=0;break;

        case 3:P2_4=1;P2_3=0;P2_2=1;break;

        case 4:P2_4=1;P2_3=0;P2_2=0;break;

        case 5:P2_4=0;P2_3=1;P2_2=1;break;

        case 6:P2_4=0;P2_3=1;P2_2=0;break;

        case 7:P2_4=0;P2_3=0;P2_2=1;break;

        case 8:P2_4=0;P2_3=0;P2_2=0;break;

        }

        P0=NixieTable[Number];

        }

        void main()

        {

        Nixie(4,1);

        while(1)

        {

        }

        }

    2.动态数码管显示:

    动态数码管的显示为:使用循环while()让第一个位置显示1,第二个位置显示2;以此类推;

    其中如果延迟函数Delay的延迟时间过短,可能会出现消影的现象------循环太快可能导致的数码管数字乱位的现象;

        #include <REGX52.H>

        #include <INTRINS.H>

        void Delay(unsigned int xms)

        {

        unsigned char i,j;

        while(xms)

        {

        i=2;

        j=239;

        do

        {

        while(--j);

        }

        while(--i);

        xms--;

        }

        }

        unsigned char NixieTable[]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

        void Nixie(unsigned char Location,Number)

        {

        switch(Location)

        {

        case 1:P2_4=1;P2_3=1;P2_2=1;break;

        case 2:P2_4=1;P2_3=1;P2_2=0;break;

        case 3:P2_4=1;P2_3=0;P2_2=1;break;

        case 4:P2_4=1;P2_3=0;P2_2=0;break;

        case 5:P2_4=0;P2_3=1;P2_2=1;break;

        case 6:P2_4=0;P2_3=1;P2_2=0;break;

        case 7:P2_4=0;P2_3=0;P2_2=1;break;

        case 8:P2_4=0;P2_3=0;P2_2=0;break;

        }

        P0=NixieTable[Number];

        // Delay(1);//消影,循环太快会使数码管乱位的现象

        // P0=0x00;

        }

        void main()

        {

        while(1)

        {

        Delay(200);

        Nixie(1 ,1);

        Delay(200);

        Nixie(2 ,2);

        Delay(200);

        Nixie(3 ,3);

        Delay(200);

        Nixie(4 ,4);

        Delay(200);

        Nixie(5 ,5);

        Delay(200);

        Nixie(6 ,6);

        Delay(200);

        Nixie(7 ,7);

        Delay(200);

        Nixie(8 ,8);

        Delay(200);

        }

        }

    相关文章

      网友评论

          本文标题:单片机数码管显示函数

          本文链接:https://www.haomeiwen.com/subject/nqicwdtx.html