点阵屏显示原理及实验详解.

点阵屏显示原理及实验详解.
点阵屏显示原理及实验详解.

标题:LED点阵屏学习攻略共享资料

LED点阵屏学习攻略

在经历了将近一个学期断断续续的点阵屏学习后,最后终于在AVR平台下完成了128*32点阵屏的无闪烁显示。现把整个学习过程总结如下:

无论是51单片机还是AVR单片机,点阵屏的显示原理是一样的,所以首先从51讲起。

说明:以下所有试验如无特殊说明均在Keil uVision3 + Proteus 6.9 SP5下仿真完成。

一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:

1.首先在Proteus下选择我们需要的元件,AT89C52、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE ,MATRIX-8*8-RED。

在这里请大家牢记:红色的为上列选下行选;其它颜色的为上行选下列选!而所有的点阵都是高电平选中列,低电平选中行!也就是说如果某一个点所处的行信号为低,列信号为高,则该点被点亮!此结论是我们编程的基础。

2.在选择完以上三个元件后,我们开始布线,具体如下图:

这里P2是列选,P3连接38译码器后作为行选。

选择38译码器的原因:38译码器每次可输出相应一个I/O口的低电平,正好

与点阵屏的低电平选中行相对,并且节省了I/O口,大大方便了我们的编程和以后的扩展。

3.下面让我们把它点亮,先看一个简单的程序:

(将奇数行偶数列的点点亮,效果如下图)

下面是源代码:

/************8*8LED点阵屏显示*****************/

#include

void delay(int z) //延时函数

