嵌入式系统软硬件设计_第1页
嵌入式系统软硬件设计_第2页
嵌入式系统软硬件设计_第3页
嵌入式系统软硬件设计_第4页
嵌入式系统软硬件设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统软、硬件设计实验报告嵌入式系统的软、硬件设计实验报告 实验题目:交通灯控制系统 2015年1月南京理工大学自动化学院目 录1、实验设计目的和要求12、实验原理分析23、实验解决方案64、软件具体设计95、调试及结果分析146、个人工作15附录19软件设计文档.19.部分重要程序源代码.22 嵌入式系统的软、硬件设计实验报告1、实验设计目的和要求1.1实验目的本实验是基于嵌入式教学实验基础进行再开发,实现交通灯控制系统多项功能。主要的设计目的是:交通灯(LED灯)基本流程控制,时间倒计时显示、行驶方向指示、蜂鸣器报警(响声频率可调)、模拟各方向车辆行驶(南北方向以步进电机转动表示,东西

2、方向以直流电机转动表示)。1.2实验具体设计要求 led: 南北绿灯,东西红灯(20秒) ; 南北方向绿灯闪烁(3秒); 南北方向黄灯(1.5秒); 南北方向红灯,东西绿灯(20秒); 东西方向绿灯闪烁(3秒); 东西方向黄灯亮(1.5秒)。 回到LCD: LCD屏幕上显示倒计时,并且显示箭头指示当前可以通行的方向。蜂鸣器:当绿灯闪烁时蜂鸣器发声。电机:东西方向绿灯亮时直流电机转动,南北方向绿灯亮时步进电机转动。键盘:当键2按下后,系统的处于暂停状体(电机和指示灯保持目前状体不变,倒计时暂停保持当前数字)。当键1按下后,系统退出暂停,继续暂停前状态执行。当键3按下后,退出系统。基于以上设计要求

3、,本实验最中完成后实现的功能流程如下图1-1所示:图1-1 交通灯系统流程图1.3实验设备 (1)PC 兼容机一台,操作系统为Windows,虚拟机有Linux系统; (2)ICETEK-OMAPL138-A实验箱。2、实验原理分析ICETEK-OMAPL138-A套件是一块以OMAPL138为核心的双核处理器扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备,也可以接受外设发送的各种数据、信息。CTR设备连接在EMIFA的片选4上,所以通过操作以片选4为基础地址(0x64000000)的空间再加上设备控制寄存器的偏移就可以访问到实验箱上的CTR设备。 交通灯控制C

4、TR上的发光二极管显示阵列的显示是由扩展端口控制,由扩展在EMIFA的地址空间接口的两个寄存器提供具体控制。在ICETEK-OMAPL138-A 套件的Linux 内核里集成了ICETEK-CTR V6.2 的驱动,驱动中将CTR 上的发光二极管做为一个标准的led 进行挂载,这样在Linux 下对这些led 的操作就可以用通用的Linux 控制和读写函数来完成。 步进电机控制步进电机是由寄存器PWMR 控制。这个寄存器映射在OMAPL138 的CE4 空间,当DSP 向该地址写数据(8 位有效值)时,高两位为10时数据的低4 位将写入PWMR 寄存器(PWM4、PWM3、PWM2、PWM1)

5、。步进电机的起动频率大于500PPS(拍每秒),空载运行频率大于900PPS。如果PWM1-4按照下面拍的顺序给电机的四相输入端送入控制信号,且频率大于900PPS,电机将开始正向转动。如果按照拍的逆序送控制信号,且频率大于900PPS,电机将开始反向转动。控制的方法是:首先设置全局控制寄存器中的PWME 位为1,再使DSP 以一定的频率改变PWM4-1 各位状态,输出正向或反向的PWM 波。在ICETEK-OMAPL138-A 套件的Linux 内核里集成了ICETEK-CTR V6.2 的驱动,驱动中给CTR 上的步进电机配置了Linux2.6 下驱动属性接口,通过操作属性文件可实现对电的

