[51单片机学习笔记FOUR]---16*16LED点阵

发布者:WanderlustGlow最新更新时间:2020-06-17 来源: eefocus关键字:51单片机  16*16  LED点阵 手机看文章 扫描二维码
随时随地手机看文章

一、LED点阵发光原理


8*8单色单片机结构图如下:

电路图中很简单的就可以看出来,想要点亮点阵中的某一个LED灯。只要使得那个灯所在的行输出高电平,所在列输出低电平就好。


二、点阵扫描实验


  1 /***********************************************

  2 实验名称:      点阵扫描

  3 实验说明:      扫描每个LED灯,检查点阵是否完好

  4 实验时间:      2014/12/24

  5 ***********************************************/

  6 #include

  7 #include

  8 

  9 #define uchar unsigned char

 10 #define uint  unsigned int

 11 

 12 sbit MOSIO = P3^4;//输入口

 13 sbit R_CLK = P3^5;//锁存器时钟

 14 sbit S_CLK = P3^6;//移位寄存器时钟

 15 

 16 //data3:右边半块列数据;data2:左边半块列数据

 17 //data1:下边半块行数据;data0:上边半块行数据

 18 void HC595Pro(uchar data3,uchar data2,uchar data1,uchar data0);

 19 

 20 void main()

 21 {

 22     uint i,j;

 23     uchar d;

 24 

 25     while(1)

 26     {

 27         //全亮

 28         HC595Pro(0x00,0x00,0xFF,0xFF);

 29         for(i=0;i<40000;i++);          //延时40ms  

 30             

 31         /*行扫描*/

 32         //上半块行扫描

 33         d = 0x01;

 34         for(i=0;i<8;i++)

 35         {

 36             HC595Pro(0x00,0x00,0x00,d);

 37             d <<= 1;

 38             for(j=0;j<20000;j++);               //延时20ms    

 39         }      

 40         //下半块行扫描

 41         d = 0x01;

 42         for(i=0;i<8;i++)

 43         {

 44             HC595Pro(0x00,0x00,d,0x00);

 45             d <<= 1;

 46             for(j=0;j<20000;j++);                 //延时20ms        

 47         }

 48 

 49         /*列扫描*/

 50         //左半快列扫描

 51         d = 0xFE;

 52         for(i=0;i<8;i++)

 53         {

 54             HC595Pro(0xFF,d,0xFF,0xFF);

 55             //如果还想用跟行扫描一样的形式,看main()最下面注释行

 56             d = _crol_(d,1);                   //循环左移

 57             for(j=0;j<20000;j++);              //延时20ms        

 58         }

 59         //右半块列扫描

 60         d = 0xFE;

 61         for(i=0;i<8;i++)

 62         {

 63             HC595Pro(d,0xFF,0xFF,0xFF);

 64             d = _crol_(d,1);

 65             for(j=0;j<20000;j++);               //延时20ms    

 66         }

 67         /******************************************************

 68         b1 = 0x01;

 69         for(i = 0; i<8; i++)

 70         {

 71             HC595Pro(0xFF, ~b1, 0xFF, 0xFF);

 72             b1 <<= 1;

 73             for(j=0; j<20000; j++);

 74         }

 75 

 76         b1 = 0x01;

 77         for(i = 0; i<8; i++)

 78         {

 79             HC595Pro(~b1, 0xFF, 0xFF, 0xFF);

 80             b1 <<= 1;

 81             for(j=0; j<20000; j++);

 82         }    

 83         ******************************************************/

 84     }

 85 }

 86 

 87 void HC595Pro(uchar data3,uchar data2,uchar data1,uchar data0)

 88 {

 89     uchar i;

 90     //先移入的会被后面移入的数据推移到后面的595中,所以需要先移入data3

 91     for(i=0;i<8;i++)

 92     {

 93         //先移入高位再移入低位,移位寄存器移入的第一位就是输出的最高位

 94         MOSIO = data3 >> 7;

 95         data3 <<= 1;

 96         S_CLK = 0;//给一个上升沿,移位

 97         S_CLK = 1;

 98     }    

 99     for(i=0;i<8;i++)

100     {

101         MOSIO = data2 >> 7;

102         data2 <<= 1;

103         S_CLK = 0;

104         S_CLK = 1;

105     }

106     for(i=0;i<8;i++)

107     {

108         MOSIO = data1 >> 7;

109         data1 <<= 1;

110         S_CLK = 0;

111         S_CLK = 1;

112     }

113     for(i=0;i<8;i++)

114     {

115         MOSIO = data0 >> 7;

116         data0 <<= 1;

117         S_CLK = 0;

118         S_CLK = 1;

119     }

120 

121     //上升沿时将移位寄存器数据移到锁存器中用于显示,平时保持低电平,数据不变

122     R_CLK = 0;

123     R_CLK = 1;

124     R_CLK = 0;

125 

126 }

