×
单片机 > 单片机程序设计 > 详情

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

发布时间:2024-06-17 发布时间:
|

我用的是普众科技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(); }


}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR M16实验之六 DS18B20测温