专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

51单片机点阵设计

作者:佚名   来源:本站原创   点击数:  更新时间:2013年01月18日   【字体:

在做点阵之前先来了解下点阵的原理和点阵显示的过程。
点阵实际上就是64个单独的led灯排列为8行8列
ROW1-8、COL1-8分别控制行和列的1-8led。ROWx高电平、COLy低电平,对应的第x行、第y列led灯亮。

电路图

简化了实际应用电路硬件根据要求自己加
P3口驱动ROW
P2口驱动COL

如何让点阵显示字符?点阵显示字符都是动态的,和多位的数码管一样,并不是一次就显示行或列,而是一次只显示1行,在很短的时间内将8行分别显示出来。由于时间很短,我们的眼睛是看不出来是分开显示的。以字符'1'为例。

分别显示8行
ROW-0x01  COL-0xef
ROW-0x02  COL-0xe7
ROW-0x04  COL-0xef
ROW-0x08  COL-0xef
ROW-0x10 COL-0xef
ROW-0x20  COL-0xef
ROW-0x40  COL-0xef
ROW-0x80  COL-0xc7

源程序:
 

#include <reg52.h>
unsigned char code NUM[8]={0xef,0xe7,0xef,0xef,0xef,0xef,0xef,0xc7};
#define ROW P3
#define COL P2
void main(void)
{
  unsigned char i,j,k;
  while(1)
  {
k=0x01;
     for(i=0;i<8;i++)
{
  COL=NUM[i];
  ROW=k<<i;
  for(j=0;j<8;j++);
  ROW=0x00;
}
  }
}

学会了8*8点阵的应用,就可以试着做16*16点阵了。16*16点阵就相当于4个8*8点阵拼起来。8*8点阵有8行8列,16*16点阵就是16行 16列,如果像上面一样就需要32个IO口驱动,虽说51单片机有32个IO口可是在实际应用中这32个IO口不能全部用来驱动点阵啊。这时候我们就需要用到另外两个芯片74HC595和74HC138
74HC595使用方法http://www.51hei.com/chip/1799.html
74HC138 是一个3到8的译码器,下表中列出了该器件的逻辑功能,从表中可以看出其输出为低电平有效,使能端G1为高电平有效,/G2,/G3为低电平有效,当其中一个为高电平,输出端全部为1!在中规模集成电路中译码器有几种型号,使用最广泛!

电路图

源程序
#include <reg52.h> 
#include <intrins.h>
unsigned char code NUM[8]={0x00,0x00,0xe00,0x82,0xff,0x80,0x00,0x00};
#define ROW P3
sbit SI=P2^0;
sbit RCK=P2^2;
sbit SCK=P2^1; 
void HC595SendData(unsigned char SendVal)
{  
  unsigned char i;
 
  for(i=0;i<8;i++) 
   {
if((SendVal<<i)&0x80) SI=1;
else SI=0;
 
SCK=0;
_nop_();
_nop_();
SCK=1;
   }
void HC595ShowData()
{
  RCK=0;
  _nop_();
  _nop_();
  RCK=1; 
}
 
void main(void)
{
  unsigned char i;
  while(1)
  {
     for(i=0;i<8;i++)
{
  HC595SendData(NUM[i]);
  ROW=0x00;
  HC595ShowData();
  ROW=i|0x80;
}
  }
}
关闭窗口

相关文章