{

int x,y;

for(x=0;x

for(y=0;y<110;y++);

}

void main()

{

while(1)

{

P3=0; //行选,选择第一行

P2=0x55; //列选,即该行显示的数据

delay(5); //延时

/*****下同*****/

P3=2; //第三行

P2=0x55;

delay(5);

P3=4; //第五行

P2=0x55;

delay(5);

P3=6; //第七行

P2=0x55;

delay(5);

}

}

上面的程序实现了将此8*8点阵的奇数行偶数列的点点亮的功能。重点让我们看while循环内,首先是行选P3=0,此时38译码器的输入端为000,则输出端为01111111,即B0端为低电平,此时选中了点阵屏的第一行,接着列选我们给P2口赋0x55,即01010101,此时又选中了偶数列,紧接着延时。然后分别对第三、五、七行进行相同的列选。这样就点亮了此点阵屏奇数行偶数列交叉的点。

完成这个程序,我们会发现其实点阵屏的原理是如此简单,和数码管的动态显

示非常相似,只不过换了一种方式而已。

4.完成了上面的点亮过程,下面我们让这个8*8的点阵屏显示一个汉字:“明”先看效果图:

源代码如下:

/************8*8LED点阵屏显示*****************/

#include

char code table[]={0x0f,0xe9,0xaf,0xe9,0xaf,0xa9,0xeb,0x11}; //"明" 字编码

void delay(int z) //延时函数

{

int x,y;

for(x=0;x

for(y=0;y<110;y++);

}

void main()

{

int num;

while(1) //循环显示

{

for(num=0;num<8;num++) //8行扫描P3行选,P2列选

{

P3=num; //行选

P2=table[num]; //列选

delay(5); //延时

}

}

}

因为要显示一个汉字,这里我们使用了一个数组table[ ]来存储该字的编码,重点还是来看while循环,首先在for循环内完成对8*8点阵屏的8行依次扫描。我们来分析第一行的情况即num=0的时候,首先P3=0,选中第一行,然后

P2=table[0],即P2等于table数组中第一个数据0x0f,则此时就点亮了第一行相应的点。接着延时,其他行同理。这样我们就完成了一个最简单汉字的显示。

(2)16*16点阵的显示原理

1.虽然完成了上面8*8点阵的显示,但是由于点的数量太少以至于它的显示效果并不是很理想,事实上现在大部分点阵的汉字都是16*16显示的,下面让我们来学习16*16点阵的显示。和上面一样我们先选择元件:AT89C52,

74LS138,,MATRIX-8*8-GREEN,因为要显示16*16的汉字,我们就不能再使用一个38译码器进行行选了,这里我们用两个38译码器组合成一个4选16的译码器(当然也可以使用74159)。而MATRIX-8*8-GREEN点阵需要4个。完成后如下图:

2.先来看看4选16的译码器是如何工作的,这里有4个输入端a、b、c、d,16个输出端H0~H15,如上图连线后即可完成类似于38译码器一样的工作。只不过扩展到了16行选。关于连线的原理这里不再赘述,只要明白38译码器的原理这个可以轻松理解。接着完成全部布线。如下图所示:

3.连好线后,P1作为行选,P2、P3一起作为列选。现在16*16的点阵被分成两块并不完整的部分,我们可以整体移动(包括点阵屏、连线以及连接点,)来方便我们观察显示的效果(最好同时去掉仿真中电平的指示灯)。接着我们来看一个程序,还是让此点阵屏显示一个汉字:“明”。

先看效果图:

源代码如下:

/************16*16LED点阵屏显示*****************/

#include

char code table[]={0x00,0x20,0x20,0x7F,0x7E,0x21,0x22,0x21,

0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,

0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,

0x80,0x20,0x80,0x20,0x40,0x28,0x20,0x10}; // “明”

void delay(int z)

{

int x,y;

for(x=0;x

for(y=0;y<110;y++);

}

void main()

{

int num;

while(1)

{

for(num=0;num<16;num++)

{

P1=num; //行选

P2=table[2*num]; //列选

P3=table[2*num+1]; //列选

delay(2);

}

}

}

4..先来看这次使用的table数组,因为是16*16的点阵,所以总共有32个数据,其中第1、2个数据用于第一行的显示,第2、3个数据用于第二行的显示,以此类推,总共16行。然后还是来看while循环内,同样for循环依次扫描16行,以第一行为例,即num=0时,首先P1=0,选中第一行,P2=table[0]、P3=table[1]送出列选数据,即第一行要显示的两个字节的数据。其他行同理。

这样很轻松的我们就完成了16*16点阵的显示。程序虽然完成了,但是回过头来看一看就会发现,我们在这里使用了P2与P3口一起来做列选,浪费了大量的I/O/资源,而且现在点阵屏的大小还只有16*16,如果想要扩展的更大,已经没有足够的I/O口可用了。所以一定要想出更好的办法进行列选。

5.为了解决上面提到的问题,我们来学习一个新的元件:74HC595。它实质上是一个串行移位寄存器,能够实现“串入并出”的功能,关于它的使用我们还是用上一个列子来讲解,先来看看它的实现,如图:

可以看到这里我们仅使用了三个I/O口就完成了列选数据的发送。主要来看74HC595是如何实现“串入并出”的,这里我们使用了两个595进行了级联,即第二个595的数据输入端连接了第一个595的级联输出口Q7’。也就是说,我们只需要从第一个595的输入端串行输入数据,便可以实现把数据送入第二个595的功能。而且595的数量可以进行无限的级联,而不管有多少个595,我们只需要一个数据输入端就可以,这样就大大节省了I/O资源。对于595的具体使用还是来看程序。

源代码如下:

/************16*16LED点阵屏显示*****************/

#include

sbit R="P2"^0; //数据输入端口

sbit CLK="P2"^1; // 时钟信号

sbit STB="P2"^2; // 锁存端

char code table[]={0x00,0x20,0x20,0x7F,0x7E,0x21,0x22,0x21,

0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,

0x22,0x21,0x22,0x3F,0x3E,0x21,0x22,0x21,

0x80,0x20,0x80,0x20,0x40,0x28,0x20,0x10}; // “明” void delay(int z)

{

int x,y;

for(x=0;x

for(y=0;y<110;y++);

}

void WriteByte(char dat) //写一个字节的数据

{

char i;

for(i=0;i<8;i++) //循环8次把编码传给锁存器

{

dat=dat>>1; //右移一位,取出该字节的最低位

R=CY; //将该字节的最低位传给R

CLK=0; //将数据移入595,上升沿

CLK=1;

}

}

void main()

{

int num;

while(1)

{

for(num=0;num<16;num++)

{

WriteByte(table[2*num]); //送出一个字节

WriteByte(table[2*num+1]);

P1=num; //行选

STB=1; //输出锁存器中的数据,下降沿

STB=0;

delay(2);

}

}

}

先来看不同之处,这里我们首先位定义了R、CLK、STB,分别对应于74HC595的DS、SH_CP、ST_CP用以实现串行数据输入、数据移位以及并行数据输出。然后来看WriteByte(char dat)函数,该函数实现了串行向595中输入一个字节数据的功能。来看for循环,首先dat=dat>>1,把要输入的数据右移一位,这样最低位便进入移位寄存器CY中,紧接着我们让R=CY,把该位传给595的输入端,CLK一个上升沿的跳变就实现了把该位数据移入595的功能。8次

循环便可以将一个字节的数据送出。重点还是看while循环内,同样也是16行的扫描,然后就是WriteByte(table[2*num])等同于上面的P2=table[2*num],WriteByte(table[2*num+1])等同于P3=table[2*num+1],完成列选,接着行选,然后有一个STB的下降沿的跳变,这个变化能够实现并行输出移位寄存器中的数据。这样就完成了整个过程。

(3)16*16点阵的移位控制

点阵的移位一般有上、下、左、右的移动,这里我们重点讲上移和左移,其它同理。

1. 点阵的上移:

点阵的上移相对来说很简单,看效果图如下:

源代码:(该程序实现了循环上移显示“邢台”)

/************16*16LED点阵屏显示*****************/

#include

sbit R="P2"^0; //数据输入端口

sbit CLK="P2"^1; // 时钟信号

sbit STB="P2"^2; // 锁存端

char code table[]={

/*-- 文字: 邢--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0xFE,0x3E,0x48,0x22,0x48,0x22,

0x48,0x12,0x48,0x12,0x48,0x0A,0xFF,0x13,

0x48,0x22,0x48,0x42,0x48,0x42,0x48,0x46,

0x44,0x2A,0x44,0x12,0x42,0x02,0x40,0x02,

/*-- 文字: 台--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x00,0x40,0x00,0x20,0x00,0x10,0x04,

0x08,0x08,0x04,0x10,0xFE,0x3F,0x00,0x20,

0x00,0x08,0xF8,0x1F,0x08,0x08,0x08,0x08,

0x08,0x08,0x08,0x08,0xF8,0x0F,0x08,0x08,

};

void delay(int z)

{

int x,y;

for(x=0;x

for(y=0;y<110;y++);

}

void WriteByte(char dat) //写一个字节的数据{

char i;

for(i=0;i<8;i++) //循环8次把编码传给锁存器{

dat=dat>>1; //右移一位,取出该字节的最低位

R=CY; //将该字节的最低位传给R

CLK=0; //将数据送出,上升沿

CLK=1;

}

}

void main()

{

int num,move,speed;

while(1)

{

if(++speed>8) //移动速度控制

{

speed=0;

move++; //移位

if(move>16) //是否完成移位一个汉字

move=0; //从头开始

}

for(num=0;num<16;num++)

{

WriteByte(table[2*num+move*2]); //送出一个字节

WriteByte(table[2*num+1+move*2]);

P1=num; //行选

STB=1; //输出锁存器中的数据,下降沿

STB=0;

delay(2);

}

}

}

可以看到这个程序和静态显示的程序没有太大的差距,主要就是加入了一个move变量来控制移动,WriteByte(table[2*num+move*2])中当move变量变化的时候更改了写入595中的数据,正好实现了移动显示的效果。而speed变量的if判断语句能够控制移动速度的大小。下面重点讲左移。

2. 点阵的左移:

因为点阵的数据最终是一个一个字节的并行送出的,所以要实现点阵的左移,我们就需要考虑如何才能够动态的更改每一个发送字节的数据,而汉字的每一个字节的编码是固定的,这里我们可以使用一个数据缓冲区来完成点阵的左移。重点说一下点阵左移中关键的一步操作temp=(BUFF[s]>>tempyid) |

(BUFF[s+1]<<(8-tempyid))。这里temp作为要发送的一个字节数据,它由数据缓冲区中的数据组合而成,并且动态的变化,大致来说就是首先第一个字节的数据右移tempyid位,第二个字节的数据左移8-tempyid位,两者相或后组成一个字节新的数据,只要我们一直不断地移位、相或、发送,就能实现左移的

效果。不太好理解,先来看实例(循环左移显示“邢台学院”),效果图如下:见源代码:

#include

#define uchar unsigned char

#define uint unsigned int

uchar yid,h; //YID为移动计数器,H为行段计数器

uint zimuo; //字模计数器

uchar code hanzi[]; //汉字字模

uchar BUFF[4]; //缓存

void in_data(void); //调整数据

void rxd_data(void); //发送数据

void sbuf_out(); //16段扫描

uchar code table[]={//篇幅有限,省略编码};

void main(void)

{

uchar i,d=10;

yid=0;

zimuo=0;

while(1)

{

while(yid<16) //数据移位。

{

for(i=0;i

{

sbuf_out();

}

yid++; //移动一步

}

yid=0;

zimuo=zimuo+32; //后移一个字,

if(zimuo>=96) //到最后从头开始,有字数决定zimuo=0;

}

}

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

void sbuf_out()

{

for(h=0;h<16;h++) //16行扫描

{

in_data(); //调整数据

rxd_data(); //串口发送数据

P1=0x7f; //关闭显示。

P1_7=1; //锁存为高,595锁存信号

P1=h; //送行选

}

}

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

void in_data(void)

{

char s;

for(s=1;s>=0;s--) //h为向后先择字节计数器,zimuoo为向后选字计数器

{

BUFF[2*s+1]=table[zimuo+1+32*s+2*h]; //把第一个字模的第一个字节放入BUFF0

//中,第二个字模的第一个字节放入BUFF2中 BUFF[2*s]=table[zimuo+32*s+2*h]; // 把第一个字模的第二个字节放入BUFF1中,

//第二个字模的第二个字节放入BUFF3中}

}

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

void rxd_data(void) //串行发送数据

{

char s;

uchar inc,tempyid,temp;

if(yid<8)

inc=0;

else

inc=1;

for(s=0+inc;s<2+inc;s++) //发送2字节数据

{

if(yid<8)

tempyid=yid;

else

tempyid=yid-8;

temp=(BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid));//h1左移tempyid 位后和h2右移8-tempyid相或,取出移位后的数据

SBUF=temp;//把BUFF中的字节从大到小移位相或后发送输出。

while(!TI); //注:这里使用了串口,串口数据的发送为最低位在前。

TI=0; //等待发送中断

}

}

首先来看定义的数据缓冲区BUFF[ ],这里一开始将会存储第一个汉字与第二个汉字的第一行的编码,该缓冲区动态的存储点阵屏每一行要发送的数据,注意这里BUFF的大小为4个字节,比16*16点阵屏要显示的汉字多了一个汉字行的大小,这一点是必要的,这样我们才能实现利用该缓冲区进行左移控制,接着来看in_data(void)函数,利用该函数,我们实现了动态的修改缓冲区中的数据,这里不再详述过程,重点看程序的注释即可。然后看rxd_data(void)函数,该函数的作用正是利用串口串行发送数据,也就是上面提到的移位、相或然后发送,关于在移位过程中的具体实现细节以及如何协调的进行数据发送,首先来看inc变量,该变量决定了从BUFF缓冲区中的第一个还是第二个数据开始读取,当移位开始后,在移完一个字节的数据之前我们都从BUFF数据缓冲区中的第一个字节开始读取,当移完一个字节后,inc变成1,这时我们从BUFF数据缓冲区中的第二个字节开始读取,于此同时后一个字节总是在和前一个字节的数据进行移位相或,达到慢慢向前推进的效果,这里有一个临界点,就是当移位满16位后,即一个汉字移出点阵屏后,这时候我们就需要将数据缓冲区中的数据进行更新,即后移一个字,这时数据缓冲区中的数据就变成了第二个汉字和第三个汉字的第一行汉字的编码,以此类推。下面来看sbuf_out()函数,该函数实现了16行的扫描,最后来看while循环内,这时主函数内已经很简单了,首先在while(yid<16)内,有控制移动速度的for循环,即显示几次静态的画面移动一步,而zimuo变量为移位过程中汉字的选择变量,它每32位的变化,正好是一个16*16汉字的编码个数。这样就完成了整个点阵左移的控制(这里使用了串口实现点阵的左移,当然我们也可以不用串口,关于非串

LED点阵显示屏实验报告解析

16?16点阵LED电子显示屏的设计 摘要:文章介绍了基于单片机AT89C51的16?16点阵LED电子显示屏的设计。分别阐述了显示屏显示的基本原理,硬件设计、控制方法及其程序的实现。经过调试和分析,设计的结果能够实现对汉字的静态和动态显示,动态显示的内容有多种方式,同时又可通过上位机更新显示的内容。 关键字:AT89C51;16?16点阵;LED;显示屏 一绪论 LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的应用于公交汽车,码头,商店,学校和银行等公共场合的信息发布和广告宣传。LED显示屏经历了从单色,双色图文显示屏到现在的全彩色视频显示屏的发展过程,自20世纪八十年代开始,LED显示屏的应用领域已经遍布交通、电信、教育、证券、广告宣传等各方面。 1 LED点阵显示屏概述 LED点阵显示屏的构成型式有多种,其中典型的有两种。一种把所需展示的广告信息烧写固化到EPROM芯片内,能进行固定内容的多幅汉字显示,称为单显示型;另一种在机内设置了字库、程序库,具有程序编制能力,能进行内容可变的多幅汉字显示,称可编程序型。 目前,国内的LED点阵显示屏大部分是单显示型,其显示的内容相对较少,显示花样较单一。一般在产品出厂时,显示内容就已写入显示屏控制系统中的EPROM芯片内,当需要更换显示内容时就非常困难,这样使该类型的显示屏使用范围受到了限制。国内的另一种LED显示屏——可编程序型LED显示屏,虽然增加了显示屏系统的编程能力,显示内容和显示花样都有所增加,但也存在着更换显示内容不便的缺点。随着社会经济的迅速发展,如今的广告牌都存在着显示内容丰富、信息量大、信息更换速度快等特点。因此传统的LED显示屏控制系统已经越来越不能满足现代广告宣传业的需要。而利用PC机通信技术控制LED显示屏,则具有显示内容丰富,信息更换灵活等优点。 2 LED显示屏控制技术状况 显示屏的控制系统包括输入接口电路、信号控制、转换和数字化处理电路及输出接口电路等,涉及的具体技术很多,其关键技术包括串行传输与并行传输技术、动态扫描与静态锁存技术、自动检测及远程控制技术等。

12864点阵型液晶显示屏的基本原理与使用方法(很详细)

12864点阵型液晶显示屏的基本原理与使用方法(很详细) 点阵LCD的显示原理 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。 那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示: 图1“A”字模图 而中文的“你”在字模中的记载却如图2所示:

图2“你”字模图 12864点阵型LCD简介 12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字。 管脚号管脚名称LEVER管脚功能描述 1VSS0电源地 2VDD+5.0V电源电压 3V0-液晶显示器驱动电压 4D/I(RS)H/L D/I=“H”,表示DB7∽DB0为显示数据 D/I=“L”,表示DB7∽DB0为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0 R/W=“L”,E=“H→L”数据被写到IR或DR 6E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0 R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 7DB0H/L数据线 8DB1H/L数据线 9DB2H/L数据线 10DB3H/L数据线 11DB4H/L数据线 12DB5H/L数据线 13DB6H/L数据线 14DB7H/L数据线 15CS1H/L H:选择芯片(右半屏)信号 16CS2H/L H:选择芯片(左半屏)信号 17RET H/L复位信号,低电平复位

16×16点阵显示综合实验

《EDA技术综合设计》 课程设计报告 报告题目: 16×16点阵显示综合实验作者所在系部:电子工程系 作者所在专业: 作者所在班级: 作者姓名: 指导教师姓名: 完成时间:

内容摘要 编写16×16点阵字符发生器的程序,通过CLK信号控制它的行驱动信号和列选信号让其依次输出‘中’,‘国’,‘人’三个字,通过硬件实验观察其结果,对于其他的显示花样以及点亮方式,可以根据实际需要自行设计。 关键字:16×16点阵,CLK,显示花样

目录 一概述 (5) 二方案设计与论证 (5) 三程序清单 (5) 四器件编程与下载 (9) 五性能测试与分析 (10) 六实验设备 (10) 七心得体会 (10) 八参考文献 (11)

课程设计任务书

一、概述 在时钟信号的控制下,使16×16点阵管花样点亮,在EDA试验仪中,16×16点阵显示列的驱动已经做好,其列选信号为SELOUT[3..0],送到4线-16线译码电路,译码电路的输出通过8只75451(双2输入与门,OC门)驱动器驱动16×16点阵管的16条共阴极列线;所以在设计点阵控制接口时,其列选信号必须由SELOUT[3..0]输出去控制译码电路。对于信号的频率,采用与七段数码管的位选信号一样的处理方法,即扫描频率大于24Hz;通过CLK信号控制行驱动与列选信号使其动态依次显示”中国人“三个字。其中CLK为时钟输入端,DIN[3..0]为花样显示模式选择,doout[15..0]为行驱动信号输出;SELOUT[3..0]为列选信号输出,去驱动4-16译码电路产生16×16点阵管的列选信号。 二、方案设计与论证 该程序由三个进程信号组成,进程K1通过CLK信号控制扫描频率s以及计数信号q,进而由q的记述周期控制cp信号。进程k2由cp信号控制汉字的扫描周期s0,实现汉字的依次显示,进程k3由扫描信号s控制点阵的行驱动和列选信号,使其准确显示’中国人’三个字。用VHDL语言编写程序,经过上级调试与编译,并下载到硬件观察实验结果。 三、程序清单 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity A1 is

16×16点阵显示屏电路印制板图的设计

《基础强化训练》报告 题目:16×16点阵显示屏电路印制板图的设计专业班级: 学生姓名: 指导教师: 武汉理工大学信息工程学院 2010 年7 月13 日

基础强化训练任务书 学生姓名:专业班级: 指导教师:工作单位: 题目: 16×16点阵显示屏电路印制板图的设计 主要目的就是对学生进行基础课程、基本技能、基本动手能力的强化训练,提高学生的基础理论知 识、基本动手能力,提高人才培养的基本素质。 一、训练内容和要求 1、基础课程和基本技能强化训练 (1)设计一个16 ×16点阵显示屏电路; (2)对所设计电路的基本原理进行分析; 2、文献检索与利用、论文撰写规范强化训练 要求学生掌握基本的文献检索方法,科学查找和利用文献资料,同时要求学生获得正确地撰写论文的基本能力,其中包括基本格式、基本排版技巧和文献参考资料的写法、公式编排、图表规范制作、中英文摘要的写法等训练。 3、基本动手能力和知识应用能力强化训练 (1)学习PROTEL软件; (2)绘制电路的原理图和PCB版图,要求图纸绘制清晰、布线合理、符合绘图规范; 4、查阅至少5篇参考文献,按《武汉理工大学课程设计工作规范》要求撰写基础强化训练报告书,全文用A4纸打印。 二、初始条件 计算机;Microsoft Office Word 软件;PROTEL软件 三、时间安排 1、20010年7 月12日集中,作基础强化训练具体实施计划与报告格式要求的说明;学生查阅相关资料,学习电路的工作原理。 2、2010 年7 月12 日,电路设计与分析。 3、2010 年7 月13日至2010 年7 月15日,相关电路原理图和PCB版图的绘制。 4、2010年7 月16日上交基础强化训练成果及报告,进行答辩。 指导教师签名:年月日 系主任(或责任教师)签名:年月日

12864点阵液晶显示模块的原理

12864点阵液晶显示模块的原理 12864 点阵液晶显示模块的原理12864 点阵液晶显示模块(LCM)就是由128*64 个液晶显示点组成的一个128 列*64 行的阵列。每个显示点对应一位二 进制数,1 表示亮,0 表示灭。存储这些点阵信息的RAM 称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形 或汉字的点阵信息当然由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动 电路是由一片行驱动器和两片列驱动器构成,所以12864 液晶屏实际上是由左 右两块独立的64*64 液晶屏拼接而成,每半屏有一个512*8 bits 显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1 和CS2 选择。(少数厂 商为了简化用户设计,在模块中增加译码电路,使得128*64 液晶屏就是一个 整屏,只需一个片选信号。)显示点在64*64 液晶屏上的位置由行号 (line,0~63)与列号(column,0~63)确定。512*8 bits RAM 中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8 个液晶点的显示信息。为了使液晶点位置信息与存储地址的对应关系更直 观关,将64*64 液晶屏从上至下8 等分为8 个显示块,每块包括8 行*64 列个 点阵。每列中的8 行点阵信息构成一个8bits 二进制数,存储在一个存储单元 中。(需要注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同) 存放一个显示块的RAM 区称为存储页。即64*64 液晶屏的点阵信息存储在8 个存储页中,每页64 个字节,每个字节存储一列(8 行)点阵信息。因此存储单 元地址包括页地址(Xpage,0~7)和列地址(Yaddress,0~63)。例如点亮128*64 的屏中(20,30)位置上的液晶点,因列地址30 小于64,该点在左半屏第29 列,所以CS1 有效;行地址20 除以8 取整得2,取余得4,该点在RAM 中页

16乘16点阵显示实验报告剖析

实验报告 实验名称: [16×16点阵显示实验] 姓名: [] 学号: [201] 指导教师: [解*] 实验时间: [2013年4月25日] 信息与通信工程学院

16×16点阵显示实验 1实验要求 任务1:将所给程序改正使结果为正显示; 任务2:使显示四个字、八个字。 2实验原理 2.1 LED显示器结构和原理 1>8*8LED点阵的结构 图1 8*8LED点阵结构图 从图1中可以看出,8*8LED点阵共由64个发光二极管组成,每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1高电平,且某一列置0低电平,则相应的发光二极管就亮;因此要用8*8LED点阵来显示一个字符或汉字,只需要根据字符或汉字图形中的线条或笔画,通过点亮多个发光二极管来勾勒出字符或汉字的线条或笔画就行了。当要比较完美的显示一般的汉字,单个8*8LED点阵模块很难做到,因为LED的点数(也称为像素点)不够多,因此要显示汉字的话,需要多个8*8LED点阵拼合成一个显示屏。假如用4个8*8LED点阵模块拼成16*16的点阵,即能满足一般汉字的显示。但要显示信息量大的图形,则需要n个多个8*8LED点阵,拼装成一个大屏幕才行。

LED点阵显示器最大的特点是亮度高、功耗较低、寿命长、容易控制等,因此它的应用很广,常用在广场、车站、商业广告等室外的显示。 2>8*8LED点阵的封装和引脚规律 64个发光二极管按照行共阳、列共阴4个一组的方式封装成一个模块,这样8*8LED 点阵模块就有8行、8列共16个引脚。其实物图如图2,电路模块符号图如图3。 图2 8*8LED点阵实物图图3 8*8LED点阵符号图但8*8LED点阵的16个引脚并不是很有规律,千万不要想象成1~8个引脚是行,9~16个引脚是列。而且不同产品的点阵外部引脚排列规律还可能不一样。以下是NLB1388SRA 和LDM1388SRA两个型号点阵引脚对应行、列的关系表: 行号H0 H1 H2 H3 H4 H5 H6 H7 引脚号9 14 8 12 1 7 2 5 列号L0 L1 L2 L3 L4 L5 L6 L7 引脚号13 3 4 10 6 11 15 16 假如你买到一块新的8*8LED点阵,又没有关于它的相关资料,那你只有自己用万用表或通过VCC电源串接一个510欧姆的电阻来检测了。 2.2 LPM_ROM的应用 该模块为逻辑宏模块存储器。其应用过程如下。 1选择模块

EDA(LED点阵显示屏控制系统设计)

《EDA技术与应用》 课程设计报告 题目: LED点阵显示屏控制系统设计院(系):机电与自动化学院 专业班级:自动化 学生姓名: 学号: 2014 指导教师: 2017年6月 19日至2017年 6 月23 日 *******

《EDA技术及应用》课程设计任务书

摘要:我国经济正处于发展的高峰期,也需要广大的公共场合信息公示平台,而利用LED点阵滚动显示正好符合情况,且这种方式已经成为信息传递的一种重要手段。因此,在日常生活中,点阵随处可见。通过多种控制手段,点阵还可以实现各种文字甚至图案的动态显示。在不同的应用场合,点阵的设计要求也是不同的。传统思路一般是应用单片机实现点阵控制,但该方法有一定的局限性。 该次课程设计主要研究利用VHDL语言编程来设计汉字的显示。首先描述相应的设计电路;然后叙述在16*16矩阵显示汉字的原理;最后给出描述功能的VHDL设计语言。并通过编程、调试、仿真、下载正确实现汉字滚动、扫描显示结果。 关键词: LED点阵;FPGA;VHDL语言;汉字滚动显示。

目录 1.实验要求及总体方案 (1) 1.1 实验要求 (1) 1.2 扫描显示 (1) 1.3 滚动显示 (1) 2.LED点阵显示原理 (1) 2.1 LED点阵原理 (1) 2.2汉字取模 (2) 3.扫描显示 (3) 3.1 设计基本原理 (3) 3.2计数器设计 (3) 3.3 列驱动设计 (4) 3.4 行驱动设计 (4) 4.仿真图原理图及实物图 (4) 4.1仿真图 (4) 4.2原理图 (5) 4.3实物图 (6) 5.程序 (7) 参考文献: (10)

实验七 点阵LED屏汉字显示实验

教案(首页)

实验七点阵LED屏汉字显示 一、实验目的 掌握LED点阵显示的方法,深入了解显示的思路。 二、实验说明 LED点阵显示与LED数码显示原理基本相同,要用LED点阵显示组成图形或者字体需要不断的刷新点阵。 三、实验电路原理图 四、实验设备与器件 DLDP-MCU30单片机最小系统模块;DLDP-MCU27 1、在“DLDP-MCU30单片机最小系统模块”上,将“EA”接“+5V”端。 2、使用排线将DLDP-MCU30单片机模块的P0、P1、P2、P3连接到DLDP-MCU27模块的L1、L9,H1,H9,编写实验程序并编译代码生成.HEX文件。 3、将.HEX文件下载至AT89S52单片机中。 4、观察实验现象,分析实验程序的正确性。 六、参考程序

#include #include #define uchar unsigned char #define uint unsigned int uchar code tab1[]={ 0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x84,0x20,0x84,0x20,0x84,0x20, 0x84,0x20,0x84,0x20,0x84,0x20,0x84,0x20,0x84,0x20,0xFE,0x3F,0x04,0x20,0x00,0x00, };//山 uchar code tab2[]={ 0x40,0x00,0x40,0x00,0xFE,0x3F,0x20,0x00,0x10,0x01,0x10,0x01,0x08,0x01,0xF8,0x1F, 0x00,0x01,0x10,0x05,0x30,0x09,0x18,0x11,0x08,0x31,0x44,0x21,0x80,0x01,0x00,0x01, };//东 uchar code tab3[]={ 0x18,0x06,0x18,0x06,0xD8,0xFF,0x7F,0x06,0x18,0x03,0x1C,0x0F,0xBC,0x0D,0xFE,0x7F, 0x1E,0x0C,0x9B,0x0D,0x98,0x3D,0xD8,0x6C,0x78,0xEC,0x18,0xCC,0x18,0x0F,0x18,0x06, };//栋 uchar code tab4[]={ 0xCC,0x3F,0x18,0x36,0x03,0x36,0xF6,0x73,0xD8,0xF3,0x8F,0xF1,0xCC,0x3C,0xFC,0x19, 0x80,0x01,0xFF,0xFF,0xC0,0x03,0xE0,0x07,0xB0,0x1D,0x9C,0xF1,0x87,0x61,0x80,0x01, };//梁 uchar code tab5[]={ 0xE0,0x30,0x3E,0x33,0x30,0x36,0x30,0x36,0xFF,0x30,0x38,0x33,0x78,0x36,0xFC,0x36, 0x3C,0xF0,0x36,0x3E,0xF3,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, };//科

单片机实验--LCD显示实验

实验19L C D显示实验 一、实验目的: 学习液晶显示的编程方法,了解液晶显示模块的工作原理。 掌握液晶显示模块与单片机的接口方法。 二、所需设备 CPU挂箱、8031CPU模块 三、实验内容 编程实现在液晶显示屏上显示中文汉字“北京理工达盛科技 有限公司”。 四、实验原理说明 五、实验步骤 1、实验连线 8255的PA0~PA7接DB0~DB7,PC7接BUSY,PC0接REQ,CS8255 接CS0。 2、运行实验程序,观察液晶的显示状态。 六、程序框图 八、附:点阵式LCD 模块 点阵式LCD模块 由一大一小两块液晶 模块组成。两模块均 由并行的数据接口和 应答信号接口两部分 组成,电源由接口总 线提供。 (1)OCMJ2×8液晶 模块介绍及使 用说明 OCMJ中文模块系列液晶显示器内含 GB 2312 16*16点阵国标一级简体汉字和 ASCII8*8(半高)及8*16(全高)点阵英文字库,用户输入区位码或 ASCII 码即可实现文本显示。 OCMJ中文模块系列液晶显示器也可用作一般的点阵图形显示器

之用。提供有位点阵和字节点阵两种图形显示功能,用户可在指定的屏幕位置上以点为单位或以字节为单位进行图形显示。完全兼容一般的点阵模块。 OCMJ中文模块系列液晶显示器可以实现汉字、ASCII 码、点阵图形和变化曲线的同屏显示,并可通过字节点阵图形方式造字。 本系列模块具有上/下/左/右移动当前显示屏幕及清除屏幕的命令。一改传统的使用大量的设置命令进行初始化的方法,OCMJ 中文模块所有的设置初始化工作都是在上电时自动完成的,实现了“即插即用”。同时保留了一条专用的复位线供用户选择使用,可对工作中的模块进行软件或硬件强制复位。规划整齐的10个用户接口命令代码,非常容易记忆。标准用户硬件接口采用REQ/BUSY 握手协议,简单可靠。 硬件接口 接口协议为请求/应答(REQ/BUSY)握手方式。应答BUSY 高电平(BUSY =1)表示 OCMJ 忙于内部处理,不能接收用户命令;BUSY 低电平(BUSY =0)表示 OCMJ 空闲,等待接收用户命令。发送命令到 OCMJ可在BUSY =0 后的任意时刻开始,先把用户命令的当前字节放到数据线上,接着发高电平REQ 信号(REQ =1)通知OCMJ请求处理当前数据线上的命令或数据。OCMJ模块在收到外部的REQ高电平信号后立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已收到数据并正在忙于对此数据的内部处理,此时,用户对模块的写操作已经完成,用户可以撤消数据线上的信号并可作模块显示以外的其他工作,也可不断地查询应答线BUSY是否为低(BUSY =0?),如果BUSY =0,表明模块对用户的写操作已经执行完毕。可以再送下一个数据。如向模块发出一个完整的显示汉字的命令,包括坐标及汉字代码在内共需5个字节,模块在接收到最后一个字节

单片机设计8X8LED点阵显示原理与编程技术

#i nclude unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay(void) { unsigned char i,j; for(i=10;i>0;i--) for(j=248;j>0;j--); } void delay1(void) { unsigned char i,j,k; for(k=10;k>0;k--) for(i=20;i>0;i--) for(j=248;j>0;j--); } void main(void) { unsigned char i,j; while(1) {

for(j=0;j<3;j++)//from left to right 3 time { for(i=0;i<8;i++) { P3=taba[i]; P1=0xff; delay1(); } } for(j=0;j<3;j++)//from right to left 3 time { for(i=0;i<8;i++) { P3=taba[7-i]; P1=0xff; delay1(); } } for(j=0;j<3;j++)//from top to bottom 3 time { for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; delay1(); } }

LED灯实验报告

mcs-51单片机接口技术实验 适用:电气类专业本科学生 实验报告 实验一熟悉proteus仿真模拟器,led花样表演 一、实验目的 掌握以下方法: 1.在proteus的环境下,设计硬件原理图; 2.在keilc集成环境下设计c51语言程序; 2.在proteus的环境下,将硬件原理图与软件联接仿真运行。 二、实验环境 1.个人微机,windows操作系统 2.proteus仿真模拟器 3.keilc编程 三、实验题目 基本题:使用8051的并口带动8个led发光二极管显示一种花样表演。提高题:使用一个键切换实现3种以上花样表演。 四、实验类型: 学习、模仿与简单设计型。 五、实验步骤: 0、进入isis,先选择需要的元件,然后设计电原理图,保存文件; 1、在keilc软件集成环境下编写源程序,编译工程文件; 2、将所设计的硬件原理图与目标代码程序相联接; 4、按play键,仿真运行程序。 附,可能用到的元件名称: cpu:at89c51或任一种mcs-51家族cpu; 晶振:crystal; 电容器:capacitors,选22pf 电解电容:cap-elec或genelect10u16v 复位电阻:minres10k 限流电阻:minres330r 按键:button led:led-blue/red/yellow或diode-led (一)接线图如下: (二).基础花样 (四)程序流程图 (五)c程序 #include <> #define uint unsigned int #define uchar unsigned char const tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, /*正向流水灯*/ 0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,};/*反向流水灯*/ const tab2[]={0xff,0x00,0xff,0x00,0xff,0x00,}; void delay() { uint i,j; for(i=0;i<256;i++) for(j=0;j<256;j++)

8 8LED点阵显示实验

8 8LED点阵显示实验 一.实验要求 利用实验系统提供的实验模块点阵显示,编程实现中英文字符的显示。 二.实验目的 1.了解LED点阵显示的基本原理和实现方法。 2.掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法。 三.实验电路及连线 点阵显示模块WTD3088的(红色)列输入线接至内部LED的阴极端,行输入线接至内部LED 的阳极端(若阳极端输入为高电平,阴极端输入低电平,则该LED点亮)。发光点的分布如图22-0所示。 Fig 22-0 WTD3088 LED分布 如图22-1示,本实验模块使用74LS374来控制列输入线的电平值。将74LS374的某输出置0,则对应的LED阴极端被置低。如图22-2示,本实验模块使用74LS273来控制行输入线,并通过9013提供电流驱动。将74LS273的某输出置1,则对应的LED阳极端被置高。每次系统重新开启或总清后,74LS273输出为全0,LED显示被关闭。 通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。

Fig 22-1 LED模块及列扫描电路 Fig 22-2 行扫描电路 Fig 22-3地址译码电路 本实验模块使用4块WTD3088组成16×16点阵,以满足汉字显示的要求。为了方便的控制四个单元,使用了一片74LS139译码,产生四个地址片选信号:CLKR1= CSLED,CLKR2= CSLED+1,用于行控制的两片74LS273;CLKC1= CSLED+2,CLKC2= CSLED+3,用于列控制的两片74LS374。实验接线:按示例程序,模块的CSLED接51/96地址的8000H。 四.实验说明

LED点阵原理图

LED点阵书写显示屏的设计 2011-12-23 22:51:14 来源:21IC 关键字:STC89C58LED双色点阵红外光电三板管光笔 近年来,点阵LED显示屏利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本低等特点,已成为众多显示媒体以及户外作业显示的电子工具,广泛地应用于车站、宾馆、金融、证券、邮电、体育等广告发布或交通运输等行业。目前LED显示屏的设计已经有多种方法可以实现,本设计是基于STC89C58单片机利用自制的光笔中红外光电三极管检测光笔触及位置处红色LED灯的点亮,计算出光笔位置的行列坐标,并根据按键设置的不同工作模式控制LED显示,从而实现点亮、划亮、反显、清屏、笔画拖动、轮流显示等功能。 1 系统设计方案 用双色LED点阵(红色和绿色)模块组合成32×32的LED点阵屏。其中红色LED作微亮扫描检测用,绿色LED作显示用,用红外光电三极管自制光笔。在检测时依次点亮红色LED,当点亮到某个LED时,如果此时光笔放在该LED时,这时红外光电三极管的阻值会发生变化,通过相应的检测电路可以得出一个高低电平的变化,单片机检测到信号变化时就可以判断光笔的当前位置。 该方案简单易行,对光笔位置判断的灵敏度较高,抗外界干扰能力强。采用双色点阵和红外光电三极管能够有效地减少环境可见光和显示LED(绿色)所发的光线对光笔中光电三极管的干扰。 2 系统结构及单元模块设计 2.1 系统总体框图 系统主要由微处理器STC89C58,32×32双色LED点阵显示、光笔及检测电路、外界光照强度检测电路、按键输入电路、液晶显示模块等几个部分组成。系统硬件结构框图如图1所示。

Lcd12864点阵液晶屏显示原理

https://www.360docs.net/doc/ea11303929.html, Lcd12864点阵液晶屏显示原理 Lcd12864,它就是128列+64行的阵列。每个型号的液晶模块都有它的一些参数,下面看下lcd12864显示的一些原理吧。 lcd12864,每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息当然由自己设计,问题的关键就是显示点在液晶屏上的位置与其在存储器中的地址之间的关系。 由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits 显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。 显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8个液晶点的显示信息。 为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。需要注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同。 存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage,0~7)和列地址(Yaddress,0~63)。 例如点亮128*64的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。 1

点阵显示屏成功点亮 原理图 程序

16×16点阵显示屏成功点亮!! 看到江同学的3216屏(),对于我来说,稍显复杂,所以决定做个1616的 屏看看效果,原理图就是以下了,注意做1616时,要去掉一个74LS154(当然这里也能换用 74HC154,虽然功耗大,但价格较低),经过两天的奋斗,终于完工了。简单的调试后,点亮 了!!编个流动显示的程序,哈哈,很炫啊。心动不如赶快行动啊!! 我是把点阵块焊到一块板子上,可方便检查有无虚焊,控制部分放到了另一张板上,做成 的实物图就是下面的了,视频在这里:(注:以下原理图均来自 )

/********************************************************* 程序名称:LED1616点阵流动显示汉字 简要说明:最大可显示16*16汉字 P0口接上行线,P2口接下行线,P3口接扫描线编写:https://www.360docs.net/doc/ea11303929.html, 改编:springvirus *********************************************************/ #include

#define hang1 P0 //上行线 #define hang2 P2 //下行线 #define lie P1 //列线 #define sum sizeof(hanzi)/32 //自动计算汉字字数 /*****参数设置*****/ #define ziti 16 //字体大小(宽度) #define light 50 //显示亮度 #define move_speed 50 //移动速度 unsigned char code hanzi[]={ /*-- 文字: 自--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0xF8,0x48,0x48,0x4C,0x4B,0x4A,0x48,0x48,0x48,0xF8,0x00,0x00,0x00 , 0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00, /*-- 文字: 制--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x50,0x4F,0x4A,0x48,0xFF,0x48,0x48,0x48,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00, 0x00,0x00,0x3F,0x01,0x01,0xFF,0x21,0x61,0x3F,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00, /*-- 文字: 小--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0xC0,0x70,0x20,0x00,0xFF,0x00,0x10,0x20,0xC0,0x80,0x00,0x00,0x00, 0x04,0x02,0x01,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x01,0x07,0x02,0x00, /*-- 文字: 型--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x12,0x92,0x7E,0x12,0x12,0xFE,0x12,0x12,0x10,0xFC,0x00,0x00,0xFF,0x00,0x00 , 0x40,0x42,0x49,0x48,0x48,0x48,0x49,0x7E,0x48,0x48,0x48,0x4A,0x4C,0x4B,0x40,0x00 , /*-- 文字: 点--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x3F,0x24,0x24,0x24,0xF4,0x24,0x00,0x00,0x00, 0x00,0x40,0x30,0x07,0x12,0x62,0x02,0x0A,0x12,0x62,0x02,0x0F,0x10,0x60,0x00,0x00, /*-- 文字: 阵--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0xFE,0x02,0x12,0x2A,0xC6,0x88,0xC8,0xB8,0x8F,0xE8,0x88,0x88,0x88,0x88,0x00,0x0 0, 0xFF,0x00,0x02,0x04,0x03,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x00, /*-- 文字: 显--*/

点阵显示器的扫描原理

点阵显示器的扫描原理 8X8点阵 P2口做传送数据端口P0做行扫描(两者可以互换) (图中二极管方向须反向) 如上图P0口从P0.7到P0.0做扫描P0口数据为0X80 二进制数据为10000000 用右移函数_cror_(P0,1) 即可实现扫描使高电位从高位依次移动到低位实现逐行扫描当P0扫描第一行时即数据为10000000 P2口从P2.0~P2.7 送入第一行要点亮的灯这里低电位为选中(被点亮)高电位为不选中(处于熄灭状态)比如P2口数据为01110011即图中左上角第一位第五位第六位被点亮如果取字模阴取法即可显示出字的上面一行的点依次向下右移一位P2口取第二行要显示的点…………至到第八行整个字的字模码全被点亮一次利用人眼的惰性如果P0口P2口扫描的速度足够快>25HZ 即可看到整个屏被点亮的字模即是所要显示的字型由于LED灯点亮须要一定的电流所以通电的时间长短会影响其亮度扫描速度过快亮度会变低扫描太慢人眼会感到有闪烁感。(追求刚刚好的扫描速度正是LED显示屏显示的关键) 关于向上移动显示 在上面的静止显示的基础上加入移动代码即可实现上移(且以P0口称为行扫描,P2口为点阵显示码) 由于P0口从上往下扫描当第一次扫描完一个字后做N个循环后(这里的N指的是扫描次数因为人眼的观看速度所以还是要停留一会儿)第二次扫描P2口P2.0取第2个码依次到P2.7 取第八个码做N 个循环后再加1……至到将数组中的所有字码全部取出用到的代码如下

Main() { P0=0x80;//定义P0口初始化的值为1000 0000 For(i=0;i<48;i++) //此句中的48为字码的个数减8 For(N=0;N<20;N++)//每取一次码之后循环次数也可称为移动速度 { P2=tab[i+N];// P2口所选字码 Delay(300);// 延时函数(也是调整扫描频率的数值) P0=_cror_(P0,1) 右移函数实现扫描 }//此三句在第二个FOR中循环20次20是一般取值也是调整移动速度的数值. } 向下移动 在静止显示的基础上改变扫描顺序再改变字码的排列顺序就可实现 扫描顺序从P0.0到P0.7扫描在第次扫描中也就是第八行P2口的点阵通过算法P2口可以得到数组的第八个元素其算法为通过一个缓存字符串 For(a=0;a<6;a++) For(b=0;b<8;b++) Buffer[a*8+b]=TAB[a*8+7-b] 该算法实现的重新排列的数组为Buffer[0]= TAB[7] Buffer[1]=TAB[6] …… Buffer[8]=TAB[15] Buffer[11]=TAB[12] 位对应 07 1 6 2 5 3 4 4 3 5 2 6 1 70 815 914 1013 1112 1211 1310 149

LCD1602液晶显示实验要点

实验报告 实验名称: [LCD1602液晶显示实验]姓名: 学号: 指导教师: 实验时间: [2013年6月15日] 信息与通信工程学院

LCD1602液晶显示实验 1.实验原理 1.1 基本原理 1.1.1 1602字符型LCD简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。 1.1.2 1602LCD的基本参数及引脚功能 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图1-2所示: 图1-2 1602LCD尺寸图 1.1602LCD主要技术参数: 显示容量: 16×2个字符 芯片工作电压: 4.5~5.5V 工作电流: 2.0mA(5.0V) 模块最佳工作电压: 5.0V 字符尺寸: 2.95×4.35(W×H)mm 2.引脚功能说明: 1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表: 表1-3引脚接口说明表 编 符号引脚说明编号符号引脚说明 号 1 VSS 电源地9 D 2 数据 2 VDD 电源正极10 D 3 数据 3 VL 液晶显示偏压11 D 4 数据 4 RS 数据/命令选择12 D 5 数据 5 R/W 读/写选择13 D 6 数据 6 E 使能信号14 D 7 数据 7 D0 数据15 BLA 背光源正极 8 D1 数据16 BLK 背光源负极

1.1.3 1602LCD的指令说明及时序 1602液晶模块内部的控制器共有11条控制指令,如表1-4所示: 表1-4 控制命令表 序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0 1 清显示0 0 0 0 0 0 0 0 0 1 2 光标返回0 0 0 0 0 0 0 0 1 * 3 置输入模式0 0 0 0 0 0 0 1 I/D S 4 显示开/关控制0 0 0 0 0 0 1 D C B 5 光标或字符移位0 0 0 0 0 1 S/C R/L * * 6 置功能0 0 0 0 1 DL N F * * 7 置字符发生存贮器 地址 0 0 0 1 字符发生存贮器地址 8 置数据存贮器地址0 0 1 显示数据存贮器地址 9 读忙标志或地址 0 1 BF 计数器地址 10 写数到CGRAM或 DDRAM) 1 0 要写的数据内容 11 从CGRAM或 DDRAM读数 1 1 读出的数据内容 1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)读写操作时序如图1-5和1-6所示: 图1-5 读操作时序

5实验五:点阵LED显示

实验五点阵LED显示 1、实验目的:(1)了解点阵LED显示器的基本原理; (2)掌握单片机控制点阵LED显示程序的设计方法。 2、实验仪器:PC机一台,万利仿真器一套及其开发环境,清华TMC-1开放式单片机实验系统一套。 3、实验原理:点阵的LED显示器是将许多LED用类似矩阵的结构排列在一起组成的显示器件,当用单片机输出控制信号,使得点阵中的LED有些发光,有些不发光,即可显示出特定的信息,包括汉字、图形等,由微机控制点阵LED大屏幕广告宣传牌就是采用的这样的显示技术。 实验仪上设有一个共阳极8×8的点阵LED显示器,其点阵结构如图所示。 该点阵对外引出8条行线,8条列线,如果使某一个LED发光,只要将与其相连接的行线加高电平,列线加低电平;若是使某一列LED发光,只要将8根行线全加高电平,此列线加低电平;若是使某一列LED部分发光,只要将需要发光的行线加高电平,此列线加低电平。实验仪上的点阵LED及驱动连接电路如下一页的电路图所示(其中点阵LED与8051输入输出口之间的连接需要实验者自己连接),这里采用了P2和P1口。8051的P2口输出的数据通过行驱动器(74LS07)加在了点阵LED的8条行线上,8051的P1口输出的数据通过列驱动器(ULN2003A)反相后加在了点阵LED的8条列线上。如果要使该点阵显示某一信息,只要通过P1、P2口输出特定的数据,控制点阵LED逐行或逐列循环发光即可。 例如:如果显示汉字“年”,采用逐列循环发光。首先由“年”的点阵轮廓确定点阵代码。“年”字的点阵轮廓如右图所示,根据“年”字的点阵代码,确定逐列发光的时序如下: 1、P2口输出24H;P1口输出80H,第7列的2个LED发光; 2、P2口输出44H;P1口输出40H,第6列的2个LED发光; 3、P2口输出DCH;P1口输出20H,第5列的5个LED发光; 4、P2口输出54H;P1口输出10H,第4列的3个LED发光; 5、P2口输出7FH;P1口输出08H,第3列的7个LED发光; 6、P2口输出54H;P1口输出04H,第2列的3个LED发光; 7、P2口输出54H;P1口输出02H,第1列的3个LED发光; 8、P2口输出44H;P1口输出01H,第0列的2个LED发光; 在以上每一步骤之间插入 1ms左右的延时,重复进行以上1―8步骤,即可在LED上稳定的显示出“年”字。这里P2口先后输出的8字节数据:24H,44H,DCH,54H,7FH,54H,54H,44H,称为“年”的代码。

相关文档
最新文档