基于LINUX系统的嵌入式LED显示的设计

上传人:小** 文档编号:76543572 上传时间:2022-04-18 格式:DOC 页数:26 大小:1.04MB
收藏 版权申诉 举报 下载
基于LINUX系统的嵌入式LED显示的设计_第1页
第1页 / 共26页
基于LINUX系统的嵌入式LED显示的设计_第2页
第2页 / 共26页
基于LINUX系统的嵌入式LED显示的设计_第3页
第3页 / 共26页
资源描述:

《基于LINUX系统的嵌入式LED显示的设计》由会员分享,可在线阅读,更多相关《基于LINUX系统的嵌入式LED显示的设计(26页珍藏版)》请在装配图网上搜索。

1、摘要嵌入式系统是先进的计算机技术、半导体技术、电子技术以及各种具体应用相结合的产物,是技术密集、资金密集、高度分散、不断创新的新型集成知识系统。本次课程设计的目的是在有C语言基础,掌握在Linux下常用编辑器的使用Makefile 的编写和使用以及Linux下的程序编译与交叉编译过程需要部分数字电路的知识的基础上。学习LED的相关知识, 掌握74HC273芯片的工作原理以及了解SPI接口的相关知识。主要内容是学习LED相关知识,了解74HC273芯片对LED点亮的工作机制,熟练阅读74HC273芯片资料,掌握对它的使用。 关键词:嵌入式系统、LED、点阵目录一、引言1二、嵌入式系统的特点21、

2、概念22、8段LED原理33、点阵式LED原理34、LED数码管电路图45、74HC273在开发板上的连接5四、实验部分61、实验设备及工具62、实验基础63、实验环境连接7五、 实验步骤121、阅读理解源码122、编译应用程序123、下载调试13六、心得体会15七、参考文献16附录:17一、引言目前,嵌入式技术已成为通信和消费类产品的共同发展方向。嵌入式系统几乎包括了生活中的所有电器设备,如掌上、移动计算设备、电视机顶盒、手机上网、数字电视、多媒体、汽车、微波炉、数字相机、家庭自动化系统、电梯、空调、安全系统、自动售货机、蜂窝式电话、消费电子设备、工业自动化仪表与医疗仪器等。嵌入式系统是先进

3、的计算机技术、半导体技术、电子技术和各个行业的具体应用相结合的产物,这就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。嵌入式系统一般指非系统。它是以应用为中心、软硬件可裁减的、能适应应用系统对功能、可靠性、成本、体积、功耗等综合性要求的专用计算机系统。简单地说,嵌入式系统是集系统的应用软件与硬件于一体,类似于中的工作方式,具有软件代码小、高度自动化、响应速度快等特点,因此特别适合于要求实时和多任务的系统。嵌入式系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成。二、嵌入式系统的特点嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适应引

4、用系统对功能、可靠性、成本、体积、功耗严格要求的计算机系统。)嵌入式系统通常是面向特定应用的,嵌入式与通用型的最大不同就是,嵌入式大多工作在为特定用户群设计的系统中,它通常都具有低功耗、小体积、高集成度等特点,能够把通用中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,因此,器件的移动能力大大增强,同时跟网络的耦合也越来越紧密。)嵌入式系统的硬件和软件都必须高效地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。)因为嵌入式系统和具体应用有机地结合在一起,它的升级换代也和具体产品同步进行,所以,嵌入式系统产品

5、一旦进入市场,一般都具有较长的生命周期。)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机之中,而不是存贮于磁盘等载体中。嵌入式系统本身不具备自举开发能力,即使在设计完成后,用户也不能对其中的程序进行修改,而是必须有一套开发工具和环境才能进行开发。三、LED基本原理1、概念 在某些半导体材料的 PN 结中,注入的少数载流子与多数载流子复合时会 把多余的能量以光的形式释放出来,从而把电能直接转换为光能。PN 结加反 向电压,少数载流子难以注入,故不发光。这种利用注入式电致发光原理制 作的二极管叫发光二极管,通称 LED。LED 的发光颜色和发光效率与制作 LED 的

