基于嵌入式LED显示课程设计论文Word文档格式.docx

上传人:b****4 文档编号:6646245 上传时间:2023-05-07 格式:DOCX 页数:28 大小:338.50KB
下载 相关 举报
基于嵌入式LED显示课程设计论文Word文档格式.docx_第1页
第1页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第2页
第2页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第3页
第3页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第4页
第4页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第5页
第5页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第6页
第6页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第7页
第7页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第8页
第8页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第9页
第9页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第10页
第10页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第11页
第11页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第12页
第12页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第13页
第13页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第14页
第14页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第15页
第15页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第16页
第16页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第17页
第17页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第18页
第18页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第19页
第19页 / 共28页
基于嵌入式LED显示课程设计论文Word文档格式.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于嵌入式LED显示课程设计论文Word文档格式.docx

《基于嵌入式LED显示课程设计论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于嵌入式LED显示课程设计论文Word文档格式.docx(28页珍藏版)》请在冰点文库上搜索。

基于嵌入式LED显示课程设计论文Word文档格式.docx

3.根据下位机中安装的核心模块,选择相应的嵌入式系统开发软件光盘。

4.将选择好的嵌入式系统开发软件光盘放入上位机的光驱中,在终端命令窗口中挂载该光盘。

mount–oiocharset=gb2312/dev/cdrom/mnt

5.进入光盘的Linux工具软件目录。

执行该目录下的shell文件“install.sh”,Linux工具软件会自动安装完成。

对于S2410,会将程序安装在目录“arm2410cl”下,交叉编译器安装在目录“/opt/host”下。

用户可以通过使用命令“armv41-unknown-linux-gcc”运行交叉编译器。

6.启动minicom超级终端程序,选择“Serialportsetup”进入串口配置界面进行串口配置。

然后可以打开下位机的电源,通过minicom对下位机进行操作。

7.使用命令ifconfig分别查看上位机和下位机的IP地址,判断上位机与下位机是否处于同一个网段。

若它们不在同一网段,使用命令ifconfig或者KDE桌面的工具,将它们配置在同一网段。

使用命令ping查看上位机与下位机的网络连接是否正常,如不正常,请检查网线的连接、IP地址的配置、IP地址是否冲突等。

8.将上位机配置为NFS服务器,设置共享目录为“/arm2410cl”。

9.在上位机中启动NFS服务,下位机使用命令mount挂载上位机的共享目录。

mount–tnfs192.168.0.252:

arm2410cl/mnt/nfs

1.4给下位机烧写软件系统

下位机的软件系统由Bootloader、系统内核、根文件系统和应用程序四部分组成。

Bootloader相当于PC机上的BIOS,在下位机加电时自动运行,执行硬件初始化和调用系统内核的功能。

Bootloader分为U-boot、Vivi、Blob、ARMBoot、RedBoot等多种,本实验使用实验箱自带光盘中的vivi。

系统内核就是运行在下位机上的操作系统内核,本实验使用实验箱自带光盘中的zImage,是ARM-Linux的内核,版本号为2.6。

根文件系统是Linux系统必不可少的一部分,用来管理下位机中的文件。

本实验使用实验箱自带光盘中的root.cramfs。

Cramfs是专门针对Flash设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩,文件系统类型可以是EXT2或EXT3,经常作为下位机的根文件系统。

应用程序是需要烧写到下位机,在下位机中运行的程序,在上位机中以压缩文件包的形式保存,本实验使用实验箱自带光盘中的yaffs.tar.bz2。

应用程序所的文件系统为Yaffs(YetAnotherFlashFileSystem),Yaffs是一种专门为Flash设计的嵌入式文件系统,运行速度快、占用内存小,提供写均衡、垃圾收集等底层功能。

给下位机烧写软件系统的步骤:

1.烧写Vivi到下位机;

2.在上位机的WindowsXP中配置超级终端,连接下位机;

3.烧写系统内核到下位机;

4.烧写根文件系统到下位机;

5.烧写应用程序到下位机。

二.基本原理

2.1LED显示控制原理

LED是发光二极管英文LightEmittingDiode的缩写格式,LED器件种类繁多,早期的LED产品是单个发光管,随着数字化设备的出现,LED数码管和字符管得到了广泛的应用,LED点阵等显示器件的出现,适应了信息化社会发展的需要,成为了大众传媒的重要工具。

LED发光灯按类型可以分为单色发光灯、双色发光灯、三色发光灯、面发光灯、闪烁发光灯、电压型发光灯等;

按发光强度可分为普通亮度发光灯、高亮度发光灯、超高亮度发光灯等。

2.1.17段(或8段)LED

LED的7个字段分别称为a、b、c、d、e、f、g,有时还有一个小数点段h,图1(a)所示。

通过7个(或8个)发光段的不同组合,显示0~9和A~F共16个字母数字,从而实现十六进制的显示。

为使7段显示器显示数字或字符,就需点亮相应的段,每个段分别由数据线进行控制,通常数据线D0~D7顺序控制a~h段,如图11-34(b)所示,所需的控制信号称为段码。

由于数字与段码之间没有规律性,因此必须进行数字与段码之间的转换以便显示数字。

常用的转换方法是将要显示字形的段码列成一个表,称为段码表。

显示时,根据字符查段码表,取出其对应的段码送到数据线上来控制显示。

图18段LED显示器外形及各段对应的数据线

LED有两种不同的形式:

一种是8个发光二极管的阳极都连在一起,称为共阳极,如图2(a)所示;

另一种是8个发光二极管的阴极都连在一起,称为共阴极,如图2(b)所示。

图28段LED显示器原理图

2.1.2点阵式LED

点阵式LED的显示单元一般由8行8列LED组成,其外形及内部连接如图3所示,可以再由这8行8列的LED拼成更大的LED阵列。

点阵式LED显示器能显示各种字符、汉字及图形、图像,并具有色彩。

点阵式LED中,每个LED表示一个像素,通过每个LED的亮与灭来构造出所需的图形,各种字符及汉字也是通过图形方式来显示的。

对于单色点阵式LED,每个像素需要1位二进制数表示,1表示亮,0表示灭。

对于彩色点阵式LED,则每个像素需要更多的二进制位表示,通常需要一个字节。

点阵式LED显示器的显示控制采用扫描方式,在数据存储器中开辟若干个存储单元作为显示缓冲区,缓冲区中存有所需显示图形的控制信息。

显示时依次通过列信号驱动器输出一行所需所有列的信号,然后再驱动对应的行信号,控制该行显示。

只要扫描速度适当,显示的图形就不会出现闪烁。

图3点阵式LED的外形和内部连接

2.274HC273在开发板上的连接

2.2.17段(或8段)LED的连接

开发板上设置了2个数码管,由74HC273控制,如图4所示。

74HC273是同步串行转并行的锁存器,在此通过SPI总线和CPU连接,锁存数据后驱动数码管发光。

图4开发板上7段LED的连接

2.2.2点阵式LED的连接

点阵式LED在开发板上的连接如图5所示。

点阵式LED驱动器逻辑中设置了8个字节的缓冲区,每个字节按位对应点阵式LED模块上的一列8个点。

驱动器中的扫描电路会将缓冲区的内容不断输出到LED模块,CPU可以读写此缓冲区,从而可以更新现实内容。

图5开发板上点阵式LED的连接

点阵LED寄存器组共8个字节寄存器,地址A4A3A2A1=从0000到0111,按地址递增顺序分别对应点阵LED模块从左到右的8个列。

每个字节寄存器对应一列,字节寄存器内8个位对应该列的8个LED,从Bit0到Bit7分别对应从上到下的LED,如图6所示。

图6点阵式LED寄存器组

2.3LED编程

本次实验中,利用LED驱动程序“s3c2410-led.o”提供的open、ioctl、write、release等函数控制LED显示。

可在相同目录下找到其源程序“s3c2410-led.c”进行分析。

2.3.17段LED的段码表

由于开发板上两个数码管的连接是共阳极,分别显示“十位”和“个位”数字,中间是一个点号,总是让它置“1”。

所以当想要其中之一显示为“0”时,那么其对应的段码应为“11000000”,转化为十六进制即为0xc0。

同理可以给出“1”~“9”的段码,从而形成如下段码表:

unsignedcharLEDCODE[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

注意:

前10个表示字符“0”~“9”的段码,最后一个表示各段全灭,不显示。

用户程序使用ioctl函数用来控制2个数码管的显示:

ioctl(fd,0x12,LEDWORD);

由于两个8字数码管需要同时显示,故需要将“十位”的段码左移8位,拼接上“个位”的段码,形成一个16位的LEDWORD。

2.3.2点阵式LED的显示缓冲区

如要显示字符或图形,需要先给出对应点阵数据存储在缓冲区才能显示。

图7所示的是字符“0”和心形图的点阵,参照图6分别给出各自8个字节中的数据为:

“0”:

{0x00,0x00,0x7c,0x82,0x82,0x82,0x7c,0x00}

心形图:

{0x00,0x0c,0x12,0x22,0x44,0x22,0x12,0x0c}

通过调用write函数控制点阵式LED显示对应字符或图形。

图7字符“0”和心形图的点阵

三.系统分析与设计

3.1设计需求

本次综合实训任务主要是基于Linux的LED驱动程序设计及完成相关的操作。

大致分为两个阶段,第一阶段为环境搭建,第二部分是驱动程序设计。

需要完成的任务是,由驱动程序驱动开发板的LED灯,并且经测试,能够正确的点亮或熄灭开发板上的LED灯,即为完成本次实训任务。

3.2LED点阵显示与C语言编程

3.2.1LED点阵显示

点阵的接法有共阴极和共阳极两种(共阳极指的是对每一行LED来讲是共阳极的)。

显示的方法有两种:

1、逐列扫描方式:

亮的列从左向右扫描完8列(相当于位码循环移位8次)即显示出一帧完整的图像。

ucharcode

TAB[]={0x81,0xFD,0xFD,0xC1,0xBF,0xBF,0xBD,0xC3};

uchari,t;

delay(uchart)

{

while(t--)

{;

}

voidmain(void)

while

(1)

{

P2=0x01;

for(i=0;

i<

8;

i++)

{

P1=TAB[i];

delay(100);

P2=P2<

<

1|P2>

>

7;

}

}

2、逐行扫描方式:

与逐列扫描调换,扫描完8行显示出一帧图像。

本设计中图形显示的C语言程序的分析

3.2.2C语言编程

利用嵌入式实验平台和LED的工作原理,在本设计中的C语言编程如下:

1)调用系统库函数

#include<

stdio.h>

stdlib.h>

fcntl.h>

unistd.h>

sys/ioctl.h>

sys/mman.h>

linux/delay.h>

#defineTUBE_IOCTROL0x11

#defineDOT_IOCTROL0x12

2)子函数的设计

voidjmdelay(intn)

inti,j,k;

for(i=0;

n;

for(j=0;

j<

100;

j++)

for(k=0;

k<

k++);

3)主函数的设计

intmain()

intfd;

inti;

unsignedintLEDWORD;

unsignedcharLEDCODE[11]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

unsignedcharman_data[9][8]={

{0x4c,0x92,0x92,0x7c,0x0c,0x12,0x12,0x0c},

{0,0,0,0,0,0,0x0b,0xd3},

{0,0,0,0,0x0b,0xd3,0x3c,0x48},

{0,0,0x0b,0xd3,0x3c,0x4b,0x20,0},

{0,0,0x03,0x13,0xfc,0x08,0,0},

{0,0,0,0x0b,0xd3,0x3c,0x48,0},

{0,0x0b,0xd3,0x3c,0x48,0x20,0,0},

{0,0x08,0x93,0x4b,0x3c,0x24,0x48,0x20},

{0x48,0x20,0,0,0,0,0,0}};

fd=open("

/dev/led/0raw"

O_RDWR);

if(fd<

0)

printf("

####Leddeviceopenfail####\n"

);

return(-1);

LEDWORD=0xff00;

willenterTUBELED,pleasewaiting..............\n"

sleep

(1);

for(i=10;

i>

=0;

i--)

LEDWORD=(LEDCODE[i]<

8)|LEDCODE[i];

jmdelay(1500);

willenterDIGLED,pleasewaiting..............\n"

for(i=0;

9;

i++)

write(fd,man_data[i],8);

jmdelay(1000);

close(fd);

return0;

3.3Makefile文件的编写

在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。

make所支持的函数也不算很多,不过已经足够我们的操作了。

函数调用后,函数的返回值可以当做变量来使用。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:

Delphi的make,Visual 

C++的nmake,Linux下GNU的make。

可见,makefile都成为了一种在工程方面的编译方法。

Makefile文件的一般格式

