LED点阵实验,显示点。
在了解1616的LED点阵之前,先了解下88的点阵。
8*8 点阵共由 64 个发光二极管组成,且每个发光二极管是放置在行线和列线 的交叉点上,当对应的某一行置 1 电平,某一列置 0 电平,则相应的二极管就亮; 如要将第一个点点亮,则 1 脚接高电平 a 脚接低电平,则第一个点就亮了;如果 要将第一行点亮,则第 1 脚要接高电平,而(a、b、c、d、e、f、g、h )这些 引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第 a 脚接低电平, 而(1、2、3、4、5、6、7、8)接高电平,那么第一列就会点亮。由此可见,LED 点阵的使用也是非常简单的。
总结:行列要想点亮,需要接低电平。列线要想点亮,需要接高电平。
而1616的点阵实验是由4个88的点阵组成的。在本次实验当中,如果要用单片机来控制点阵的输出的话,那IO口是肯定不够的。所以这里用了之前学到的74HC595芯片,并且是级联的4个74HC595芯片。
实验程序,点亮第一行第一列的发光二极管:
#include<reg52.h>
#include<intrins.h>
sbit RCK=P1^0; //移位寄存器
sbit SCK=P1^1; //数据寄存器,
sbit SER=P1^2;
typedef unsigned char u8;
typedef unsigned char u9;
void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
u8 i;
RCK=1;
SCK=1; //把串行数据放入寄存器当中
for(i=0;i<8;i++) //发送八位数
{
SER=dat1>>7; //从最高位开始发送
dat1<<=1;
SCK=0;
_nop_();
_nop_();
SCK=1; //标准的上升沿信号
}
for(i=0;i<8;i++)
{
SER=dat2>>7; //从最高位开始发送
dat2<<=1;
SCK=0;
_nop_();
_nop_();
SCK=1;
}
for(i=0;i<8;i++)
{
SER=dat3>>7; //从最高位开始发送
dat3<<=1;
SCK=0;
_nop_();
_nop_();
SCK=1;
}
for(i=0;i<8;i++)
{
SER=dat4>>7; //从最高位开始发送
dat4<<=1;
SCK=0;
_nop_();
_nop_();
SCK=1;
}
RCK=0;
_nop_();
_nop_();
RCK=