6、的起动,转速和转向的控制。 直流电机控制直流电动机使用定频调宽法。ICETEK-CTR 即显示/控制模块上直流电机部分的原理图如图2-1所示:图中PWM 输入对应ICETEK-OMAPL138-A 板上P4 外扩插座第26 引脚的UHPI_HCNTL1 信号,DSP将此引脚配置成GPIO,并在此引脚上给出PWM 信号用来控制直流电机的转速; 图中的DIR 输入对应ICETEK-OMAPL138-A 板上P4 外扩插座第29 引脚的MMCSD1_D0 信号,DSP 将此引脚配置成GPIO,并在此引脚上给出高电平或低电平来控制直流电机的方向。从DSP 输出的PWM信号和转向信号先经过2个与门和1个

7、非门再与各个开关管的栅极相连。图2-1 ICETK-CTR 直流电机模块原理图当电动机要求正转时,MMCSD1_D0 给出高电平信号,该信号分成3 路:第1 路接与门Y1的输入端,使与门Y1 的输出由PWM 决定,所以开关管V1 栅极受PWM 控制;第2 路直接与开关管V4 的栅极相连,使V4 导通;第3 路经非门F1 连接到与门Y2 的输入端,使与门Y2 输出为0,这样使开关管V3 截止;从非门F1 输出的另一路与开关管V2 的栅极相连,其低电平信号也使V2截止。同样,当电动机要求反转时,MMCSD1_D0 给出低电平信号,经过2 个与门和1 个非门组成的逻辑电路后,使开关管V3 受PWM

8、信号控制,V2 导通,V1、V4 全部截止。在ICETEK-OMAPL138-A 套件的Linux 内核里集成了ICETEK-CTR V6.2 的驱动,驱动中给CTR 上的直流电机配置了Linux2.6 下驱动属性接口,通过操作属性文件可实现对电的的起动、占空比和转向的控制。 音频信号发生 采用DSP通用I/O引脚直接驱动的方式。硬件连接如下图2-2所示: 在ICETEK-OMAPL138-A 套件的Linux 内核里集成了ICETEK-CTR V6.2 的驱动,驱动中将CTR 上的蜂鸣器做为一个标准的拨声器进行注册挂载,这样在Linux 下对这个蜂鸣器的操作就可以用通用的Linux 控制和读

9、写函数来完成。图 2-2 蜂鸣器硬件连接图 键盘输入控制键盘输入连接如图2-3:图 2-3 键盘输入硬件连接图在ICETEK-OMAPL138-A 套件的Linux 内核里集成了ICETEK-CTR V6.2 的驱动,驱动中将CTR 上的keypad 做为一个标准的keypad 进行挂载,并将按键值映射成了标准的1 到9 的按键值,这样在Linux 下对这个keypad 的操作就可以用通用的Linux 控制和读写函数来完成。 液晶屏显示写显示数据:在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。将数据发送到相应数据控制地址即可。由于液晶模块相对于DSP

10、 来讲是慢速设备,在命令之间可能需要增加延时语句,或将CE1 空间的EMIF访问控制寄存器设置的访问延时加大。写入液晶显示模块的缓存,将数据发送到相应数据控制I/O接口即可。图 2-4 液晶显示器硬件连接在ICETEK-OMAPL138-A 套件的Linux 内核里集成了ICETEK-CTR V6.2 的驱动,驱动中将CTR 上的LCD 做为一个标准的frame buffer 设备进行挂载,这样在Linux 下对这个LCD 的操作就可以用通用的Linux 控制和读写函数来完成。液晶显示器与DSP的硬件连接如图2-4所示。3、实验解决方案根据实验目的设计要求,首先将设计任务分为定时器模块、交通灯

