2018-05-17 8*8LED点阵显示

实验步骤

一、确定汉字点阵

二、编写代码

#include "reg51.h"//定义单片机的特殊寄存器#includetypedef unsigned int u16; //声明变量

typedef unsigned char u8;

sbit SRCLK=P3^6;      //移位时钟控制

sbit RCLK=P3^5;        //并行输出控制

sbit SER=P3^4;      //串行数据输入控制

u8 ledduan[]={0x22,0xb4,0x68,0x34,0x02,0x38,0x02,0xff};  //每一列的数值,改变数字使矩阵上的点位置发生改变以得到想要显示的汉字

u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe };  //每一行低电平有效

void delay(u16 i)

{

while(i--);

}    /*空循环实现延时,以毫秒为单位*/

void Hc595SendByte(u8 dat)  //向74HC595发送一个字节的数据

{

u8 a;

SRCLK=0;

RCLK=0;  //时钟控制和输出控制置零

for(a=0;a<8;a++)

{

SER=dat>>7; //把dat右移七位赋值给ser

dat<<=1;    //dat数值乘2

SRCLK=1;

_nop_();

_nop_();    //一个机器周期

SRCLK=0;   //时钟控制周期是两个机器周期,删掉几个或增加几个没有看出不同,可能是为了防抖和一定的反应时间

RCLK=1;

_nop_();

_nop_();

RCLK=0;    //输入控制周期为两个机器周期

}

void main()

{

u8 i;

while(1)

{

P0=0x7f;

for(i=0;i<8;i++)

{

P0=ledwei[i];   //位选

Hc595SendByte(ledduan[i]); //发送段选数据,显示每一列的灯泡

delay(10);   //延时,每一列进行显示,但是间隔短所以类似整体显示,间隔大的话(如10000)就不会出现字

Hc595SendByte(0x00);  //消隐

}

}

}

三、测试

四、注意事项

1、单片机JP595断开,JDE和GND链接

2、代码延时不宜超过200,越小越好。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容