【ARM+51单片机开发板套件试用体验】 3、滚动显示的数码管

  • hehung
  • LV5工程师
  • |      2018-04-01 12:21:50
  • 浏览量 1250
  • 回复:0
本帖最后由 hehung 于 2018-4-1 12:21 编辑 上一次做了一个流水灯,现在还是从基础做起,做一个可以滚动显示的数码管。废话不多说,首先展示一下滚动显示的效果。 由于使用手机自带的gif拍摄的图片,只能拍摄很短的gif图片,所以就多放了几张。 我是向左滚动的滚动的时间大约500ms左右,随便写的,并不准确,会循环连续的滚动,图中不太容易看出效果。 好了,分享教程: 首先打开原理图,可以看到原理图中所有的数码管都是接在J16上的,而J16又是通过译码器连接到J6,单片机上的A,B,C引脚。所以通过A,B,C可以控制数码管得位选。 这里说一下我的数码管的链接引脚: A === P1.0 B === P1.1 C === P1.2 然后就是J12口是控制段选的,这个不用多做结束,链接的P0引脚。 然后就是编写程序。 程序是通过一小段的延时来达到连续显示的目的,只要显示的频率达到30HZ,基本上就可以看到是连续的了。
#include



#define uchar unsigned char

#define uint unsigned int

#define SMG P0                //定义数码管的段选端口



//下述的A,B,C的信号进过译码器解码后可以控制8个数码管的显示

sbit LA=P1^0;                

sbit LB=P1^1;

sbit LC=P1^2;



//下面的数组可以显示0-F

uchar code number={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};



//函数声明

void delay(int ms);

void change(int what);



//延时函数(短延时)

void delay(int ms)

{

        for(;ms>0;ms--);

}



//该函数可以选择某一个数码管显示

void change(int what)

{

        switch(what)

        {

                case 1:LC=0;LB=0;LA=0;break;

                case 2:LC=0;LB=0;LA=1;break;

                case 3:LC=0;LB=1;LA=0;break;

                case 4:LC=0;LB=1;LA=1;break;

                case 5:LC=1;LB=0;LA=0;break;

                case 6:LC=1;LB=0;LA=1;break;

                case 7:LC=1;LB=1;LA=0;break;

                case 8:LC=1;LB=1;LA=1;break;                

        }

}

                                        

int main()

{

        uchar i;

        uchar j=0;

        uint time=50;

        

        while(1)

        {

                for(;time>0;time--)

                {

                        for(i=1;i<=8;i++)

                        {

                                change(i);

                                SMG = number;                //使之可以滚动显示的处理        

                                delay(100);

                                SMG = 0;

                                delay(50);         //消除暗影

                        }                

                }

                time = 50;

                j++;

                if(j>17)

                        j = 0;

        }



}
上面的程序可以实现0-F的循环连续滚动显示,有兴趣的伙伴可以试一下。 附件:提供了程序的工程,可以直接下载尝试。 好了,今天的试用就到这里,期望大家支持:)
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子