6、材料和工艺有关,目前广泛使用 的有红、绿、蓝三种。由于 LED 工作电压低(仅 1.5-3V),能主动发光且有 一定亮度,亮度又能用电压(或电流)调节,本身又耐冲击、抗振动、寿命 长(10 万小时),所以在大型的显示设备中,目前尚无其他的显示方式与 LED 显示方式匹敌。 把红色和绿色的 LED 放在一起作为一个像素制作的显示屏叫双基色屏或 伪彩色屏;把红、绿、蓝三种 LED 管放在一起作为一个像素的显示屏叫三基 色屏或全彩屏。制作室内 LED 屏的像素尺寸一般是 2-10 毫米,常常采用把几 种能产生不同基色的 LED 管芯封装成一体,室外 LED 屏的像素尺寸多为 12-26 毫米,每个像

7、素由若干个各种单色 LED 组成,常见的成品称像素筒或像素模 块。 LED显示屏如果想要显示图象,则需要构成像素的每个 LED 的发光亮度都 必须能调节,其调节的精细程度就是显示屏的灰度等级。灰度等级越高,显 示的图像就越细腻,色彩也越丰富,相应的显示控制系统也越复杂。在当前 的技术水平下,256 级灰度的图像,颜色过渡已十分柔和,图像还原效果比 较令人满意。 资料显示,LED 光源比白炽灯节电 87%、比荧光灯节电 50%,而寿命比白 炽灯长 2030 倍、比荧光灯长 10 倍。LED 光源因具有节能、环保、长寿命、安 全、响应快、体积小、色彩丰富、可控等系列独特优点,被认为是节电降能 耗的

8、最佳实现途径。2、8段LED原理 LED的7个字段分别称为a、b、c、d、e、f、g,有时还有一个小数点段h,图1(a)所示。通过7个(或8个)发光段的不同组合,显示09和AF共16个字母数字,从而实现十六进制的显示。为使7段显示器显示数字或字符,就需点亮相应的段,每个段分别由数据线进行控制,通常数据线D0D7顺序控制ah段,如图11-34(b)所示,所需的控制信号称为段码。由于数字与段码之间没有规律性,因此必须进行数字与段码之间的转换以便显示数字。常用的转换方法是将要显示字形的段码列成一个表,称为段码表。显示时,根据字符查段码表,取出其对应的段码送到数据线上来控制显示。3、点阵式LED原理点

9、阵式LED的显示单元一般由8行8列LED组成,其外形及内部连接如图3所示,可以再由这8行8列的LED拼成更大的LED阵列。点阵式LED显示器能显示各种字符、汉字及图形、图像,并具有色彩。点阵式LED中,每个LED表示一个像素,通过每个LED的亮与灭来构造出所需的图形,各种字符及汉字也是通过图形方式来显示的。对于单色点阵式LED,每个像素需要1位二进制数表示,1表示亮,0表示灭。对于彩色点阵式LED,则每个像素需要更多的二进制位表示,通常需要一个字节。点阵式LED显示器的显示控制采用扫描方式,在数据存储器中开辟若干个存储单元作为显示缓冲区,缓冲区中存有所需显示图形的控制信息。显示时依次通过列信号

10、驱动器输出一行所需所有列的信号,然后再驱动对应的行信号,控制该行显示。只要扫描速度适当,显示的图形就不会出现闪烁4、LED数码管电路图 其中各个引脚的功能在下面都有描述。 图1.LED数码管电路图5、74HC273在开发板上的连接74HC273 在 8 字数码管中开发板中的连接如下图所示: 图2. 开发板上的7段LED的连接 开发板设置2 个数码管,由74HC273 控制。74HC273是同步串行转并行的锁存器,在此通过SPI 总线和CPU 连接,锁存数据后驱动数码管发光。 图3. 开发板上点阵式LED的连接四、实验部分1、实验设备及工具 硬件:UP-TECH S2410/P270 DVP 嵌

11、入式实验平台、PC 机 Pentium 500 以 上, 硬盘 10G 以上。 软件:PC 机操作系统 REDHAT LINUX 9.0MINICOMARM-LINUX 开发环境 2、实验基础 目的是为后续实验搭建好软、硬件环境,配置好相关的协议、服务,并 通过编写最简单的HelloWorld程序进行测试。由于实验都要依靠前面的配 置,本段只着重叙述实验的具体实现。3、实验环境连接(1)、建立工作目录 rootzxt smile# mkdir hello rootzxt smile# cd hello(2)、编写程序源代码 用下面的命令来编写 hello.c 的源代码,进入 hello 目录使

