51单片机实现8x8LED灯阵动态显示移动文字

 

我用的是普众科技51单片机,其他品牌的也行,只不过需要改下串口

话不多说,先上代码。

 

//test1.h

#include"reg51.h"
#include"intrins.h"

typedef unsigned  char  u8;
typedef unsigned  int u16;

sbit SRCLK=P3^6;
sbit RCLK =P3^5; 
sbit SER  =P3^4;  

void delay(u16  i);
void  DisPlay();

void Hc595SendByte(u8 dat);

void   moveP(); 

//hanshu.c

#include"test1.h"
u8  LedDuan[8]={0x55,0x7f,0x00,0x00,0x7f,0x55,0xd5,0x55};
u8  LedWei[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe} ;

void Hc595SendByte(u8 dat)
{
u16  a;
RCLK=0;
SRCLK=0;
for(a=0;a<8;a++)
{
SER=dat>> 7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}


void delay(u16  i){ while(i--);}

void  DisPlay()
{
u16  b,a;
P0=0x81;
  for(a=0;a<70;a++){           //这里的a是因为视觉暂留效应,循环时间长一些,可以使得亮度更亮。
for(b=0;b<8;b++)
{
P0=LedWei[b];                   //注意先把P0口赋值,在送段选,不然的话会出现“鬼影”
_nop_();
_nop_();        //这个数目没有要求
_nop_();
Hc595SendByte(LedDuan[b]);
_nop_();
_nop_();
_nop_();
_nop_();
Hc595SendByte(0x00);
} }   
}

void   moveP()
{   
u8  temp=0;
temp=LedDuan[0];
   LedDuan[0]=LedDuan[1];
   LedDuan[1]=LedDuan[2];
   LedDuan[2]=LedDuan[3];
   LedDuan[3]=LedDuan[4];                //移位,不知道为什么我用函数,也就是把第一个移到最后一位,实现不了,程序只移动一位。
   LedDuan[4]=LedDuan[5];
   LedDuan[5]=LedDuan[6];
   LedDuan[6]=LedDuan[7];

   LedDuan[7]=temp;     

}

test1.c

#include"test1.h"
void  main()
{
while(1)
{    DisPlay(); 
     moveP();  
 }

}

 

 

 

 

你可能感兴趣的:(51单片机实现8x8LED灯阵动态显示移动文字)