16×16LED点阵屏原理图及驱动程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

16×16LED点阵屏原理图及驱动程序

这是我玩LED点阵屏的第一块电路板,也是学习单片机入门的第一个实验器材。它由4片30mm×30mm的8×8红色高亮点阵模块与两片74HC595、两片74HC138、16只8550晶体管、一片74HC244集装在一块宽高65mm×210mm的双面PCB板上,它应该是一组级联安装的LED 屏的一个单元模块,拿到它时,我正在学习《无线电》杂志2007/11期刊上杜洋的一组文章,刚刚做好了ISP下载线,只做了“一个发光二极管的控制实验”,面对这个既好玩又陌生的玩意,真是无从下手,通过上网学习,解析研究,前后弄了两个多月,最后在《无线电》杂志2005/12期的配文程序的帮助下,终于踏进了点阵控制的门槛,两年过去了,我又玩了许多单片机控制器件,但这块屏却一直摆在我的桌案上,每当遇到难题时,看看它那稳定清晰的显示,我都能找到许多灵感;最近、在摆弄一块并行驱动的16×64点阵屏时(前几篇文章介绍了)时,因为用的还是这段程序,就又想起了它,虽然程序已经详解过了,但是,为了留记一段经历、一段回忆,决定还是“貂续狗尾”写在这里,留着自己欣赏吧。

一.原理图:

二.汉字左右移动驱动程序

/****************************************************************************** ********

16×16LED点阵屏原理图及C源汉字左右移动显示驱动程序————wannenggong

单片机:AT89S52

引脚说明:P0.0/P0.1/P0.2/P0.3控制由两片74HC138组成的行驱动控制4-16译码器的A/B/C/D端

P1.0/P1.1控制列驱动控制74HC595的OE/ST端,595的14脚(DS)经244连接RXD,595的12脚(SH)经244连接TXD。

******************************************************************************* ********/

#include

#define uchar unsigned char

#define uint unsigned int

#define K 5 //移动速度控制变量。

uchar col,disrow; //列移动计数变量。行扫描计数变量。

uint word,zishu; //字形码计数变量。

uchar code HZ[];

uchar BUFF[5]; //64列时应将数值设为11

void two_out(); //显示数据输出函数

void loadoneline_L(void); //取字码数据函数

//void loadoneline_R(void);

void sendoneline_L(void); //生成显示数据函数

//void sendoneline_R(void);

/********************************************************************

关于595第13脚的问题:原附图中13脚是接GND的,是电路板的原始设计,调试过程中将IC引脚与电路板隔离后经244引出做为OE引脚,其作用仅为配合延时适度的调整屏显亮度,若13脚接GND,则为全亮度显示,与其他控制并无干涉。

********************************************************************/

sbit OE=P1^0; //显示开关(595第13脚)。

sbit ST=P1^1; //锁存控制(595第11脚)。此处原错标为12脚,特此更正!

/****************************************************************************** *******/

void delay(uint p){

uint i,j;

for(i=0;i

for(j=0;j<5;j++)

{;}}

}

/****************************************************************************** ********

左移显示数据生成模块:(功能相当于有返回值的函数 )

******************************************************************************* ********/

uchar two_onebyteL(uchar h1,uchar h2)

{

uchar temp,tempcol; //输出变量;列移动位数变量。

if(col<8) tempcol=col;

else tempcol=col-8;

temp=(h1<>(8-tempcol)); //左移显示

temp=255-temp;

return temp; //将显示数据返回显示输出函数。

}

/**************************************************************************

右移显示数据生成模块:

***************************************************************************/ /*uchar two_onebyteR(uchar h1,uchar h2)

{

uchar temp,tempcol;

if(col<8) tempcol=col;

else tempcol=col-8;

temp=(h1>>tempcol)|(h2<<(8-tempcol)); //右移显示

temp=255-temp;

return temp;

}*/

/****************************************************************************** *******

左移待显示数据调取函数

******************************************************************************* ******/

void loadoneline_L(void)

{

char s; //此处不要用uchar定义s

for(s=0;s<2;s++) //s值为屏数加1(16*16为一屏)

{

BUFF[2*s]=HZ[word+32*s+2*disrow];

BUFF[2*s+1]=HZ[word+1+32*s+2*disrow]; //左移显示

}

}

/****************************************************************************** ******

右移待显示数据调取函数

******************************************************************************* ******/

/*void loadoneline_R(void)

{

char s; //此处不要用uchar定义s

for(s=0;s<2;s++)

{

BUFF[2*s+1]=HZ[word+32*s+2*disrow];

BUFF[2*s]=HZ[word+1+32*s+2*disrow]; //右移显示

}

相关文档
最新文档