12、用 vi 命令来编辑代码: rootzxt hello# vi hello.c按“i ” 或者“a ” 进入编辑模式,将上面的代码录入进去,完成后按 Esc 键进入命令状态,再用命令“:wq” 保存并退出。这样我们便在当前目录下建立了一个名为 hello.c 的文件。进入/arm2410cl/exp/basic/10_led 目录,使用 vi 编辑器或其他编辑器阅读理解源代码 (3)、编译应用程序 运行 make 产生 test_led 可执行文件 test_led(4)、编写Makefile(5)、编译应用程序 在 hello 目录下运行“make” 来编译我们的程序了。如果进行了修改,重

13、新编译则运行:rootzxt hello# make cleanrootzxt hello# make(6)、下载调试 在宿主 PC 计算机上启动 NFS 服务,并设置好共享的目录,在建立好 NFS 共享目录以后,我们就可以进入 MINICOM 中建立开发板与宿主 PC 机之间的通讯了。其步骤如下: 服务器设置,输入命令”setup”分别进行对系统服务及防火墙配置。 图1 服务器配置 为宿主PC机配置了NFS服务 NFS(Network File System)指网络文件系统,它实现了文件在不同的系统间使用。当我们想用远端档案时,只需调用“mount”就可以远端系统挂接在自己的档案系统之下。每

14、次重启宿主PC机时,先输入命令”service portmap restart”和”service nfs restart”,以启动nfs服务。 启动vi编辑器查看网段 输入命令”Vi /etc/exports”查看网段为”192.168.0.*”,按键”ESC”,输入”: wp”存盘退出。 重新启动NFS服务,输入”ifconfig eth0 192.168.0.110”完成主机IP地址设置。 图2 NFS服务器配置 进入共享文件”cd /root/share/exp/basic/10_led”,输入”ls”查看10_led 下的两个.c文件。 输入”make clean”,”make”生成

15、两个.0文件。转入超级终端硬件连接:连接宿主机和UP-TECH S2410/P270 DVP 嵌入式实验平台。打开宿主PC 机电源,进入 Linux操作系统。(7)、启动实验平台 硬件连接: 连接电源,将12V电源线的连到UP-NETARM2410-CL的电源接口;连接串口线,一端连接PC的串口,另一端连接到UP-NETARM2410-CL的串口(RS232-0);连接网线,将随机附带的交叉网线把UP-NETARM2410-CL靠近于电源接口的网口和PC机的网口连接好。 建立超级终端:运行Windows系统下(以WindowsXP为例)开始所有程序附件通讯超级终端(HyperTerminal)

16、。 新建一个通信终端。如果要求输入区号、电话号码等信息请随意输入,出现如图所示对话框时,为所建超级终端取名为arm,可以为其选一个图标。单击“确定”按钮 图3 新建超级终端 在接下来的对话框中选择ARM开发平台实际连接的PC机串口(如COM1),按确定后出现如图所示的属性对话框,设置通信的格式和协议。这里波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。按确定完成设置。完成新建超级终端的设置以后,可以选择超级终端文件菜单中的另存为,把设置好的超级终端保存在桌面上,以备后用。用串口线将PC机串口和平台UART0正确连接后,就可以在超级终端上看到程序输出的信息了。 图4 超级终端

17、端口设置 启动实验平台 ::打开电源开关,系统会由VIVI开始引导。正常启动时会显示启动信息到“Press Return to start the LINUX now, any other key for vivi”,按除回车键外的其它键则进入vivi控制台。 图5 启动超级终端平台 图6 超级终端命令输入 输入”ping192.168.0.122”和”192.168.0.121”查看是否连通,若成功连接,”Ctrl+C”结束,在进行挂载后,查找根目录下的文件”cd /host/exp/basic/10_led”,通过“ls”查看文件,然后使用“insmod s3c2410-led.o ”命令

18、完成将一个可动态加载的模块加载到内核中。输入” lsmod” 显示当前内核加载的模块,输入命令”./test_led”进行程序测试。 图7 下位机运行五、实验步骤 1、阅读理解源码 进入/arm2410cl/exp/basic/10_led 目录,使用 vi 编辑器或其他编辑器阅读理解源代码 2、编译应用程序 运行 make 产生 test_led 可执行文件 test_led rootBC exp/basic# cd 10_led rootBC 10_led# make armv4l-unknown-linux-gcc -c -I. -Wall -O -D_KERNEL_ -DMODULE

