51单片机点亮LED点阵

发布者:BlossomBeauty最新更新时间:2020-03-15 来源: eefocus关键字:51单片机  点亮  LED点阵 手机看文章 扫描二维码
随时随地手机看文章

共阴极双色点阵

Led点阵就是很多led放在一起组成的矩阵灯。原理很简单,如果我们要点亮图中左上的绿灯。那么管脚5接高电平,管脚24接低电平,那么这个绿色led就会亮,其他的led亦是如此。我们要显示需要的内容,只要点亮相关内容即可。如:我们显示如图的“+”,和“-”。


红色“+”:将管脚18,17,16 设置成高电平,同时对应21,22,23 设置成低电平。


注意:管脚18为高时,只能22管脚为低, 17管脚为高时,22,23,24同时为低,16管脚为高时,智能22管脚为低。 就是说同一时刻只有这三种情况之一出现,换言之就是通过扫描实现显示”+”.


具体过程:


1.显示第一步:,其他全灭 。一个短延时,保持标号1 这部分亮


2.显示第二步:,其他全灭。 一个短延时,保持标号2 这部分亮


3.显示第三步:,其他全灭。  一个短延时,保持标号3 这部分亮


这个短的延时时间很短,那么给人的感觉就是1.2.3 这三部分全亮,共同组成个图案“+”。再点阵显示里,原理都是如此。


绿色”-”: 将管脚11,12,13设置成高电平,同时设置管脚3为电平


共阳极双色点阵点亮点阵和共阴极双色点阵基本类似,只是上述操作中需要将高电平的操作改成低电平,低电平操作改成高电平

实验板用的是共阴极双色点阵,开发板的点阵电路图如下:

将GR、RE、DP引脚与单片机的IO相连,然后写程序控制IO口,就可以控制点阵的点亮形式。

P0口与J12口要反插、P1口与J19口反插、P2口与J20口正插,如果排线插反了,则点阵点亮的位置就会和程序里设置的相反。


程序一:点亮led点阵的一个点,然后交替点亮红色、绿色


程序源代码:


#include "reg52.h"


void delay1s(x)

   {

    int i=0;

int j=0;

for(;i < x*14665; i++)

   for(;j < 10000; j++)

   ;

   }

 

   void main()

   {

 

   while(1)

   {

   P2 = 0x7f; //点亮一个红色点,相应的位置低电平

 

   P1 = 0xff; //熄灭全部绿色点,全部位都置高电平

 

   P0 = 0x80; //共阳极的相应位置高电平

 

   delay1s(1); //延时1秒钟

 

   P2 = 0xff; //熄灭全部红色点,全部位都置高电平

 

   P1 = 0x7f; //点亮一个绿色点,相应的位置低电平

 

   P0 = 0x80; //共阳极的相应位置高电平

 

   delay1s(1); //延时1秒钟

   }

   }

程序运行结果:

程序二:轮流显示0--9


程序源代码:


   #include "reg52.h"

 

   char column[4] = {0xdf, 0xef, 0xf7, 0xfb}; //将想要点亮列的相应位置零

   char     line[10][4] = {0x38, 0x44, 0x44, 0x38,

                           0x24, 0x7c, 0x7c, 0x04,

   0x5c, 0x54, 0x54, 0x74,

   0x54, 0x54, 0x54, 0x7c,

   0x10, 0x30, 0x7c, 0x10,

   0x74, 0x54, 0x54, 0x5c,

   0x7c, 0x54, 0x54, 0x5c,

   0x40, 0x40, 0x40, 0x7c,

   0x7c, 0x54, 0x54, 0x7c,

   0x74, 0x54, 0x54, 0x7c

                           };  //数字0--9在点亮第1--第4列时,需要点亮相应行才能形成0--9

                               //的数字显示

 

   void delay(x)

   {

    int i;

for(;i < x*10; i ++)

;

   }

 

   void delay1s(x)

   {

    int i=0;

int j=0;

for(;i < x*14665; i++)

   for(;j < 10000; j++)

   ;

   }

 

   void display(x)

   {

    int i,j;

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

   {

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

   {

   P2 = column[j];//4行、4列的方阵,循环点亮1--4列

 

   P0 = line[x][j];//4行、4列的方阵,循环点亮当前列的当前行

 

   delay(1);//延时28.5 us

 

   //消影

   P0 = 0x00;

 

   delay(1);//延时28.5 us

 

   }

   }

  }


   void main()

   {

   while(1)

   {

    int i;

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

{

display(i);//显示0--9

delay1s(0.5);//延时0.5秒钟

}

 

   }

  

   }


程序运行结果:

 

 

 

 

 

 

 

 

关键字:51单片机  点亮  LED点阵 引用地址:51单片机点亮LED点阵

上一篇:51单片机【三】静态与动态驱动数码管
下一篇:8x8LED点阵显示数字和汉字

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved