版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、期末大作业 题 目: 带数码管的交通指示灯系统设计 院(系): 物联网工程学院 专 业: 计算机科学与技术 班 级: 计科1105班 姓 名: 学 号: 03041105 指导老师: 庄春兴 设计时间: 13-14 学年 2 学期 2014年5月目录0 引言21 设计原理31.1 交通信号灯的工作原理31.2 S3C2440-GPIO介绍31.2.1 GPxCON寄存器41.2.2 GPxDAT寄存器41.2.3 GPxUP寄存器41.3 带数码管的交通信号灯设计42 设计步骤42.1 设计思路42.2 设计框图52.3显示模块62.4刷新与延时模块73 实验结果及结果分析73.1实验代码73
2、.2实验步骤113.3结果分析114 心得体会12参考文献120 引言 随着科学技术发展的日新日异,ARM嵌入式系统1已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握嵌入式的开发技术是十分重要的。本文硬件设计,实现了利用S3C2440芯片来完成带数码管的交通指示灯设计2,培养自己综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练,加深对ARM芯片的了解;熟悉ARM芯片各个引脚的功能,工作方式,计数/定时,I/O口,中断等相关原理,巩固学习嵌入式的相关内容知识。学习LED显示控制方法并掌握基于ARM
3、开发板对I/O编程的方法3。通过实验测试可以证明本文的设计原理和设计步骤都是正确的。1 设计原理1.1 交通信号灯的工作原理 一般情况下,红绿灯设在十字路口,或在多干道的交叉口上,目的是为了调整交叉口的交通秩序使各干道来往车辆能够有条不紊地行驶,否则将造成意想不到的严重后果。当然在交叉口设置合理的红绿灯后,也可以大大减少交通管理部门的人力、屋里。 交叉口交通信号等的基本作用:红灯亮表示车辆、行人禁止通行,绿灯亮表示车辆、行人可以通行,绿灯转换成红灯前几秒,可用黄灯亮来暗示驾驶员或行人即将禁止通行。该系统的屏幕时间显示用倒计时方式表示红绿灯的切换时间,时间显示其的作用是协助红绿灯工作,跟随红、绿
4、灯反复地进行切换。目的是为了使驾驶员和行人能够看见红绿灯亮的时间还剩几秒,以便停车线以内的驾驶员和行人能够更清楚地知道此时该继续通行或减速,才不会使驾驶员盲目地加速或减速停车而阻碍另一干道车辆或行人的通行,从而可以提高交叉口车辆及行人的流通率,当然也可以减少事故的发生,为交通安全提供保障。 交通信号灯的工作原理:当东西组红灯亮绿灯灭时,南北组就会绿灯亮红灯灭。对东西组或南北组而言,每当绿灯亮转换成红灯亮前几秒(具体时间视实际情况而定)黄灯亮,当绿灯灭时黄灯也同时熄灭。1.2 S3C2440-GPIO介绍 GPIO,通用输入输出(General Purpose I/O)的简称4,其引脚可以供编程
5、使用。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备,对这些设备的控制,有时只需要一位控制信号就够了,即只需要开/关两种状态就够了,比如灯亮与灭。对这些设备的控制,使用传统的串行口和并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程I/O接口”,即GPIO。 S3C2440有130个GPIO口,分为A到J共9组:GPA、GPB、GPC.GPJ。通过设置相应寄存器,可以选择某个GPIO口是用于输入、输出还是其他特殊功能。例如可以设置GPH6作为一般的输入、输出端口,或者用于串口。每组GPIO(GPAGPJ),都可以通过3个寄存器来控制与访问,这3个寄存器分别为:GPxCO
6、N:GPIO配置寄存器、GPxDAT:GPIO数据寄存器、GPxUP:上拉电阻控制寄存器(其中x为:A、B.H、J)。1.2.1 GPxCON寄存器 从寄存器的名字可以看出它属于配置(Confugure)寄存器选择GPIO口的功能。其中PORTA与PORTBPORTJ在功能选择方面有所不同。GPACON中每一位对应一个IO口(共23个)。当某位为0时,相应的IO为输出;当某位被置为1时,相应的引脚为地址线或用于地址控制。PORTBPORTJ在寄存器操作方面完全相同,GPxCON中每两位控制一个引脚:00表示输入,01表示输出,10表示特殊功能,11保留不用。1.2.2 GPxDAT寄存器 GP
7、xDAT寄存器用于读/写引脚:当引脚被设置为输入时,读此寄存器可知相应引脚电瓶状态是高还是低;当引脚被设为输出时,写此寄存器相应的位可令此引脚输出高电平或低电平。1.2.3 GPxUP寄存器 GPxUP寄存器某位为1时,相应引脚无内部上拉电阻;为0时相应的引脚使用内部上拉电阻。(上拉电阻:由于管脚悬空比较容易受到外界的电磁干扰,因此通过一个电阻来将此管脚与高电平相连,让其固定在高电平,这样的电阻称之为上拉电阻。)1.3 带数码管的交通信号灯设计 本文通过利用ARM芯片模拟来实现带数码管的交通信号灯设计。用ARM实验箱的LED和七段数码管模拟十字路口的交通灯。将LED的数码管分成两组,分别代表一
8、个路口的东西向和南北向红黄绿三色交通灯。数码管计时显示剩余时间,绿灯显示27秒,然后黄灯显示3秒,红灯显示30秒。南北与东西向的交通灯协同工作,循环显示,一个周期一分钟。一个复位按钮,按一下双向黄灯闪烁,计时20秒后恢复到初始状态,然后继续工作5。2 设计步骤2.1 设计思路本文是利用S3C2440ARM芯片来实现带数码管的交通信号灯设计。 在实现红、绿、黄灯的循环控制上,通过使用红、黄、绿三种不同颜色的LED灯实现此功能。南北方向绿、黄、红三个灯依次接在P0.20、P0.21、P0.22上,东西方向的绿、黄、红三个灯依次接在P0.16、P0.17、P0.18上,用软件控制灯的亮与灭来控制车辆
9、和行人的通行。在实现用数码管显示倒计时的过程中,可以利用动态显示或静态显示,串行并出或者并行并出实现。采用两位数码显示器显示南北方向时间,采用两位数码显示器显示东西方向时间,交通灯控制器工作流程如图1所示:南北方向绿灯亮27秒,东西方向红灯亮27秒南北方向黄灯亮3秒,东西方向红灯亮3秒南北方向红灯亮27秒,东西方向绿灯亮27秒南北方向红灯亮3秒,东西方向黄灯亮3秒 图1 交通灯控制器工作流程图2.2 设计框图 本设计采用S3C2440作为系统的主控芯片,控制交通灯的循环点亮时间,并采用倒计时显示。基本框图是主要有三部分组成:S3C2440最小系统、交通灯循环模块、倒计时显示模块。其系统框图如图
10、2所示:倒计时显示模块S3C2440最小系统 交通灯循环模块 图2 系统框图 其主程序流程图如图3所示:开始初始化东西南北方向黄色交通灯显示东西南北方向红绿交通灯显示东西南北方向红绿交通灯交替显示图3 主程序流程图2.3显示模块采用共阳极七段数码管显示交通灯倒计时,东西、南北两个方向各用两个数码管显示时间。设置红绿灯时间为27秒,当南北方向绿灯倒计时为0后,黄灯倒计时延时3秒。3秒后,南北方向交通灯变为红灯,而东西方向交通灯变为绿灯,倒计时3秒整个交通灯倒计时用循环模块无限制循环。南北方向绿、黄、红三个灯依次接在P0.20、P0.21、P0.22上,东西方向的绿、黄、红三个灯依次接在P0.16
11、、P0.17、P0.18上,P0.0-P0.7引脚连接数码管段选位,P0.12-P0.15引脚连接数码管位选位。本设计采用共阳七段数码管,故有效电平为低电平,根据引脚0XFFBFFFFF或者0XFFFBFFFF代表红灯亮,其中B(1011);0XFFEFFFFF或者0XFFFEFFFF代表红灯亮,其中E(1110);0XFFDFFFFF或者0XFFFDFFFF代表红灯亮,其中D(1101)。通过I00PIN=(I00PIN&0XFFFF0FFF)(weiweishu<<8),将I00的32位接口按位与“FFFF0FFF”,把P0.12-P0.15端口清零,同时将位码左移8位
12、,因为在开始的位码数组中定义的值是在4-7位,但是在芯片上接口在12-15位,所以需要左移8位。I00PIN=(I00PIN&0XFFFFFF00)(LED_numshu<<8)将P0.0-P0.7变为低电平,芯片接口就是在最低8位,所以不用左移。其交通灯显示情况如下表所示:南北方向绿灯27秒黄灯3秒红灯27秒红灯3秒东西方向红灯27秒红灯3秒绿灯27秒黄灯3秒2.4刷新与延时模块延时子程序可以消除抖动,防止因硬件不稳定而造成显示不稳定。3 实验结果及结果分析3.1实验代码#include ".ucos-iiincludes.h"#include &qu
13、ot;.ucos-iiaddosaddition.h#include ".incdrv.h /设备驱动#include “string.h”#include “.incexio.h” /系统输入输出/定义数码管段码Unsigned charLed =ox3f, 0x06,0x5b, ox4e, 0x66,0x6d,Ox7d, x07, 0x7f, 0x6f, ox77, 0x39, 0x5e,0x79,0x71;/定义全局变量BOOLEAN Is_ Working; /工作状态int Count; /计时器void onKey(int nkey,int fnkey); /键盘消息处理
14、函数声明/任务定义/OS_STK Main_StackSTACKSIZE*8; /任务堆栈void key_Task(void *Id):#define key_ Task_ Prio 12 /定义任务优先级OS_STK Led_Flash_StackSTACKSIZE; /任务堆栈Void Led_Flash_Task(void *Id);#define Led_Flash_Prio 60OS_STK Display_Task_StackSTACKSIEZ*8 /任务堆栈Void Display_Task(void *Id);#define Display_Task_Prio 52/已经定义
15、的任务/#define SYS_ Task_ Prio 1#define Touch_ Screen_ Task_ Prio 9#define key_Task_ Prio 12#define key_SCan_ Task_PriO 58#define Lcd_Fresh_prio 59#define Led_Flash_ Prio 60/事件定义/OS_EVENT *Nand_ Rw_Sem; /读写控制权信号量OS_EVENT *Uart_ Rw_Sem; /uart读写控制信号量Void Led_ Flash_Task(void *Id) /指示ROTS处于正常工作中 ursigned
16、char led_state; Uart_printf(0,”n10”); For(;) /消息死循环 Led_Display(led_state);/显示LED灯状态 1ed_state = Ied_state; OSTime(250); /时间设置void initOSGUI() /初始化图形界面initOSMeasage( ):initOSList( );initOSDC( );initOSCtrl();initOSFile();Int Main(int argc, char *argv) ARMTargetInit( ); /系统硬件初始化 OSInit( ); /操作系统初始化 LC
17、D_Init(); /初始化LCD模块 LEC_printf(”LCD初始化完成n”); LoadFont( ); /装载字库 LoadConfigSys(); /装载config.sys配置文件 LCD_Printf(“Create task on Ucos_ii.n”); /显示液晶屏信息/建立任务OSTaskCreate(key_Task, (void *)0, (OS_STK*)&key_stackSATCKSIZE*8-1, key_Task_prio);/建立任务OSTaskCreate(Led_Flash_Task, (void *)0, (OS_STK*)&Le
18、d_Flash_stackSATCKSIZE*8-1, Led_Flash_prio);/建立任务OSTaskCreate(Led_Task, (void *)0, (OS_STK*)&Led_stackSATCKSIZE*8-1, Led_Task_prio);/建立任务OSTaskCreate(Display_Task, (void *)0, (OS_STK*)&Display_Task_stackSATCKSIZE*8-1, Display_Task_prio);/添加任务OSAddTask_Init();/输出LCD_Printf(”starting ucos-IIn”
19、);LCD_Printf(”entering graph moden”);LCE_ChangeMode(DspGraMode);/设置液晶屏显示为图形模式InitOSGUI();/初始化图形界面InitRtc();/初始化系统时钟Nand_Rw_Sem = OSSemCreate(1)/创建Nand-Flash读写控制权旗语,初值为1,满足互斥条件OSStart();/启动操作系统void key_ Task(void*Id)/创建并发送到系统的任务队列POSMSG pMsg = 0; /创建消息结构Is_working = TURE; /工作状态For(; ;) /死循环pMsg = Wai
20、tMessage(0); /等待消息switch(pMsg->Message)/比较Case OSM_KEY: Onkey(pMsg->wparam, pMsg->LParam);/键盘消息响应 Break;OSTimDly(1000);/修改任务时间参数DeleteMessage(pMsg);/删除消息void LED_Taskvoid*id)/创建数码管任务队列 int eastwest = 1; /正为东西绿灯亮,负为难背绿灯亮 Count = 30; /红绿灯备亮30秒 for(;) /死循环if(Count>0)if(Is_ working = =TRUE)
21、/东西通行If(eastwest>0) If(count<4) IO0DIR=0XEB; /东西绿灯,南北黄灯 Else IO0DIR=0xe7; /东西绿灯,南北红灯Else/南北通行If(count<4) IO0DIR=0XBE; /东西黄灯,南北绿灯Else IO0DIR = 0x7e; /东西红灯,南北绿灯OSTimeDly(1500);/修改任务时间参数ElseIO0DIR=0xbb; /黄灯亮OSTimeDly(500);/修改任务时间参数IO0DIR=Oxff; /黄灯灭OSTimeDly(1000);/修改任务时间参数Count-; e1seIs_ worki
22、ng = TURE /工作状态Eastwest = -eastwest;Count=30;void onKey(int nkey,int fnkey) /键盘消息处理函数(If(nkey = =15)Is_ working=FALSE; /工作状态为复位状态Count=20; /计时设为20秒3.2实验步骤1.在ADS1.2中,使用已经创建好的模板,新建一个项目traffic。把操作系统所需要的头文件和库文件加入工程中。2.把交通灯文件夹中的C语言源文件加入。3.打开main.c文件,在Main( )数中创建3个任务:(1) key_Task负责接收键盘消息,执行工作状态的控制;(2) LED
23、_Task负责发光二极管的显示,同时负责每秒将Count时间计数器减1;(3) Display_Task负责数码管的动态显示,显示Count剩余时间。全局变量Count用来记录剩余时间;全局变量Is_working用来控制工作状态。LED_Task任务局部变量eastwest用来记录当前通行方向,1为东西向,-1为南北向。4.在key_Task任务中添加代码,主要任务是初始化一些变量,启动消息循环,等待键盘扫描任务发来的消息(OSM_ KEY),并调用onKey函数进行处理。5.完成交通灯控制任务和数码管显示任务。数码管显示任务交替显示计时的十位和个位。交通灯控制任务实现通行方向的控制。6.用ADS1.2编译、下载并调试上述程序,检查运行结果。7.生成*.bin文件,通过USB下载到嵌入式开发板中,运行并检查输出结果。3.3结果分析 代码成功运行后可以观察到LED的数码管被分成了两组,它们分别代表一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨质疏松症的运动防治
- 2025年悬挂式离子风机项目发展计划
- 舌癌患者的社会支持系统
- 医院护理投诉的满意度调查与反馈
- 员工心态课件
- 恶心呕吐的护理计划
- 颈椎术后长期随访管理
- VTE护理中的心理支持
- 肌腱术后如何选择合适的鞋具
- 听手命令课件
- 3.6运动和能量课件-科学三年级上册教科版-1
- 2025年酒店行业全球酒店管理与酒店服务创新研究报告
- 导尿术课件(男性)
- 2025年及未来5年中国铜铝复合板带行业市场供需格局及行业前景展望报告
- Unit6Ouranimalfriends单词词汇(课件)-Joinin外研剑桥英语四年级上册
- DB61T 1639-2022 物流建筑消防安全管理规范
- 第9课 約束教学设计-2025-2026学年初中日语人教版2024七年级全一册-人教版
- 2026年高考总复习优化设计一轮复习数学(广西版)-高考解答题专项五 第2课时 求值、最值与范围问题
- 第18课 全民族抗战中的正面战场和敌后战场 课件 统编版历史八年级上册
- 档案管理基础知识培训课件
- 泳池设施年度运营成本预算方案
评论
0/150
提交评论