版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告题目:LED灯控制组 员:苟发强 计0601-2 曹 波 计0601-2指导教师:井海明 姚雄伟2008年12月一、【问题描述】以S3C2410RP Linux实验开发平台为基础,用Linux 下的C语言实现对8X8LED点阵中各灯的控制来实现输出一些简单的文字和图形。在8X8 LED点阵上显示柱行,让其先从左到右平滑移动多次次,同时从上到下平滑移动三次;然后,数字0-9循环显示;接着,左旋转 等等如此循环下去。 二、【需求分析】在新兴应用市场不断出现的带动下,近些年 LED 市场规模快速提升。 它的应用也趋向多元化。 应用一:显示屏是 LED 主要应用市场,全彩显示屏增势强劲。 应用
2、二:小尺寸背光源市场放缓,中大尺寸将成为新关注点。应用三:汽车车灯市场潜力大,但短期内市场很难启动。应用四:室内装饰灯市场逐步启动,交通灯市场进入平稳增长期。应用五:景观照明市场快速发展, 2007 年市场增速达到高峰。三、【概要设计】1电路原理图:8X8点阵LED结构如下图所示2、原理分析:从图中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:一根竖柱:对应的列置1,而行则采
3、用扫描的方法来实现。一根横柱:对应的行置0,而列则采用扫描的方法来实现。3、设计过程 (1)首先,通过调用驱动程序让我们能够控制LED灯,然后利用我们的程序控制行线和列线点亮一个LED灯。 (2)然后,用一个循环实现控制控制点的移动;再分别设计竖柱的右移,行柱的下移,平面的右移,平面的下移,数字循环显示,笑脸图片等。 (3)接着,将这些所有的图片,衔接到一起,让它们实现,自动的循环输出10次用。(4) 最后, QT设计一个简单的图形界面,通过简单的测试界面,用户可以很容易的激活此程序自动执行。运行结束后,用户按退出按钮,退出系统!四、【详细设计】1、控制一个灯亮,通过上述,原理分析要想控制一个
4、灯亮,只需要让某一列的置1,其他的为0 , 行为0,其它的都为1;比如:第一行,第八列的灯亮,其它的都灭!则DR8,DR7,DR6,DR5,DR4,DR3,DR2,DR1为,DC8,DC7,DC6,DC5,DC4,DC3,DC2,DC1为 则可以实现相应的灯亮! 说明:但是在此系统中,对于LED的驱动程序将DR8-DR1 和DC8-DC1 链接起来构成DR8-DR1高位 DC8-DC1地位构成16位二进制数,然后,将此数转换为十进制数,然后用次十进制数来控制一个所有灯的灭与亮!例如上述的就可以用0000这个二进制数对应的十进制数65152 来控制这一只灯亮! 通过分析我们可以得到一个64个点的
5、求法:Int moban8=1,2,4,8,16,32,64,128; For(i=0;i8;i+)For(j=0;j8;j+) Aij=256*(255-mobani)+mobanj;通过此函数,就可以求出控制每一个的相应数字,这样我们就可以保证输出任何一种图形!2、用一个循环实现控制控制点的移动;再分别设计竖柱的右移,行柱的下移,平面的右移,平面的下移,数字循环显示,笑脸图片等。(1)让竖柱循环右移:可是用moban8里面的数字,依次显示,就可以实现竖柱的右移!(2)行柱的下移:可以用 For(i=0;i8;i+)Rowi=256*(255-mobani)+255;求出每一行的控制数字然后
6、,让它们依次显示,就是行柱下移。 (3)平面右移:可以用先亮一列,再亮俩列,依次增加,直到全亮,就可以实现平面右移的效果,可以用for(i=0;i8;i+) MianRi=2i+1-1; 求出的八个数就是实现平面右移的数字! (4)平面下移:同上述:先用一行亮,再用两行,依次增加直到八行都亮!可以用 for(i=0;i8;i+) MianDi=256*(255-(2i+1-1)+255;求出八个数就是实现平面下移的数字 (5)0-9的数字循环依照上述算法,推到出来! (6)笑脸的图案是我们自己用人工的方法结合上述的算法,推导出相应的点;便可实现其功能! 3、用一个大的for循环可以控制,所有的
7、图形,依次执行10次 ! 4、用QT设计简单的测试界面:1)、用主窗口MainWindow ,其中插入俩个按钮Maketest和Exit2)、用Maketest按钮,调用Maketest()函数,测试程序进行测试3)、用Exit按钮,调用Exit()函数,结束测试说明:主要应用了图形界面与程序代码的纽带,信号和槽例:(1) 在mainwindows.h定义俩个信号按钮: QPushButton *Maketest; QPushButton *Exit;(2)在test.h里面定义俩个槽 public slots: int Maketest(); void Exit(); (3)在mainwin
8、dows.cpp创建俩个点击信号按钮并于相对应的槽事件连接起来 Maketest=new QPushButton(TEST,this); Exit=new QPushButton(Quit,this); QObject:connect(Maketest,SIGNAL(clicked(),tests,SLOT(Maketest(); QObject:connect(Exit,SIGNAL(clicked(),tests,SLOT(Exit();五、【程序测试及操作介绍】 1、在2410RP 目标板上运行驱动程序和测试程序:在宿主PC 机端,打开一个终端窗口(Terminal),点击【红帽Syst
9、em ToolsTerminal】启动终端窗口,输入下列10 条命令,如图22-3: ifconfig eth0 192.168.0.100 minicom Ctrl+C Enter mount -o soft,timeo=100,rsize=1024 192.168.0.100:/ /mnt/*将宿主PC 机的根目录挂载到S3C2410-RP 目标板的mnt 目录下*/ cd /mnt/2410RP_linux/Experiment_Key/LED_Array/driver insmod led_ary.o /*加载驱动程序 */ lsmod /*查看系统已经加载好的驱动程序 */ cd .
10、/mnt/tmp/Mtest ./test qws 2、弹出下图对话框:3、点击Test进行测试!将显示如下: 图(1) 炫灯图(2)跑马灯 图(3)数字显示0图(4)数字显示2图(5)数字显示 34、演示结束以后,直接点击Quit 就可以退出!六、【程序代码】【Main.cpp】#include#include mainwindow.hint main(int argc,char *argv) QApplication app(argc,argv); MainWindow *mainwindow =new MainWindow(0); mainwindow-setGeometry(60,60
11、,200,200); app.setMainWidget(mainwindow); mainwindow-show(); int result =app.exec(); return result;【Mainwindow.h】#ifndef MAINWINDOW_H#define MAINWINDOW_H#include#includetest.hclass MainWindow:public QWidget Q_OBJECT public: MainWindow(QWidget *parent=0,const char *name=0); private: QPushButton *Make
12、test; QPushButton *Exit; Test *tests;#endif【Mainwindows.cpp】#include mainwindow.hMainWindow:MainWindow(QWidget *parent,const char *name):QWidget(parent,name) QFont f(Helvetica,14,QFont:Bold); setFont(f); Maketest=new QPushButton(TEST,this); Maketest-setGeometry(50,15,90,40); Exit=new QPushButton(Qui
13、t,this); Exit-setGeometry(50,70,90,40); tests=new Test(this); tests-setGeometry(50,125,90,40); QObject:connect(Maketest,SIGNAL(clicked(),tests,SLOT(Maketest(); QObject:connect(Exit,SIGNAL(clicked(),tests,SLOT(Exit();【test.h】#ifndef TEST_H#define TEST_H#includeclass Test:public QWidget Q_OBJECT publi
14、c: Test(QWidget *parent=0,const char *name=0); public slots: int Maketest(); void Exit(); private: /int buf; QLabel *label; #endif【Test.cpp】#include#include#include#include#include#include #include #include #include test.hTest:Test(QWidget *parent,const char *name): QWidget(parent,name) label=new QL
15、abel(0,this); label-setAlignment(AlignVCenter|AlignHCenter);int Test:Maketest() int fd;int i,j,z,n,m,ret; int movR9=1,3,7,15,31,63,127,255; int zhuanD46=65025,32513,32640,65152,63240,61200,64257,32516,57216,65056,63248,61192,61185,32528,63360,65032,63240,61200,48897,32576,64896,65026,63248,61192; in
16、t zeng88=0,0,0,63256,61208,0,0,0, 0,0,64382,63268,61220,57214,0,0, 0,64894,64322,63298,61250,57154,49022,0, 65150,64897,64385,63361,61313,57217,49025,32638; int dot64=65152,65088,65056,65040,65032,65028,65026,65025,64769,64770,64772,64776,64784,64800,64832,64896,64257,64258,64260,64264,64272,64288,6
17、4320,64384,63233,63234,63236,63240,63248,63264,63296,63360,61185,61186,61188,61192,61200,61216,61248,61312,57089,57090,57092,57096,57104,57120,57152,57216,48897,48898,48900,48904,48912,48928,48960,49024,32513,32514,32516,32520,32528,32544,32576,32640; int she64=65025,65026,65028,65032,65040,65056,65
18、088,65152,64769,64257,63233,61185,57089,48897,32513,32514,32516,32520,32528,32544,32576,32640,49024,57216,61312,63360,64384,64896,64832,64800,64784,64776,64772,64770,64258,63234,61186,57090,48898,48900,48904,48912,48928,48960,57152,61248,63296,64320,64288,64272,64264,64260,63236,61188,57092,57096,57
19、104,57120,61216,63264,63248,63240,61192,61200,; int Number107=65084,64804,64292,63268,61220,57124,48956,65056,64800,64288,63264,61216,57120,48928,65084,64800,64288,63292,61188,57092,48956,65084,64800,64288,63292,61216,57120,48956,65060,64804,64292,63292,61216,57120,48928,65084,64772,64260,63292,6121
20、6,57120,48956,65084,64772,64260,63292,61220,57124,48956,65084,64800,64288,63264,61216,57120,48928,65084,64804,64292,63292,61220,57124,48956,65084,64804,64292,63292,61216,57120,48956; int zhuan48=65027,64774,64268,63256,61208,57136,48992,32704,65048,64792,64280,63256,61208,57112,48920,32536,65216,648
21、64,64304,63256,61208,57100,48902,32515,0,0,0,63487,61439,0,0,0 ; int row8=1,2,4,8,16,32,64,128; int line8=65279,65023,64511,63487,61439,57343,49151,32767;int row148=65048,64792,64280,63256,61208,57112,48920,32536,65060,64804,64292,63268,61220,57124,48932,32548,65090,64834,64322,63298,61250,57154,489
22、62,32578,65153,64897,64385,63361,61313,57217,49025,32641;int row28=;fd=open(/dev/led_ary,O_RDWR);if (fd0)printf(Open device SimpleD errorn);elseprintf(Open device SimpleD successn);for(m=0;m100;m+) for(ret=0;ret2;ret+) for(i=0;i9;i+) write(fd,&movRi,movRi); usleep();for(ret=0;ret10;ret+) for(i=0;i4;i+) for(n=0;n5;n+) for(j=0;j6;j+) write(fd,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024标准合作生产合同
- 04年云存储服务合同
- 2024施工合同备案表范本
- 04年光伏发电项目开发与建设合同
- 2024年互联网公司提供在线教育服务合同
- 2024年光伏发电项目开发与合作建设合同
- 2024年企业宣传与推广合同
- 2024建设银行外汇的借款合同范本
- 2024古董古玩版权使用许可合同
- 公司营销部门年终工作总结
- 电力工程施工售后保障方案
- 2024年小学心理咨询室管理制度(五篇)
- 第16讲 国家出路的探索与挽救民族危亡的斗争 课件高三统编版(2019)必修中外历史纲要上一轮复习
- 机器学习 课件 第10、11章 人工神经网络、强化学习
- 北京市人民大学附属中学2025届高二生物第一学期期末学业水平测试试题含解析
- 书籍小兵张嘎课件
- 氢气中卤化物、甲酸的测定 离子色谱法-编制说明
- 2024秋期国家开放大学专科《机械制图》一平台在线形考(形成性任务四)试题及答案
- 2024年黑龙江哈尔滨市通河县所属事业单位招聘74人(第二批)易考易错模拟试题(共500题)试卷后附参考答案
- 私募基金管理人-廉洁从业管理准则
- 房地产估价机构内部管理制度
评论
0/150
提交评论