11、模块、倒计时模块、报警模块、电机模块和键盘控制模块;然后分别制定各模块的功能实现;最后将各个模块按一定的时序、逻辑关系整合起来,完成最初的设计要求。(一)、定时器模块 交通灯系统的工作遵循严格的时间规定,本次设计以一个定时器为时间基准来确定各模块工作的时序。定时周期为500ms。(二)、交通灯模块交通灯模块实现的是交通灯系统的主体功能,即东西南北12个led灯按照规定的时间和时序点亮和熄灭。这个模块中用到了CTR上的12个led灯。由于ICETEK-OMAPL138-A套件的Linux内核里集成了相应的驱动,这些led灯作为标准的led进行挂载。因此在Linux下对这些led的操作可以用通用的

12、Linux控制和读写函数来完成。交通灯模块中主要定义三个函数:on()点亮ledoff()熄灭ledtoggle()led状态变换一次具体实现交通灯规则时,按相应的时序关系分别点亮和熄灭相应的led灯,即可完成交通灯的亮灭控制。(三)、倒计时模块倒计时模块主要实现的是在lcd屏上显示绿灯亮的剩余时间以及通行方向箭头。倒计时以秒为单位。这个模块中用到了CTR上的LCD屏幕。这里的LCD是作为一个标准的frame buffer设备进行挂载的,在Linux下对这个LCD的操作可以用通用的Linux控制和读写函数来完成。倒计时模块中主要定义如下函数:drawshuzi(x,y,number)。参数x,

13、y指的是显示数字的左上定点的位置坐标;参数number指的是所要显示的数字。drawjiantou(n)。参数n为0显示南北箭头,n为1显示东西箭头。倒计时模块按照之前设置的定时器为基准以规定的时序显示数字和箭头,即可实现交通等系统倒计时的功能。(四)、报警模块报警模块主要实现的是当某个方向上的绿灯闪烁和黄灯点亮时,蜂鸣器会发出声音报警。提醒该方向上车辆红灯即将点亮,注意停车。报警模块主要应用了CTR上的蜂鸣器设备,这里的蜂鸣器作为一个标准的发声器进行注册和挂载,这样在Linux下对这个蜂鸣器的操作就可以用通用的Linux控制和读写函数来完成。报警模块中主要定义了如下函数:sound(freq

14、uency)蜂鸣器以频率frequency发声stopsound()蜂鸣器停止发声在规定的时间分别调用这两个函数即可实现设计要求的报警功能。(五)、电机模块电机模块模拟的是车道上行驶的车辆,步进电机代表南北方向上的车辆,当南北方向绿灯亮时步进电机运转,南北方向黄灯及红灯时步进电机停转。直流电机代表东西方向上的车辆,当东西方向绿灯亮时直流电机运转,东西方向黄灯及红灯时直流电机停转。驱动给CTR上的步进电机和直流电机配置了Linux2.6下的驱动属性接口,通过操作属性文件即可实现对步进电机和直流电机的控制。电机模块中主要定义了如下函数:nanbeidianji(speed)步进电机以速度speed

15、运转stopnanbeidianji()停止步进电机dongxidianji(speed)直流电机以速度speed运转stopdongxidianji()停止直流电机在规定的时间调用上述相应的函数,即可模拟不同方向上的车辆行为。(六)、键盘控制模块 键盘控制模块完成的是通过按键来暂停、开始和退出交通灯系统的运行。模拟了现实中人工控制交通灯的方法。这里我们采用事件驱动的方式,当有按键事件发生时,程序执行相应的功能。通过以上六个模块的设计,基本确定了交通灯系统的总体解决方案。总体解决方案的流程框图如下所示:主程序:各变量初始化,开启定时器交通灯程序流程图如图3-1: 图 3-1 交通灯流程图倒计时

