




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任.1k<期末大作业题目:带数码管的交通指示灯系统设计院(系):物联网工程学院专业:计算机科学与技术班级:计科1105班姓名:学号:03041105指导老师:_庄春兴设计时间:_13T4学年2学期2014年5月目录°51I_i..............................................................................................................................................3TOC\o"1-5"\h\z\o"CurrentDocument"1设计原理3\o"CurrentDocument"1.1交通信号灯的工作原理31•^^3^^^^443\o"CurrentDocument"1.2.1GPxCON寄存器41•2/•2iI4\o"CurrentDocument"1.2.3GPxUP寄存器4\o"CurrentDocument"1.3带数码管的交通信号灯设计4\o"CurrentDocument"2设计步骤5\o"CurrentDocument"2.1设计思路52.2设计框图5\o"CurrentDocument"2.3显不模块6\o"CurrentDocument"2.4刷新与延时模块7\o"CurrentDocument"3实验结果及结果分析7\o"CurrentDocument"3.1实验代码73.2实验步骤11\o"CurrentDocument"3.3结果分析12\o"CurrentDocument"4心得体会12\o"CurrentDocument"参考文献120引言随着科学技术发展的日新日异,ARM嵌入式系统⑴己经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握嵌入式的开发技术是十分重要的。本文硬件设计,实现了利用S3C2440芯片来完成带数码管的交通指示灯设计[2】,培养自己综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练,加深对ARM芯片的了解;熟悉ARM芯片各个引脚的功能,工作方式,计数/定时,IO口,中断等相关原理,巩固学习嵌入式的相关内容知识。学习LED显示控制方法并掌握基于ARM开发板对I/O编程的方法⑶。通过实验测试可以证明本文的设计原理和设计步骤都是正确的。1设计原理1-1交通信号灯的工作原理一般情况下,红绿灯设在十字路口,或在多干道的交又口上,目的是为了调整交又口的交通秩序使各干道来往车辆能够有条不紊地行驶,否则将造成意想不到的严重后果。当然在交又口设置合理的红绿灯后,也可以大大减少交通管理部门的人力、屋里。交又口交通信号等的基本作用:红灯亮表示车辆、行人禁止通行,绿灯亮表示车辆、行人可以通行,绿灯转换成红灯前儿秒,可用黄灯亮来暗示驾驶员或行人即将禁止通行。该系统的屏幕时间显示用倒计时方式表示红绿灯的切换时间,时间显示其的作用是协助红绿灯工作,跟随红、绿灯反复地进行切换。目的是为了使驾驶员和行人能够看见红绿灯亮的时间还剩儿秒,以便停车线以内的驾驶员和行人能够更清楚地知道此时该继续通行或减速,才不会使驾驶员盲目地加速或减速停车而阻碍另一干道车辆或行人的通行,从而可以提高交义口车辆及行人的流通率,当然也可以减少事故的发生,为交通安全提供保障。交通信号灯的工作原理:当东西组红灯亮绿灯灭时,南北组就会绿灯亮红灯灭。对东西组或南北组而言,每当绿灯亮转换成红灯亮前儿秒(具体时间视实际情况而定)黄灯亮,当绿灯灭时黄灯也同时熄灭。S3C2440-GPIO介绍GPIO,通用输入输出(GeneralPurposeI/O)的简称囹,其引脚可以供编程使用。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备,对这些设备的控制,有时只需要一位控制信号就够了,即只需要开/关两种状态就够了,比如灯亮与灭。对这些设备的控制,使用传统的串行口和并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程I/O接口”,即GPIOoS3C2440有130个GPIO口,分为A到J共9组:GPA、GPB、GPC...GPJ。通过设置相应寄存器,可以选择某个GPIO口是用于输入、输出还是其他特殊功能。例如可以设置GPH6作为一般的输入、输出端口,或者用于串口。每组GPIO(GPA〜GPJ),都可以通过3个寄存器来控制与访问,这3个寄存器分别为:GPxCON:GPIO配置寄存器、GPxDATGPIO数据寄存器、GPxUP:上拉电阻控制寄存器(其中x为:A、J)。GPxCON寄存器从寄存器的名字可以看出它属于配置(Configure)寄存器——选择GPIO口的功能。其中PORTA与PORTB-PORTJ在功能选择方面有所不同。GPACON中每一位对应一个IO口(共23个)。当某位为0时,相应的10为输出;当某位被置为1时,相应的引脚为地址线或用于地址控制。PORTB〜PORTJ在寄存器操作方面完全相同,GPxCON中每两位控制一个引脚:00表示输入,01表示输出,10表示特殊功能,11保留不用。GPxDAT寄存器GPxDAT寄存器用于读/写引脚:当引脚被设置为输入时,读此寄存器可知相应引脚电瓶状态是高还是低;当引脚被设为输出时,写此寄存器相应的位可令此引脚输出高电平或低电平。GPxUP寄存器GPxUP寄存器某位为1时,相应引脚无内部上拉电阻;为0时相应的引脚使用内部上拉电阻。(上拉电阻:由于管脚悬空比较容易受到外界的电磁干扰,因此通过一个电阻来将此管脚与高电平相连,让其固定在高电平,这样的电阻称之为上拉电阻。)1-3带数码管的交通信号灯设计本文通过利用ARM芯片模拟来实现带数码管的交通信号灯设计。用ARM实验箱的LED和七段数码管模拟十字路口的交通灯。将LED的数码管分成两组,分别代表一个路口的东西向和南北向红黄绿三色交通灯。数码管计时显示剩余时间,绿灯显示27秒,然后黄灯显示3秒,红灯显示30秒。南北与东西向的交通灯协同工作,循环显示,一个周期一分钟。一个复位按钮,按一下双向黄灯闪烁,计时20秒后恢复到初始状态,然后继续工作[习。2设计步骤2.1设计思路本文是利用S3C2440ARM芯片来实现带数码管的交通信号灯设计。在实现红、绿、黄灯的循环控制上,通过使用红、黄、绿三种不同颜色的LED灯实现此功能。南北方向绿、黄、红三个灯依次接在P0.20、P0.21、P0.22上,东西方向的绿、黄、红三个灯依次接在P0.16、P0.17、P0.18±,用软件控制灯的亮与灭来控制车辆和行人的通行。在实现用数码管显示倒计时的过程中,可以利用动态显示或静态显示,串行并出或者并行并出实现。采用两位数码显示器显示南北方向时间,采用两位数码显示器显示东西方向时间,交通灯控制器工作流程如图1所示:图1交通灯控制器工作流程图本设计采用S3C2440作为系统的主控芯片,控制交通灯的循环点亮时间,并采用倒计时显示。基本框图是主要有三部分组成:S3C2440最小系统、交通灯循环模块、倒计时显示模块。其系统框图如图2所示:
图2系统框图其主程序流程图如图3所示:图3主程序流程图2.3显示模块采用共阳极七段数码管显示交通灯倒计时,东西、南北两个方向各用两个数码管显示时间。设置红绿灯时间为27秒,当南北方向绿灯倒计时为0后,黄灯倒计时延时3秒。3秒后,南北方向交通灯变为红灯,而东西方向交通灯变为绿灯,倒计时3秒整个交通灯倒计时用循环模块无限制循环。南北方向绿、黄、红三个灯依次接在P0.20、P0.21、P0.22上,东西方向的绿、黄、红三个灯依次接在PO.16、PO.17、PO.18上,PO.O-PO.7引脚连接数码管段选位,PO.12-PO.15引脚连接数码管位选位。本设计采用共阳七段数码管,故有效电平为低电平,根据引脚OXFFBFFFFF或者OXFFFBFFFF代表红灯亮,其中B(1011);OXFFEFFFFF或者OXFFFEFFFF代表红灯亮,其中E(1110);OXFFDFFFFF或者OXFFFDFFFF代表红灯亮,其中D(1101)。通过IOOPIN=(IOOPIN&OXFFFFOFFF)I(wei[weishu]«8),将100的32位接口按位与“FFFFOFFF”,把PO.12-P0.15端口清零,同时将位码左移8位,因为在开始的位码数组中定义的值是在4-7位,但是在芯片上接口在12-15位,所以需要左移8位。IOOPIN=(IOOPIN&OXFFFFFFOO)I(LED_num[shu]«8)将P0.0-P0.7变为低电平,芯片接口就是在最低8位,所以不用左移。其交通灯显示情况如下表所示:南北方向绿灯27秒黄灯3秒红灯27秒红灯3秒东西方向红灯27秒红灯3秒绿灯27秒黄灯3秒2.4刷新与延时模块延时子程序可以消除抖动,防止因硬件不稳定而造成显示不稳定。3实验结果及结果分析3.1实验代码#iiiclude,,..\ucos-ii\iiicludes.hH#include"..\ucus・ii\add\osaddition.h”#iiiclude.\inc\drv.h”〃设备驱动#iiiclude"string.h”#iiiclude".Ainc'exio.h”〃系统输入输出〃定义数码管段码UnsignedcharLed[]={ox3f,0x06,0x5b,ox4e,0x66,0x6d,Ox7d,x07.0x7f,0x6f,ox77,0x39,0x5e,0x79,0x71);//定义全局变量BOOLEANIs_Working;〃工作状态hitCount;〃计时器
voidonKey(intnkey,mtfiikey);〃任务定义//OS.STKMam_Stack[STACKSIZE*8];voidkey_Task(voidvoidonKey(intnkey,mtfiikey);〃任务定义//OS.STKMam_Stack[STACKSIZE*8];voidkey_Task(void*Id):#definekey_Task_Prio12〃键盘消息处理函数声明〃任务堆栈〃定义任务优先级OS.STKLed_Flash_Stack[STACKSIZE];〃任务堆栈VoidLed_Flash_Task(void*Id);#defineLedFlashPiio60OS.STKDisplay_Task_Stack[STACKS正Z*8]〃任务堆栈VoidDisplay_Task(void*Id);^defineDisplay_Task_Prio52/己经定义的任务/^defineSYS_Task_Piio^defineTouch.Screen.Task_Prio^definekey_Task_Piio^definekey_SCan_Task_PiiO^defineLcd_Fresh_prio^defineLed_Flash_Prio/事件定义/OSEVENT*NandRwSem;OSEVENT*UartRwSem;1912585960〃读写控制权信号量〃uart读写控制信号量VoidLed_Flash_Task(void*Id)//指示ROTS处于正常工作中ursignedcharled_state;Uart_printRO,”\nlO”);For(;;)//消息死循环Led_Display(led_state);//显示LED灯状态ledstate=-ledstate;OSTime(250);〃时间设置}voidimtOSGUIQ〃初始化图形界面iiutOSMeasage():iiutOSList();uutOSDC();iiutOSCtrl();uutOSFileQ;iIntargc,char**argv)ARMTargetnut();〃系统硬件初始化OSImt();〃操作系统初始化LCD_Imt();〃初始化LCD模块LEC_pnntf("LCD初始化完成\1『):LoadFont();〃装载字库LoadConfigSysO;//装载coiifig.sys配置文件LCD_Pimtf(4<CreatetaskonUcos_ii\n”);〃显示液晶屏信息〃建立任务OSTaskCreate(key_Task,(void*)0,(OS_STK*)&key_stack[SATCKSIZE*8-l].key_Task_prio);/建立任务OSTaskCieate(Led_Flash_Task,(void*)0.(OS_STK*)&Led_Flash_stack[SATCKSIZE*8-l],Led_Flash_prio);/建立任务OSTaskCreate(Led_Task,(void*)0,(OS_STK*)&Led_stack[SATCKSIZE*8-l],Led_Task_pno);/建立任务OSTaskCreate(Display_Task,(void*)0,(OS_STK*)&Display_Task_stack[SATCKSIZE*8-l],Display_Task_prio);〃添加任务OSAddTask_Imt0;〃输出LCD_Priiitf("startingucos-II...\n”);LCD_Priiitf("enteringgraphmode..):LCE_ChangeMode(DspGraMode);//设置液晶屏显示为图形模式ImtOSGUI();〃初始化图形界面ImtRtc();〃初始化系统时钟Nand_Rw_Sem=OSSemCreate(l)//创建Nand-Flash读写控制权旗语,初值为1,满足互斥条件OSStai-tQ;//启动操作系统voidkey_Task(void*Id)〃创建并发送到系统的任务队列{POSMSGpMsg=0;〃创建消息结构Is_workHig=TURE;〃工作状态For(;;)〃死循环{pMsg=WaitMessage(O);〃等待消息switch(pMsg->Message)//比较(CaseOSM_KEY:Oiikey(pMsg->\v,paiam,pMsg->LParam);//®盘消息响应Break;OSTimDly(1000);//修改任务时间参数}DeleteMessage(pMsg);//删除消息)}voidLED_Task(void*id)//创建数码管任务队列{mteasnvest=l;〃正为东西绿灯亮,负为难背绿灯亮Count=30;〃红绿灯备亮30秒for(;;)〃死循环/Iif(Count>0){if(Is_working==TRUE){〃东西通行If(easmrest>0)If(count<4)IOODIR=OXEB;〃东西绿灯,南北黄灯ElseIOODIR=Oxe7;〃东西绿灯,南北红灯}Else〃南北通行If(count<4)IOODIR=OXBE;〃东西黄灯,南北绿灯ElseIOODIR=0x7e;〃东西红灯,南北绿灯}OSTimeDly(1500);〃修改任务时间参数Else(IO0DIR=0xbb:〃黄灯亮OSTimeDly(500);〃修改任务时间参数IOODIR=Oxff:〃黄灯灭OSTimeDly(1000);〃修改任务时M参数}Count-;elseIs_working=TURE//工作状态Eastwest=-eastwest;Count=30;}voidonKey(mtnkey,mtfiikey)〃键盘消息处理函数(If(iikey==15){Is_workuig=FALSE;〃工作状态为复位状态Count=20;〃计时设为20秒}林在ADS1.2中,使用己经创建好的模板,新建一个项目tiaffico把操作系统所需要的头文件和库文件加入工程中。把交通灯文件夹中的C语言源文件加入。打开main.c文件,在Main()数中创建3个任务:key_Task负责接收键盘消息,执行工作状态的控制;LED_Task负责发光二极管的显示,同时负责每秒将Count时间计数器减1;Display_Task负责数码管的动态显示,显示Count剩余时间。全局变量Count用来记录剩余时间;全局变量Is_woiking用来控制匚作状态。LED_Task任务局部变量eastwest用来记录当前通行方向,1为东西向,-1为南北向。在key_Task任务中添加代码,主要任务是初始化一些变量,启动消息循环,等待键盘扫描任务发来的消息(OSM_KEY),并调用oiiKey函数进行处理。完成交通灯控制任务和数码管显示任务。数码管显示任务交替显示计时的十位和个位。交通灯控制任务实现通行方向的控制。用ADS1.2编译、下载并调试上述程序,检查运行结果。生成*.bin文件,通过USBT载到嵌入式开发板中,运行并检查输出结果。3.3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论