19、-I/home/kernel/linux-2.4.18-2410cl/include s3c2410-led.c -o s3c2410-led.o armv4l-unknown-linux-gcc -I. -Wall -O -D_KERNEL_ -DMODULE -I/home/kernel/linux-2.4.18-2410cl/include -c -o test_led.o test_led.c rootBC 2410-Classics LED# ls Makefile readme s3c2410-led.c s3c2410-led.o test_led test_led.c test

20、_led.o3、下载调试 切换到 minicom 终端窗口,使用 NFS mount 开发主机的/arm2410cl 到/host 目录,然后进入/host/exp/basic/10_led 目录,用 insmod s3c2410-led.o 命令插入 led 驱动,并用 lsmod命令查看是否已经插入。/mnt/yaffsmount -t nfs -o nolock 192.168.0.189:/arm2410cl /host /host/exp/basiccd 10_led/ /host/exp/10_ledls Makefile readme s3c2410-led.c s3c2410-

21、led.o test_led test_led.c test_led.o /host/exp/10_ledinsmod s3c2410-led.o Using s3c2410-led.o 0-numeric tube : Dprintk device open s3c2410-hc273 initializedUsing exio.o /host/exp/10_ledlsmod Module Size Used by Tainted: P s3c2410-led 2048 0 (unused) /host/exp/10_led./test_led 即可以看到8字数码管和点阵数码管工作。六、 结

22、果分析七、心得体会通过做这次ARM嵌入式课程设计我深深的体会到,专心投入去完成一件事情是多么让人激动不已的,当某个环节的问题被你解决后,那种成就感能带给自己更大的信心和激发你对学习的热情,可能这是大学最后一个课程设计的原因,我把大量的精力和激情都投入到这次课程设计中,所以在整个学习过程中,我解决了一些平时没有碰到的问题,这更让我对技术这个行业产生强烈的兴趣,下面是我这两周的课程设计心得。这次课程设计我们做的是在ARM嵌入式平台上通过LED显示不同的符号,这是一个具有挑战性的功课,我们组分完每个人的任务后,接下来查资料,设计,分析,和同学讨论,在电脑上用软件仿真,这几天,紧张而又充实。这次课程设

23、计是对我所学知识的全面检验。我们在课堂上掌握的仅仅是专业基础课的理论面,如何去面对实际的设计是一个值得我们思考的问题,又如何把我们学的书本内容运用到实际中呢?我想做本次课程设计就给我们提供了良好的实践平台。在本次课程设计中我感触很深的就是要查阅很多指导书籍。在此次设计中,我学会了自上而下的系统设计思想,掌握了综合应用所学理论的能力,而且对我的毅力是个考验,我是连续将近两周周做下来的。对我而言,知识上的收获重要,精神上的丰收喜。挫折是一份财富,经历是一份拥有。此次课程设计将对我今后的进步产生积极影响。最后由衷感谢老师的指导,同学的帮助。八、参考文献 【1】赵宏,曹洁.Linux系统指南.成都:西

24、南交通大学出版社,2008【2】张晓林,崔迎炜.嵌入式系统设计与实现。北京:北京航空航天大学出版社,2006【3】杨刚.嵌入式基础实验教程.北京:北京大学出版社,2007【4】陈文智.嵌入式系统开发原理与实践 .北京:清华大学出版社,2005【5】杜春雷.ARM体系结构与编程.清华大学出版社,2007【6】博创公司.2410经典实验指导书3.2.北京博创兴业科技有限公司,2007【7】郑慕德.嵌入式微型计算机系统实例教程.北京:科学出版社,2006【8】刘洪涛,孙天泽.嵌入式技术与设计.北京:人民邮电出版社,2009【9】【10】,2009.8.6【11】http:/wwww.broadex-

25、,2009.1.2附录:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* debug macros */#undef DEBUG#define DEBUG#ifdef DEBUG#define DPRINTK( x. )printk(s3c2410-led: x)#else#define DPRINTK( x. )#endif#defi

26、ne DEVICE_NAME s3c2410 led#define LED_TUBE_PHY_START 0x08000110#define LED_DIG_PHY_START 0x08000100#define LED_TUBE_IOCTRL 0x11#define LED_DIG_IOCTRL 0x12static int ledMajor = 0;#define LED_MINOR 1#ifdef CONFIG_DEVFS_FSstatic devfs_handle_t devfs_led_dir,devfs_led;#endifstatic u32 s3c2410_led_tube_a