16、程序流程图如图3-2:图 3-2 倒计时流程图4、软件具体设计软件具体设计中仍然将交通灯系统划分为定时器模块、交通灯模块、倒计时模块、报警模块、电机模块和键盘控制模块五大部分,分别对其进行设计。(一)、定时器模块首先用QTimer类创建一个定时器,timer = new QTimer(this);然后用QTimer类中的成员函数start(500)来开启定时器,周期为500ms。这样每过500ms定时器就会产生一个timeout()信号,我们将timeout()信号连接到适当的槽,这样就可以实现定时功能,使交通灯系统按一定的时序工作。这里我们将timeout()信号连接到两个子函数中,一个是m

17、yjiaotongdeng()子函数,这个子函数主要完成的功能是按一定的规则点亮和熄灭led灯,以及控制蜂鸣器在规定的时间发声,控制电机在规定的时间旋转。此子函数的详细设计见下述的交通灯模块。另一个子函数是daojishi()子函数,这个子函数主要完成的功能是在LCD屏幕上显示剩余时间和通行箭头,详细设计见下述的倒计时模块。将timeout()信号连接到上述两个子函数用以下语句实现:connect(timer, SIGNAL(timeout(), this, SLOT(myjiaotongdeng();connect(timer, SIGNAL(timeout(), this, SLOT(da

18、ojishi();(二)、交通灯模块交通灯模块的所有功能我们通过一个子函数myjiaotongdeng()来实现,由上述可知我们将定时器的timeout()信号连接到了这个子函数中,因此每隔500ms这个子函数就会执行一次。首先定义一个静态变量count,用来指示当前是第几次调用myjiaotongdeng()函数,每调用一次count值加1。按实验要求中所写:(1)南北绿灯亮20s,东西红灯亮20s,步进电机旋转。因为定时周期为0.5s,count值加到40表示经过了20秒。因此count值小于等于40时一直执行点亮南北绿灯、东西红灯,启动步进电机的操作。部分代码如下:if(count=40

19、) nanbeidianji(8); /启动步进电机以速度8旋转onLeds(allQleds.at(S_G) ; /S_G是宏定义,表示南边绿灯,下同 onLeds(allQleds.at(N_G) ; onLeds(allQleds.at(E_R) ; onLeds(allQleds.at(W_R); (2)南北绿灯闪烁3s,并且蜂鸣器发出报警声。代码如下:else if(count=46) sound(1200); /蜂鸣器发声 toggleLeds(allQleds.at(S_G) ; toggleLeds(allQleds.at(N_G); (3)南北绿灯熄灭,南北黄灯点亮1.5s,

20、并且步进电机停转。代码如下:else if(countclearBuffer(); /清空屏幕 lcd-drawshuzi(50,5,a); lcd-drawshuzi(70,5,b);lcd-flush(); if(cnt=1) cnt=26; flag=-1; flag+;在倒计时模块中还一个显示箭头的功能,这个用画直线函数可以很容易的实现,在这里不再赘述。(四)、报警模块报警模块中只需定义发声和停止发声两个函数。利用Linux系统函数system即可操作CTR上的蜂鸣器设备。sound(int frequency) /发声函数,参数为频率 system(echo 1 /sys/devic

21、es/platform/davinci_ctr.2/buzzer/enable); QString cmdLine = QString:fromUtf8(echo %1 /sys/devices/platform/davinci_ctr.2/buzzer/frequency).arg(frequency); system(cmdLine.toAscii();stopsound()system(echo 0 /sys/devices/platform/davinci_ctr.2/buzzer/enable);(五)、电机模块电机模块主要完成的是驱动电机旋转和停止的功能,同样可以通过操作Linux

22、系统下的驱动属性接口来控制电机。下面以步进电机为例来说明电机模块的实现方法。nanbeidianji(int speed) /驱动步进电机旋转,参数为速度QString cmdline;cmdline = QString:fromUtf8(echo %1 /sys/devices/platform/davinci_ctr.2/sa_motor/rapid).arg(speed); system(cmdline.toAscii();cmdline = QString:fromUtf8(echo 1 /sys/devices/platform/davinci_ctr.2/sa_motor/enab

23、le); system(cmdline.toAscii();stopnanbeidianji()system(echo 0 /sys/devices/platform/davinci_ctr.2/sa_motor/enable);(六)、键盘控制模块因为交通灯系统的运行是以定时器的运转作为时间基准的,因此停止定时器,就可以让交通灯系统停止运转。通过这种方式可以控制交通灯系统的暂停以及开始。驱动中将CTR上的keypad作为一个标准的keypad进行挂载,并将按键值映射成了标准的1到9的按键值,因此我们按不同的键就会返回一个不同的键值,我们定义一个事件函数来实现键盘控制的功能。keyPressE

24、vent ( QKeyEvent * e ) switch(e-key() case Qt:Key_2: timer-stop(); /按键2时,定时器停止 break; case Qt:Key_1: timer-start(); /按键1时,定时器开始 break; case Qt:Key_3: QApplication:quit(); /按键3时,程序退出 break; 5、调试及结果分析(一)实验调试:连接好试验箱各部件,打开实验箱开关,启动超级终端Davinci,启动虚拟机Ubuntu10.04。登陆超级终端。在虚拟机中对程序进行编译、安装。在超级终端中输入指令运行实验程序。(二)实验

25、结果:程序启动进入交通灯状态,南北方向绿灯亮,液晶显示器从25秒开始倒计时,显示南北方向箭头,步进电机运转。倒计时为5秒时,南北方向绿灯开始闪烁,蜂鸣器启动。倒计时为2秒时,南北方向绿灯关闭,黄灯亮,步进电机停转。倒计时应当为0秒时,液晶显示器重新由25秒开始倒计时,显示东西方向箭头,直流电机运转,蜂鸣器停止。倒计时为5秒时,东西方向绿灯开始闪烁,蜂鸣器启动。倒计时为2秒时,东西方向绿灯关闭,黄灯亮,直流电机停转。倒计时应当为0时,系统重复开始运行状态进行循环。在系统运行过程中,点击键盘数字键2,液晶显示器、指示灯、蜂鸣器静止在现有工作状态,步进电机/直流电机保持现有运转/停止状态。点击数字键

26、1,系统恢复运行。点击数字键3,系统退出。调试结果运行正常,符合设计要求。实验结果如图5-1所示:图 5-1 实验结果图1、个人承担的工作本次嵌入式课程实验中本人主要承担了以下几方面的工作:(1)研究了基础实验中给的例子程序,掌握了CTR上各个外设的使用方法,并且读懂了例子程序的编程思想,为自主性实验奠定了基础。(2)和其他两位同学商量确定了自主性实验的设计任务和目标。(3)提出了总体解决方案,并将实验工作分成了几个模块,给其他两位同学分配了各自的任务。(4)本人完成了交通灯模块的编程,并且负责完成了LCD倒计时显示和交通灯变化同步协调工作的时序设计部分。(5)和其他两位同学共同调试,解决了各

27、个模块不能协调工作的问题。(6)主要撰写了实验报告中实验解决方案和软件具体设计两部分内容。2、遇到的问题及解决方案(1)由于三人之前所学的编程语言都为C语言,对C+中的类的使用不熟悉,看懂例子程序非常困难。因此快速自学了C+中类的定义以及使用的方法。(2)起初看例子程序时不明白程序中各个子函数之间是如何调用的,以及定时是如何实现的。通过在网上查找资料知道了QTimer类的定义以及其中成员函数的功能,看懂了例子程序的工作流程,也为自主性实验编程提供了借鉴。(3)调试过程中发现交通灯的变化和倒计时显示不能同步,通过重新梳理交通灯模块和倒计时模块的时序问题,发现了编程中出现的计数问题,解决了两个模块

28、的同步问题。3、个人工作自我评价本次嵌入式课程实验中本人作为组长,积极组织两位组员商量确定了实验的设计任务及目标,并且将实验要完成的工作分为几个部分进行合理分配,确保每位组员都能参与进来,发挥各自的作用。本人认为较好的完成了组长的工作,并在实验编程中承担了主要工作。但是本次自主性实验任务也存在创新性不足的问题,主要是因为自己之前没有接触过相关的工作,基础知识薄弱,看懂例子程序花去了较多的时间,剩余的时间比较紧张,所以选择的实验任务比较简单,没有体现出创新性。在以后的学习中需要改进这方面的缺陷,多做一些有创意的实验内容。1、个人承担的工作在进行交通灯控制实验过程中承担工作:(1) 与组员共同商定

29、实验的目和设计方向,根据实验设定的初步目表,分任务的对教学实验中的基础实验部分内容(主要是交通灯控制)进行了解。(2) 对基础教学实验部分的程序进行了解(主要是交通灯控制实验源程序),共同汇总对源程序的理解和根据基础源程序构想设计程序。(3) 确定首要设计程序和实验实现,根据组长安排任务,编写倒计时数字显示程序和方向指示箭头程序。(4) 共同参与实验调试工作,对于实验出现的问题提供自己的参考意见。2、遇到的问题及解决方案交通灯系统设计过程中出现的问题及解决方案:(1)编写数字显示过程中编译一直未通过,一直提示“;”。解决方法:根据编译过程中的提示,对源程序进行查找,最终确定是在宏定义过程中多打

30、写了一个分号。造成了程序显示数字模块一直提示编译错误。把分号去掉后问题的到解决。(2) 在进行蜂鸣器发生设计过程中,一直未编译通过。 解决办法:进行蜂鸣器发生时候,设计本初是先使蜂鸣器响起来。编写过程中没有考虑到整个程序的设计,因为部分程序是直接从系统的源程序中调用。最后询问本组其他成员得到解决。(3)调试过程中,程序运行起来以后一直是原来的源程序,编写好的程序无法挂载进去。解决办法:进过几次尝试都无法挂载,最后按程序关掉试验箱,重新启动控制终端。在从新进行加载问题得到解决。3、个人工作自我评价通过这次实验,对嵌入式系统有了一定的了解。并对设计嵌入式系统原理的实验也有了一定的了解和掌握,为以后

31、更进一步学习并掌握嵌入式系统打下一定的基础。实验过程中因为源程序是同时C+语言编写,自己以前学习的是C,这次实验也给自己机会去了解和掌握了部分C+部分知识。在实际的开发板上动手实验也增强了动手能力,切实的把理论和实际联系到一起。对于系统软件设计能力有了一定的提高。在系统实现过程中软件的编写已经整体总体的设计有一定的掌握。同时通过这次实验也发现了自己的很多不足,在对实验整体的设计方面缺乏经验,对于软件编写过程缺乏一定的整体设计能力,平时对软件的编写欠缺,在操作过程中出现很多不应该犯的错误。也发现了自己对新事物的学习和自学能力不足,通过这次也给自己今后的学习指明了方向。使自己更加明确了实际和理论的

32、联系,要想学好这门课程要不断的动手,通过自己动手设计才能更好的提高自己,也真正的让自己学到知识。1、个人承担的工作在本次嵌入式课程实验中,本人主要承担了如下分工:1、 与两位同学一起在实验初期对实验平台和实验系统进行了熟悉和操作,对实验指导书上的例题逐个进行了操作实现。2、 共同讨论设计课题,确定了交通灯这项题目之后,一起讨论了可能的实验方案和总体框架。3、 完成了部分功能(蜂鸣器、电机、键盘)的编程工作,并使其顺利运行实验。4、 与两位同学一起对实验中出现的各种问题进行讨论并对程序进行更改直至程序最终顺利运行。5、 编写了实验报告中的调试及结果分析部分和软件设计文档。2、遇到的问题及解决方案

33、1、 实验初期由于对Linux系统以及Ubuntu平台的不熟悉,操作书上例题时多次失败,后经过向值班同学请教以及多次实验熟悉,最终可以顺利完成各项操作。2、 开始进行编程工作时由于对于C+的不了解以及编程水平不过关,在源文件基础上编写自己程序模块时多次产生错误并导致功能无法实现,如蜂鸣器、电机模块等。后经过对资料及书籍对C+的巩固自学,并研究实验指导书中各个例题的源程序,并借鉴其中的功能实现,搞清了各类需要的功能模块的函数编写,最终将自己的程序改正,并可以顺利进行编译、安装、运行。3、 在最终运行时偶尔出现某个单独模块无法正常运行的状况,但是在未更改程序的前提下重启实验箱并重新编译运行程序后功

34、能模块恢复正常,原因未知。3、个人工作自我评价通过嵌入式课程实验部分的学习,深刻增加了对嵌入式这项技术的理解,在上课过程中虽然学到了嵌入式技术的现状、相关硬件知识以及其他相关理论知识,但是感觉对于嵌入式的具体设计以及操作还是感觉茫然无从下手,在实验中更是深刻意识到对这门课程学习的不足,通过嵌入式实验中,学会了初级的嵌入式设计方法,并且发现了自己的C+编程水平的欠缺,为了完成实验设计,重新自学了C+的编程,提高了自己的编程水平,并且学会了软件和硬件相结合的应用。在实验过程中与两位同学共同分工合作也促进提高了合作能力,因为在实际设计中分工合作非常常见,所以这方面的能力同样不可缺少。在这次试验中,从

35、开始的无法下手到最后设计成功,虽然坎坷,但是在这个过程中不断发现自己的不足,然后努力克服,最终还是顺利完成了分工任务,使知识不仅仅是理论层面而真正落实到了实践中,得到了一定提高,并且顺利完成了嵌入式这门课程的要求。附录:附录软件设计文档1、 组员分工组长:赵建华 主要负责总体解决方案的设计以及交通灯和倒计时模块的编程工作组员:申中华 主要负责编写倒计时模块数字显示部分和蜂鸣器组员:李元正 主要负责电机和键盘部分的编程工作2、 设计计划1月7日熟悉设计平台,学习ICETEK-OMAPL138-A实验箱、Davinci超级终端以及Ubuntu虚拟机的使用,对实验指导书中的例题进行操作并决定设计题目

36、。1月8日至1月12日编写程序及逐步调试1月13日各功能模块整合起来一起调试3、 设计平台ICETEK-OMAPL138-A实验箱、Davinci超级终端、Ubuntu虚拟机4、 设计功能基本功能:(1)南北方向绿灯,东西红灯(20 秒)。 (2)南北方向绿灯闪烁(3秒)。 (3)南北方向黄灯(2秒)。 (4)南北方向红灯,东西方向绿灯(20秒)。 (5)东西方向绿灯闪烁(3秒)。 (6)东西方向黄灯(2秒)。扩展功能:(1)绿灯闪烁及黄灯亮的时候蜂鸣器报警。 (2)南北方向、东西方向通行的时候液晶显示器显示相应的通 行时间倒计时,并显示箭头指示方向。 (3)南北方向通行时步进电机运行,东西方

37、向通行时直流电机运 行。 (4)系统运行时,点击键盘上1按键,系统中止运行;点击上2 按键,系统继续运行;点击3按键,系统终止运行。5、 设计流程图6、 概要设计根据设计功能分析,本系统分为六个部分:交通灯模块:控制LED灯按照要求定时开、关、闪烁。显示器模块:控制液晶显示器显示相应的倒计时数字及箭头。蜂鸣器模块:控制蜂鸣器在要求时间报警。直流电机模块:控制直流电机开、关。步进电机模块:控制步进电机开、关。键盘模块:控制按键对系统的中断、继续以及终止。7、 详细设计倒计时模块交通灯模块8、 设计结果顺利完成计划要求的基本功能和扩展功能,运行无误。附录 部分重要程序源代码交通灯模块源代码:voi

38、d Dialog:myjiaotongdeng() static int count=0; count+; QList allQleds = findChildren(); if(count=40) nanbeidianji(3); /步进电机运转 offLeds(allQleds.at(N_R); /关闭东边红灯 offLeds(allQleds.at(S_R); offLeds(allQleds.at(W_Y); offLeds(allQleds.at(E_Y); onLeds(allQleds.at(S_G) ; /开启南边绿灯 onLeds(allQleds.at(N_G) ; onL

39、eds(allQleds.at(E_R) ; onLeds(allQleds.at(W_R); else if(count=46) sound(1200); /蜂鸣器发声 toggleLeds(allQleds.at(S_G) ; /南边绿灯闪烁 toggleLeds(allQleds.at(N_G); else if(count=49) stopnanbeidianji(); /南北黄灯亮,停止步进电机 offLeds(allQleds.at(S_G) ; offLeds(allQleds.at(N_G) ; onLeds(allQleds.at(S_Y) ; onLeds( allQled

40、s.at(N_Y) ; else if(count=89) stopsound(); /停止蜂鸣器发声 dongxidianji(50); /直流电机运转 offLeds(allQleds.at(S_Y) ; offLeds( allQleds.at(N_Y) ; offLeds(allQleds.at(E_R) ; offLeds(allQleds.at(W_R); onLeds(allQleds.at(N_R); onLeds(allQleds.at(S_R); onLeds(allQleds.at(W_G); onLeds(allQleds.at(E_G); else if(countc

41、learBuffer(); lcd-drawshuzi(50,5,a); /显示 lcd-drawshuzi(70,5,b); if(flagfangxiangdrawjiantou(0); else lcd-drawjiantou(1); if(flagfangxiang=98) flagfangxiang=0; lcd-flush(); if(cnt=1) cnt=26; flag=-1; flag+;蜂鸣器模块源代码:void Dialog:sound(int frequency)/? system(echo 1 /sys/devices/platform/davinci_ctr.2/b

42、uzzer/enable); QString cmdLine = QString:fromUtf8(echo %1 /sys/devices/platform/davinci_ctr.2/buzzer/frequency).arg(frequency); system(cmdLine.toAscii();void Dialog:stopsound() system(echo 0 /sys/devices/platform/davinci_ctr.2/buzzer/enable);步进电机模块源代码:void Dialog:nanbeidianji(int speed)/?QString cmd

43、line;cmdline = QString:fromUtf8(echo %1 /sys/devices/platform/davinci_ctr.2/sa_motor/rapid).arg(speed); system(cmdline.toAscii();cmdline = QString:fromUtf8(echo 1 /sys/devices/platform/davinci_ctr.2/sa_motor/enable); system(cmdline.toAscii();void Dialog:stopnanbeidianji() system(echo 0 /sys/devices/

44、platform/davinci_ctr.2/sa_motor/enable);直流电机模块源代码:void Dialog:dongxidianji(int speed)/?QString cmdline;cmdline = QString:fromUtf8(echo %1 /sys/devices/platform/davinci_ctr.2/dc_motor/duty_cycle).arg(speed); system(cmdline.toAscii();cmdline = QString:fromUtf8(echo 1 /sys/devices/platform/davinci_ctr.

45、2/dc_motor/enable); system(cmdline.toAscii();void Dialog:stopdongxidianji() system(echo 0 /sys/devices/platform/davinci_ctr.2/dc_motor/enable);数字显示部分源代码(danwei=10,表示10个像素长度)void CTR_lcd:drawshuzi0(unsigned int x,unsigned int y)/画0 LCDDrawLine(x,y,x+danwei,y,1); LCDDrawLine(x+danwei,y,x+danwei,y+2*danwei,1); LCDDrawLine(x+danwei,y+2*danwei,x,y+2*danwei,1); LCDDrawLine(x,y+2*danwei,x,y,1);

温馨提示

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

评论

0/150

提交评论