51单片机点阵设计
在做点阵之前先来了解下点阵的原理和点阵显示的
过程。
点阵实际上就是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 ;
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
电路图
源程序
#include ;
#include ;
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;
}
}
}。