这里我用到的是16*16的点阵。其实也就是4个8*8的小点阵组成起来的。其结构图如下:


1 2

3 4

这里只是简单示意一下。。。其中4个小块都是与一个相对应的74HC595相连。每个74HC595又是级联的,入口只有一个,我们需要输入相对应的行,列电平情况来控制LED灯的亮灭。


根据74HC595的结构可以知道,输入的数据是8位8位的输入的。最开始输入的8位数据会被后面的输入数据推移到第四个74HC595中。


所以实际输入时,是先输入2和4的列数据,再输入1和3的列数据,然后再是3和4的行数据,最后才是1和2的行数据。


三、16*16点阵倒计时


  1 /***********************************************************************

  2 实验名称:   16*16点阵数字倒计时

  3 实验时间:   2014/12/26

  4 ***********************************************************************/

  5 #include

  6 #include

  7 

  8 #define uchar unsigned char

  9 #define uint  unsigned int

 10 

 11 sbit MOSIO = P3^4;

 12 sbit R_CLK = P3^5;

 13 sbit S_CLK = P3^6;

 14 

 15 void HC595Pro(uchar data3,uchar data2,uchar data1,uchar data0);

 16 

 17 void main()

 18 {

 19     uint i,c;

 20     uchar j;

 21     i = 100;

 22 

 23     while(1)

 24     {

 25         //显示数字10

 26         for(c=i;c>0;c--)//延时

 27             for(j=0;j<16;j++)

 28             {

 29                 //字模取出来的数据是跟实际实际所需数据相反的,所以要取反。

 30                 //函数对应的参数分别表示列2,列1,行2,行1

 31                 HC595Pro(~tab1[2*j+1],~tab1[2*j],tab0[2*j],tab0[2*j+1]);

 32             }

 33         HC595Pro(0xFF,0xFF,0x00,0x00);//清屏

 34 

 35         //显示数字09

 36         for(c=i;c>0;c--)

 37             for(j=0;j<16;j++)

 38             {

 39                 HC595Pro(~tab2[2*j+1],~tab2[2*j],tab0[2*j],tab0[2*j+1]);

 40             }

 41         HC595Pro(0xFF,0xFF,0x00,0x00);//清屏

 42 

 43         //显示数字08

 44         for(c=i;c>0;c--)

 45             for(j=0;j<16;j++)

 46             {

 47                 HC595Pro(~tab3[2*j+1],~tab3[2*j],tab0[2*j],tab0[2*j+1]);

 48             }

 49         HC595Pro(0xFF,0xFF,0x00,0x00);//清屏

 50 

 51         //显示数字07

 52         for(c=i;c>0;c--)

 53             for(j=0;j<16;j++)

 54             {

 55                 HC595Pro(~tab4[2*j+1],~tab4[2*j],tab0[2*j],tab0[2*j+1]);

 56             }

 57         HC595Pro(0xFF,0xFF,0x00,0x00);//清屏

[1] [2] [3] [4]
关键字:51单片机  16*16  LED点阵 引用地址:[51单片机学习笔记FOUR]---16*16LED点阵

上一篇:C51单片机学习——8×8LED点阵屏学习笔记
下一篇:手把手教你学51单片机:变量进阶与点阵LED

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

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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