单片机LED点阵课程设计报告书Word文档格式.docx

上传人:b****1 文档编号:3320507 上传时间:2023-05-01 格式:DOCX 页数:24 大小:93.50KB
下载 相关 举报
单片机LED点阵课程设计报告书Word文档格式.docx_第1页
第1页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第2页
第2页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第3页
第3页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第4页
第4页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第5页
第5页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第6页
第6页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第7页
第7页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第8页
第8页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第9页
第9页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第10页
第10页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第11页
第11页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第12页
第12页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第13页
第13页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第14页
第14页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第15页
第15页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第16页
第16页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第17页
第17页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第18页
第18页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第19页
第19页 / 共24页
单片机LED点阵课程设计报告书Word文档格式.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机LED点阵课程设计报告书Word文档格式.docx

《单片机LED点阵课程设计报告书Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机LED点阵课程设计报告书Word文档格式.docx(24页珍藏版)》请在冰点文库上搜索。

单片机LED点阵课程设计报告书Word文档格式.docx

说明:

本任务书一式二份,院(部、系)、教务处各一份。

目录

一、系统功能设计要求。

1

二、设计方案。

2

三、LED点阵的显示原理。

3

四、单片机结构。

4

五、源程序、程序设计及流程图。

5

一、设计要求

设计一个16*16LED点阵位置显示屏,要求可以在显示屏上可以点亮足够的led灯,组成文字和图形,并形成跑马灯、移入移出等显示特色。

要求文字显示清晰,图形显示清晰,并且稳定。

二、设计方案

从理论上说,不论显示图形还是文字,只要控制组成这些图形或文字的各个点所在的位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。

16×

16的点阵共有256个发光二极管,显然单片机没有这么多的端口,如果我采用锁存器来扩展端口,按8位的锁存器来计算,16×

16的点阵需要256/8=32个锁存器。

这个数字很庞大,因为我们仅仅是16×

16的点阵,在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。

因此在实际应用中的显示屏几乎都不采用这种设计,而采用另外一种称为动态扫描的显示方法。

动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套驱动器。

具体就16×