27、ddr = IDE_BASE + 0x100;static u32 s3c2410_led_dig_vaddr = IDE_BASE + 0x110;static int s3c2410_led_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned int arg)/printk(DOT buffer is %xn ,arg8 ); switch(cmd) case LED_DIG_IOCTRL: return *(volatile unsigned long *)s3c2410_led_dig_va

28、ddr=(arg8) | arg 16; ; default : return printk(your command is not exist); return 0;static ssize_t s3c2410_led_write(struct file *filp, const char *buf, size_t count, loff_t * f_pos)int i;unsigned char mdata16;if (copy_from_user(mdata,buf,10) return -EFAULT;for (i=0;i8;i+)/printk(:%d ,mdatai);/*(vol

29、atile unsigned char *)(s3c2410_led_tube_addr+i)=0xff;*(volatile unsigned char *)(s3c2410_led_tube_addr+i*2)=mdatai;/printk(:%x ,*(volatile unsigned short *)(s3c2410_led_tube_addr+i);/printk(n); return 0;static int s3c2410_led_open(struct inode *inode, struct file *filp) MOD_INC_USE_COUNT; printk(led

30、 device open sucess!n); return 0;static int s3c2410_led_release(struct inode *inode, struct file *filp) MOD_DEC_USE_COUNT; printk(led device releasen); return 0;static struct file_operations s3c2410_led_fops = owner:THIS_MODULE, open:s3c2410_led_open, ioctl:s3c2410_led_ioctl, write:s3c2410_led_write

31、, release:s3c2410_led_release,;int _init s3c2410_led_init(void) int ret;BWSCON = (BWSCON & (BWSCON_ST1 | BWSCON_WS1 | BWSCON_DW1) | (BWSCON_ST1 | BWSCON_DW(1, BWSCON_DW_16);BANKCON1= BANKCON_Tacs4 | BANKCON_Tcos4 | BANKCON_Tacc14 |BANKCON_Toch4 | BANKCON_Tcah4 | BANKCON_Tacp6 | BANKCON_PMC1;GPACON|=

32、(112); ret = register_chrdev(0, DEVICE_NAME, &s3c2410_led_fops); if (ret 0) DPRINTK(DEVICE_NAME cant get major numbern); return ret; #ifdef CONFIG_DEVFS_FS devfs_led_dir = devfs_mk_dir(NULL, led, NULL); devfs_led = devfs_register(devfs_led_dir, 0raw, DEVFS_FL_DEFAULT, ledMajor,LED_MINOR, S_IFCHR | S

33、_IRUSR | S_IWUSR, &s3c2410_led_fops, NULL);#endif DPRINTK (DEVICE_NAMEtdevice initializedn); return 0; void _exit s3c2410_led_exit(void)#ifdef CONFIG_DEVFS_FSdevfs_unregister(devfs_led);devfs_unregister(devfs_led_dir);#endifunregister_chrdev(ledMajor, DEVICE_NAME);module_init(s3c2410_led_init);modul

34、e_exit(s3c2410_led_exit);#include #include #include #include #include #include /#include #define TUBE_IOCTROL 0x11#define DOT_IOCTROL 0x12void jmdelay(int n) int i,j,k; for (i=0;in;i+) for (j=0;j100;j+) for (k=0;k100;k+);int main() int fd; int i,j,k; unsigned int LEDWORD; unsigned int MLEDA8; unsign

35、ed char LEDCODE10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; unsigned char dd_data1610=0xff,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0x1,0x1,0x1,0x1,0x1,0

36、x1,0x1,0x1,0,0,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0,0,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0,0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0,0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0,0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0,0,

37、; fd=open(/dev/led/0raw,O_RDWR); if (fd 0) printf(#Led device open fail#n); return (-1); LEDWORD=0xff00; printf(will enter TUBE LED ,please waiting . n); LEDWORD=0xff00; ioctl(fd,0x12,LEDWORD); sleep(1); for (j=0;j2;j+) for (i=0;i10;i+) LEDWORD=(LEDCODEi8)|LEDCODE9-i; ioctl(fd,0x12,LEDWORD); jmdelay(1500); printf(will enter DIG LED ,please waiting . n); sleep(1); for (i=0;i16;i+) write(fd,dd_datai,10);jmdelay(1000); while(1)unsigned char a10; for (i=0;i10;i+)ai = rand() % 255;write(fd,a,10);jmdelay(500); close(fd); return 0;23

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!