objects=main.okbd.ocommand.odisplay.o\

insert.osearch.ofiles.outils.o

edit:

$(objects)

cc-oedit$(objects)

main.o:

main.cdefs.h

cc-cmain.c

kbd.o:

kbd.cdefs.hcommand.h

cc-ckbd.c

command.o:

command.cdefs.hcommand.h

cc-ccommand.c

display.o:

display.cdefs.hbuffer.h

cc-cdisplay.c

insert.o:

insert.cdefs.hbuffer.h

cc-cinsert.c

search.o:

search.cdefs.hbuffer.h

cc-csearch.c

files.o:

files.cdefs.hbuffer.hcommand.h

cc-cfiles.c

utils.o:

utils.cdefs.h

cc-cutils.c

clean:

rmedit$(objects)

Makefile文件编写的规则:

1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。

2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。

3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

利用Makefile文件的编写方法,编写本设计中的Makefile文件:

KERNELDIR=/arm2410cl/kernel/linux-2.4.18-2410cl/

INCLUDEDIR=$(KERNELDIR)/include

CROSS_COMPILE=armv4l-unknown-linux-

CC=$(CROSS_COMPILE)gcc

CFLAGS+=-I..

CFLAGS+=-Wall-O-D__KERNEL__-DMODULE-I$(INCLUDEDIR)

TARGET=s3c2410-led.oled01

all:

$(TARGET)

s3c2410-led.o:

s3c2410-led.c

$(CC)-c$(CFLAGS)$^-o$@

led01:

led01.o

$(CC)$^-o$@

clean:

rm-f$(TARGET)*.o*~core.depend

“$(CC)$^-o$@”和“rm-f$(TARGET)*.o*~core.depend”前面的空白有一个Tab制表符生成,不能单纯有空格代替。

3.4实验环境的连接

1).配置实验的环境。

一、配置NFS服务

NFS(NetworkFileSystem)指网络文件系统,是Linux系统中经常使用的一种服务,NFS是一个RPCservice,很像windows中的文件共享服务。

它的设计是为了在不同的系统间使用,所以它的通讯协议设计与主机及作业系统无关。

当使用者想用远端档案时只要用"

mount"

就可把remote档案系统挂接在自己的档案系统之下,使得远端的档案在使用上和local的档案没两样。

在NFS服务中,宿主机(Servers)是被挂载(mount)端,为了远端客户机(Clients)(如:

S3C6410目标板)可以访问宿主PC机的文件,我们需要配置宿主机两方面内容:

①打开NFS服务,②允许“指定用户”访问宿主PC机。

A、在终端中输入命令安装NFS服务:

apt-getinstallnfs-kernel-server

B、输入以下命令以配置NFS服务:

sudogedit/etc/exports

打开文件后,在文件中添加如下内容:

/temp/tftpboot/nfsroot*(insecure,rw,sync,no_root_squash)

添加完毕,保存文件并退出,继续输入如下命令,为NFS服务端所在目录授予权限:

chmod777/temp/tftpboot/nfsroot

C、重新启动NFS服务

sudo/etc/init.d/nfs-kernel-serverrestart

sudo/etc/init.d/portmaprestart

D、测试NFS服务:

showmount–e

mount172.16.41.217:

/temp/tftpboot/nfsroot/mnt

ls-l/mnt

二、配置超级终端

A、在Windwos操作系统下,打开超级终端,新建一个连接,步骤如下:

首先为新建连接输入一个名称,然后选择我们所需要连接到的端口,最后配置端口属性,这里只需要修改两处:

①位/秒(B):

115200,②数据流控制(F):

无。

B、连接到开发板

C、配置开发板

仅仅连接到开发板还不够,要使用开发板进行开发测试工作,需要进行一定的配置后,才能正常工作,接下来准备在超级终端下对开发板进行配置

按如下步骤在超级终端下分别输入如下命令:

Ⅰ、setenvbootargsnoinitrdinit=/linuxrcconsole=ttySAC2,115200mem=256Mroot=/dev/nfsnfsroot=172.16.41.217:

/temp/tftpboot/nfsrootip=172.16.41.35:

172.16.41.217:

172.16.41.1:

255.255.255.0:

:

eth0:

off

Ⅱ、setserverip172.16.41.217

Ⅲ、seti

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

当前位置:首页 > 自然科学 > 物理

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

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