16的点阵来说,把所有同1行的发光管的阳极连在一起,把所有同1列的发光管的阴极连在一起(共阳极的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定时间,然后熄灭;

再送出第二行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;

以此类推,第16行之后,又重新燃亮第1行,反复轮回。

当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。

采用扫描方式进行显示时,每一行有一个行驱动器,各行的同名列共用一个驱动器。

显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。

显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。

从控制电路到列驱动器的数据传输可以采用并列方式或串行方式。

显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。

当列数很多时,并列传输的方案是不可取的。

采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。

但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。

这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。

对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下留给行显示的时间就太少了,以致影响到LED的亮度。

解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。

即在显示本行各列数据的同时,传送下一列数据。

为了达到重叠处理的目的,列数据的显示就需要具有锁存功能。

经过上述分析,就可以归纳出列驱动器电路应具有的功能。

对于列数据准备来说,它应能实现串入并出的移位功能;

对于列数据显示来说,应具有并行锁存的功能。

这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。

LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。

以16×

16点阵为例,把所有同一行的发光管的阴极连在一起,把所有同一列的发光管的阳极连在一起(共阴的接法),先送出对应第1列发光管亮灭的数据并锁存,然后选通第1列使其燃亮一定的时间,然后熄灭;

再送出第2列的数据并锁存,然后选通第2列使其燃亮相同的时间,然后熄灭;

….第16列之后,又重新燃亮第1列,反复轮回。

当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。

该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。

显示数据可通过单片机的P0,,P2口接驱动电路传输到点阵行引脚。

点阵的移动 

以下以16×

16点阵为例介绍点阵的移动。

要显示一个字符,该字符的点阵数据可以列向(纵向)16点组字,又可以行向(横向)16点组字。

无论哪一种组字方法,都既可以显示字符的水平方向的移动,又可以显示竖直方向的移动。

本设计主要采用汉字的左移,所以以下只作左移显示的解释 

列扫描方式左移动:

列向组字显示字符水平方向的移动(左滚动) 

延长数组法。

将原来字符点阵数组的16个数据重复一遍延长,点阵数组的数据个数为32个。

每扫描一帧取8个数据显示,下一帧取数要在数组中后移一个数取数。

循环一遍扫16帧。

可以假想有两块16×

16的点阵模块(共32帧)水平平行排列,用一个恰好能罩住16列点阵的中空方框去罩这个点阵,第1(第1帧)罩住最左边数起第一列开始的16列,就扫描显示这16列;

第2次(第2帧)使方框右移一列,罩住做左边数起第2列开始的16列,就扫描显示这16列;

·

这样每扫描完一帧使方框右移一列,最后第16次(第16帧)时,罩住左边数起的第16列开始的16列,就扫描显示这16列。

如此完成16帧画面的扫描显示,也就完成了整个一次移动循环扫描、之后反复循环,即可呈现显示字符沿水平向左移动的图像 

因为是列向组字(列扫描方式,点阵数据为行码,上边为低位下面为高位),希望显示移动的一个字符,第1次扫描从行码的点阵数组中取第1~16个数据,送行码输出口,对应于这8个数据,同时用列码输出口输出列码,分别控制第1~16列。

扫描完前16个数据之后,第2次扫描从点阵数组中取第3~18个数据(第18个数据与第1个数据同),送行码输出口,对应于这16个数据,同时用列码输出口输出列码,仍分别控制扫第1~16列。

第3次扫描从点阵数组中取第5~20个数据(第20个数据码与第2个数据码相同)扫描·

如此实现字符向左移动。

以上完成一个图形移动的方法,也可以看成是移动16个不同的字形。

如图2.13所示,首先扫描第一个字型,同样是16行,16次扫描,16次显示;

完成一个字型的扫描以后,再扫描第二个字型;

完成第二个字型的扫描之后,再扫描第三个字型·

依此类推,即可产生该文字的左移的感觉。

三、单片机系统结构 

51单片机的概述 

单片机也被称作“单片机微型计算机”、“微控制器”、“嵌入式微控制器”,国际上采用“MCU”(Micro 

Controller 

Unit)称呼单片机。

如果将8位单片机的推出作为起点(1976年),那么单片机的发展的历史大致可以分为4个阶段。

第一阶段是单片机探索阶段,主要探索如何把计算机的主要部件集成在单芯上;

第二阶段是单片机完善阶段,完善了8位单片机的并行总线结构、外围功能单元由CPU集中管理模式、体现控制特性的位地址空间和位操作方式、指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令;

第三阶段是向微控制器发展的阶段,说的是在51系列的基本结构的基础上,加强了外围电路的功能,突出了单片机的控制功能,将一些用测控对象的模数转换器、数模转换器、程序运行监视器、脉宽调制器等纳入芯片中,体现单片机的微控制器特征;

第四阶段是单片机的全面发展阶段,很多大半导体和电气厂商都开始加入单片机的研制和生产,单片机世界出现了百花齐放,欣欣向荣的景象。

随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址围、强运算能力的8位、16位、32位通用型单片机,以及小型谦价的专用型单片机。

目前,单片机正朝着高性能和多品种方向发展,今后单片机的发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路装等方面发展。

单片机的组成 

单片机通过部总线把计算机的各主要部件连为一体,其部总线包括地址总线、数据总线和控制总线。

其中,地址总线的作用是为进行数据交换时提供地址,CPU通过将地址输出到存储器或I/O接口;

数据总线用于在CPU与存储器或I/O接口之间或存储器与外设之间交换数据;

控制总路线包括CPU发出的控制信号线和外部送入CPU的应答线等。

四、源程序、程序设计及流程图

显示驱动程序(显示屏扫描函数)流程图。

以下是16×

16点阵LED电子显示屏的源程序,分别采用C及汇编编写,C程序在KeiluVision2V2.30(C51.exeV7.0)环境下调试通过。

/*--------------------------------------

16点阵LED显示屏程序

MCUAT89C51XAL24MHz

BuildebyGavinHu,2003.8.15

--------------------------------------*/

#include<

reg51.h>

#defineBLKN2//列锁存器数

sbitG=0x97;

//P1.7为显示允许控制信号端口

sbitRCLK=0x96;

//P1.6为输出锁存器时钟信号端

sbitSCLR=0x95;

//P1.5为移位寄存器清○端

voiddelay(unsignedint);

//延时函数

unsignedchardatadispram[32];

//显示缓存

主函数voidmain(void)

voidmain(void)

{

unsignedcharcodeBmp[][32]={//字模表

{

0xF9,0xBF,0xC7,0xAF,0xF7,0xB7,0xF7,0xB7,0xF7,0xBF,0x00,0x01,0xF7,0xBF,0xF7,0xB7,

0xF1,0xD7,0xC7,0xCF,0x37,0xDF,0xF7,0xAF,0xF6,0x6D,0xF7,0xF5,0xD7,0xF9,0xEF,0xFD

}/*我*/,

0xFF,0x07,0xC0,0x6F,0xED,0xEF,0xF6,0xDF,0xC0,0x01,0xDD,0xFD,0xBD,0xFF,0xC0,0x03,

0xFB,0xFF,0xF8,0x0F,0xF3,0xDF,0xF4,0xBF,0xEF,0x3F,0x9C,0xCF,0x73,0xF1,0xCF,0xFB

}/*爱*/,

0xF7,0xDF,0xF9,0xCF,0xFB,0xBF,0xC0,0x07,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,0xDE,0xF7,

0xC0,0x07,0xDE,0xF7,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF

}/*单*/,

0xFF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBB,0xE0,0x01,0xEF,0xFF,0xEF,0xFF,0xEF,0xFF,

0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xDF,0xEF,0xDF,0xEF,0xBF,0xEF,0x7F,0xEF

}/*片*/,

0xEF,0xFF,0xEF,0x07,0xEF,0x77,0x01,0x77,0xEF,0x77,0xEF,0x77,0xC7,0x77,0xCB,0x77,

0xAB,0x77,0xAF,0x77,0x6E,0xF7,0xEE,0xF5,0xED,0xF5,0xED,0xF5,0xEB,0xF9,0xEF,0xFF

}/*机*/,

0xF8,0x3F,0xE7,0xCF,0xDF,0xF7,0xBF,0xFB,0xB3,0x9B,0x73,0x9D,0x7F,0xFD,0x7F,0xFD,

0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F,0xFF,0xFF

}/**/

};

registerunsignedchari,j,k,l;

SCON=0x00;

//串口工作模式0:

移位寄存器方式

TMOD=0x01;

//定时器T0工作方式1:

16位方式

TR0=1;

//启动定时器T0

P1=0x3f;

//P1端口初值:

允许接收、锁存、显示

IE=0x82;

//允许定时器T0中断

while

(1)

delay(2000);

//延时2秒

for(i=0;

i<

32;

i++)//显示效果:

卷帘出┓

dispram[i]=Bmp[5][i];

if(i%2)delay(100);

}//━━━━━━━━┛

delay(3000);

i<

6;

i++)//显示效果:

上滚屏┓

for(j=0;

j<

16;

j++)

for(k=0;

k<

15;

k++)

dispram[k*BLKN]=dispram[(k+1)*BLKN];

dispram[k*BLKN+1]=dispram[(k+1)*BLKN+1];

}

dispram[30]=Bmp[i][j*BLKN];

dispram[31]=Bmp[i][j*BLKN+1];

delay(100);

左跑马┓

2;

for(k=1;

9;

for(l=0;

l<

l++)

dispram[l*BLKN]=dispram[l*BLKN]<

<

1|dispram[l*BLKN+1]>

>

7;

dispram[l*BLKN+1]=dispram[l*BLKN+1]<

1|Bmp[i][l*BLKN+j]>

(8-k);

}//end(k=0;

}//endfor(i=0;

;

i++)//━━━━━━━┛

卷帘入┓

dispram[i]=0x00;

}//endwhile

(1)

}

/*延时函数*/

voiddelay(unsignedintdt)

{

registerunsignedcharbt;

for(;

dt;

dt--)

for(bt=0;

bt<

255;

bt++);

/*显示屏扫描(定时器T0中断)函数*/

voidleddisplay(void)interrupt1using1

registerunsignedchari,j=BLKN;

TH0=0xF8;

//设定显示屏刷新率每秒62.5帧

TL0=0x30;

i=P1;

//读取当前显示的行号

i=++i&

0x0f;

//行号加1,屏蔽高4位

do{

j--;

SBUF=dispram[i*BLKN+j];

//送显示数据

while(!

TI);

TI=0;

}while(j);

//完成一行数据的发送

G=1;

//消隐(关闭显示)

P1&

=0xf0;

//行号端口清○

RCLK=1;

//显示数据打入输出锁存器

P1|=i;

//写入行号

RCLK=0;

//锁存显示数据

G=0;

//打开显示

以下为用汇编编写的字符显示控制程序:

************************************

**

*单个16*16点阵电子屏字符显示器*

*AT89C5212MHZ晶振*

*2004.2.11LRM*

显示字用查表法,不占存,字符用16*16共阳LED点阵,

效果:

向上滚动显示19个字,再重复循环。

R1:

查表偏址寄存器,B:

查表首址,R2:

扫描地址(从00-0FH)。

R3:

滚动显示时控制移动速度,单字显示可控制静止显示的时间。

************;

中断入口程序;

ORG0000H

LJMPSTART

ORG0003H

RETI

ORG000BH

LJMPINTT0

ORG0013H

ORG001BH

ORG0023H

ORG002BH

初始化程序;

主程序;

START:

MOV20H,#00H;

清标志,00H为第16行开始扫描标志,01为1帧扫描结束标志

MOVA,#0FFH;

端口初始化

MOVP1,A

MOVP2,A

MOVP3,A

MOVP0,A

CLRP1.6;

串行寄存器输入打入输出控制位

MOVTMOD,#01H;

使用T0作16位定时器,行扫描用。

MOVTH0,#0FCH;

1ms初值(12MHZ)

MOVTL0,#18H

MOVSCON,#00H;

串口0方式传送显示字节

MOVIE,#82H;

T0中断允许,总中断允许

MOVSP,#70H

MAIN:

LCALLDIS1;

显示准备,黑屏,1.5秒

MOVDPTR,#TAB

LCALLMOVDISP;

向上滚动显示一页(8个字)

INCDPH

AJMPMAIN

********************;

多字滚动显示子程序;

每次8个字,入口时定义好DPTR值

MOVDISP:

MOVB,#00H;

向上移动显示,查表偏址暂存(从00开始)

DISLOOP:

MOVR3,#07H;

移动速度

DISMOV:

MOVR2,#00H;

第0行开始

MOVR1,B;

SETBTR0;

开扫描(每次一帧)

WAITMOV:

JBC01H,DISMOV1;

标志为1扫描一帧结束(16毫秒为1帧,每行1毫秒)

AJMPWAITMOV

DISMOV1:

DJNZR3,DISMOV;

1帧重复显示(控制移动速度)

INCB;

显示字的下一行(每行2字节)

MOVA,R1;

R1为0,8个字显示完

JZMOVOUT;

AJMPDISLOOP;

MOVOUT:

RET;

移动显示结束

*****************;

单字显示子程序;

显示表中某个字

DIS1:

MOVR3,#5AH;

静止显示时间控制(16MS*#=1.6秒)

DIS11:

一帧扫描初始值(行地址从00-0FH)

MOVDPTR,#TAB;

取表首址

MOVR1,#00H;

查表偏址(显示第一个字)

WAIT11:

JBC01H,DIS111;

为1,扫描一帧结束

AJMPWAIT11

DIS111:

DJNZR3,DIS11

RET

扫描程序;

1MS刷新一次,每行显示1秒

INTT0:

PUSHACC

1ms初值重装

JBC00H,GOEND;

16行扫描标志为1,结束

INCR1;

取行右边字节偏址

MOVA,R1

MOVCA,A+DPTR;

查表

MOVSBUF,A;

串口0方式发送

WAIT:

JBCTI,GO;

等待发送完毕

AJMPWAIT;

GO:

DECR1;

取行左边字节偏址

MOVCA,A+DPTR

MOVSBUF,A

WAIT1:

JBCTI,GO1

AJMPWAIT1

GO1:

SETBP1.7;

关行显示,准备刷新

NOP;

串口寄存器数据稳定

SETBP1.6;

产生上升沿,行数据打入输出端

CLRP1.6;

恢复低电平

MOVA,R2;

修改显示行地址

ORLA,#0F0H;

MOVR2,A;

MOVA,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2