嵌入式上机课设红绿灯.docx
《嵌入式上机课设红绿灯.docx》由会员分享,可在线阅读,更多相关《嵌入式上机课设红绿灯.docx(16页珍藏版)》请在冰豆网上搜索。
嵌入式上机课设红绿灯
成绩_______
指导教师评定成绩:
审定成绩:
重庆邮电大学移通学院
课程设计报告
设计题目:
基于ARM的交通灯设计
学校:
重庆邮电大学移通学院
学生姓名:
你猜
专业:
自动化
班级:
051212?
?
学号:
2012?
?
?
?
?
?
指导教师:
罗杨
设计时间:
2015年10月
重庆邮电大学移通学院
目录
《嵌入式系统》课程设计任务书Ⅰ
一、设计题目:
单路交通灯的控制Ⅰ
二、系统工作过程说明Ⅱ
三、设计步骤:
Ⅲ
摘要Ⅲ
一、绪论1
1、设计目的1
2、设计内容1
3、要实现的目标1
二、系统分析及硬件设计2
1、S3C24X0芯片介绍2
(1)结构组成2
(2)主要特性2
3、电路原理图4
三、系统软件设计5
1、系统流程图5
2、系统程序设计6
四、系统调试8
总结9
参考文献10
附录11
《嵌入式系统》课程设计任务书
引言:
嵌入式系统课程设计是电气工程及其自动化专业的一个重要教学环节,既有别于毕业设计,又不同于课堂教学。
它需要学生统筹运用所学各个专业的基本理论、基本方法对现实生活中的实际问题进行设计和调试。
一、设计题目:
单路交通灯的控制
掌握嵌入式系统设计的基本方法,熟悉S3C24X0的开发环境及软硬件的调试过程,了解S3C24X0芯片各个引脚功能,工作方式,计时/定时,I/O口,中断等的相关原理,根据控制要求进行编程,解决十字路口交通灯控制的问题。
巩固和加深对理论课中知识的理解,提高对所学知识的综合运用能力。
二、系统工作过程说明
车辆遇到红灯停绿灯行的行走情况,红绿灯时间均为60s,切换时间为10s,最后5s为黄灯闪烁。
利用S3C24X0ARM芯片实现单路交通灯的控制:
①实现红、绿、黄灯的循环控制。
使用红、黄、绿三种不同颜色的LED灯实现此功能,由南往北方向红、黄、绿三个灯依次在P1.18、P1.19、P1.20上,由北往南方向的红、黄、绿三个灯依次接在P1.21、P1.22、P1.23上,人行道用红、绿两个灯控制,依次接在P1.24、P1.25上,用软件控制灯的亮与灭来控制车辆和行人的通行。
②用数码管显示倒计时。
可以利用动态显示或静态显示,串行并出或者并行并出实现。
③南北方向控制车辆的绿灯熄灭的同时。
交通路口示意图如下图:
设计内容:
(1)完成S3C24X0最小系统的硬件电路设计,并用ProtelDXP设计电路原理图;
(2)完成交通指示灯控制程序代码设计,在实验箱上调试并且能正常工作。
三、设计步骤
(1)对系统进行需求分析;
(2)初始化配置(各种寄存器);
(3)编写各种相关的中断程序并在主函数中调用这些程序;
(4)编译程序;
(5)使用仿真器进行调试。
摘要
交通信号灯指挥着人和各种车辆的安全运行,实现红、黄、绿灯的自动指挥是城乡交通管理现代化的重要课题.在城乡街道的十字交叉路口,为了保证交通秩序和行人安全,一般在每条道路上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道路禁止通行;黄灯亮,表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆继续通行;绿灯亮,表示该条道路允许通行.交通灯控制电路自动控制十字路口两组红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现十字路口城乡交通管理自动化.
本文为了实现交通道路的管理,力求交通管理先进性、科学化。
分析应用了单片机实现智能交通灯管制的控制系统,以及该系统软、硬件设计方法,实验证明该系统实现简单、经济,能够有效地疏导交通,提高交通路口的通行能力。
【关键词】ARM交通灯控制
一、绪论
1、设计目的
掌握嵌入式系统设计的基本方法,熟悉S3C24X0的开发环境及软硬件的调试过程,了解S3C24X0芯片各个引脚功能,工作方式,计时/定时,I/O口,中断等的相关原理,根据控制要求进行编程,解决十字路口交通灯控制的问题。
巩固和加深对理论课中知识的理解,提高对所学知识的综合运用能力。
2、设计内容
(1)完成S3C24X0最小系统的硬件电路设计,并用ProtelDXP设计电路原理图;
(2)完成交通指示灯控制程序代码设计,在实验箱上调试并且能正常工作。
3、要实现的目标
利用ARM芯片模拟实现交通灯控制。
自行选择所需ARM芯片,查阅相关文献资料,熟悉所选ARM芯片,了解所选ARM芯片各个引脚功能,工作方式,计数/定时,I/O口,中断等相关原理,通过软硬件设计实现利用ARM芯片完成交通灯的模拟控制。
二、系统分析及硬件设计
1、S3C24X0芯片介绍
该芯片是SAMSUNG公司推出的的S3C2410X16/32位RISC微处理器。
这个产品计划用于低成本、低功耗和高性能手持设备和一般应用的单片微处理器解决方案。
(1)结构组成
S3C2410X包含了如下部件:
独立的16KB指令和16KB数据缓存,用于虚拟内存管理的MMU单元,LCD控制器(STN & TFT),非线性(NAND)Flash引导单元,系统管理器(包括片选逻辑和SDRAM控制器),3通道的异步串行口(UART),4个通道的DMA,4个通道的带脉宽调制器(PWM)的定时器,输入输出端口,实时时钟单元(RTC),带有触摸屏接口的8通道10位AD转
换器,IIC总线接口,IIS总线接口,USB的主机(Host)单元,USB的设备(Device)
接口,SD卡和MMC(Multi-Media Card)卡接口,2通道SPI接口和锁相环(PLL)时钟发生器。
(2)主要特性
1.8V ARM920T内核,1.8V/2.5V/3.3V存储系统,带有3.3V16KB指令和16KB数据缓存及MMU单元的外部O接口的微处理器。
外部存储器控制(SDRAM控制和芯片选择逻辑)
LCD控制器(支持4K颜色的STN或256K色TFT的LCD),带有1个通道的LCD专用DMA控制器
4通道DMA,具有外部请求引脚
3通道UART(支持IrDA1.0,16字节发送FIFO及16字节接收FIFO)/2通道SPI接口
1个通道多主IIC总线控制器/1通道IIS总线控制器
1.0版本SD主机接口及2.11版本兼容的MMC卡协议
2个主机接口的USB口/1个设备USB口(1.1版本)
4通道PWM定时器/1通道内部计时器
看门狗定时器
117位通用目的I/O口/24通道外部中断源
电源控制:
正常、慢速、空闲及电源关闭模式
带触摸屏接口的8通道10位ADC
带日历功能的实时时钟控制器
具有PLL的片上时钟发生器
2、系统电路设计
(1)总体设计框架
用ARM9系列芯片S3C2410X作为系统的主控芯片,控制交通灯的循环点亮并显示灯亮时间(采用倒计时显示),当定时时间到的时候控制蜂鸣器响来提醒人们注意红绿灯的状态。
图1交通灯总体设计框图
(2)系统电源电路
本电源运用5V的直流电源(图2所示)。
通过DS2434芯片将5V电压转换为3.3V电压,为LPC2138芯片供电,LPC2138芯片所能承受的电压范围是3V~3.6V。
图2电源电路设计
3、电路原理图
图3S3C2410X芯片的原理图
三、系统软件设计
1、系统流程图
主程序流程图中断服务系统流程图
图4系统流程图
2、系统程序设计
由南向北和由北向南车道各用一组红、绿、黄三色的指示灯,指挥车辆通行。
绿灯是通行信号,面对绿灯的车辆可以直行,红灯是禁止通行信号,面对红灯的车辆必须在路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以继续行进。
具体红绿灯时间分配时间如表1所示。
表1:
红绿灯时间分配时间如表
15s
5s
60s
5s
南北通道
红灯亮
黄灯闪
绿灯亮
黄灯闪
人行道
绿灯亮
绿灯灭
红灯亮
红灯灭
上表说明南北通道绿灯亮、绿灯闪黄灯闪时人行道都是红灯亮,只有车道红灯亮(车辆完全停下来)时人行道绿灯才亮,这样保证了过马路的行人人身安全,避免了不必要的交通事故。
由于试验箱没有红黄绿三色LED灯,只有一组8个红色LED灯,所以用其来模拟交通信号灯。
图5试验箱LED灯
LED18、LED17分别为人行道红灯、绿灯
LED16、LED15、LED14分别为南向北方向的一组红灯、黄灯、绿灯
LED13、LED12、LED11分别为北向南方向的一组红灯、黄灯、绿灯
图6LED模拟交通灯
根据红绿灯的时间分配,可以知道,红绿灯有六个状态:
状态
人行道
南向北马路
北向南马路
16进制
ss
1
0
1
1
0
0
0
0
1
0x61
2
0
0
0
0
0
0
0
0
0x00
0
0
0
1
0
0
1
0
0x12
3
1
0
0
0
1
1
0
0
0x8c
4
0
0
0
0
0
0
0
0
0x00
0
0
0
1
0
0
1
0
0x12
表2红绿灯状态表
状态1:
人行道绿灯亮,马路红灯亮
状态2:
人行道绿灯灭,马路黄灯闪
状态3:
人行道红灯亮,马路绿灯亮
状态4:
人行道绿灯灭,马路黄灯闪
由于本实验采用的是动态显示接口,其中数码管扫描控制地址为0x20006000,位0—位5位分别对应一个数码管,将其中某位清零来选择相应的数码管。
地址0x20007000为数码管的数据寄存器。
数码管采用共阳方式,向该地址写一个数据就可以控制数码管的显示。
所以我用如下代码来显示数码管的倒计时:
for(j=0;j<10;j++)
{
for(n=0;n<150;n++)
{
*((U8*)0x20007000)=0xfd;
*((U8*)0x20006000)=0xf9;
Delay
(1);
*((U8*)0x20007000)=0xfe;
*((U8*)0x20006000)=num1[j];
Delay
(1);
}}
四、系统调试
1、硬件调试
检查实验箱电路连接是否出错,LED是否完好。
2、程序调试
使用软件ADTIDE对程序进行检测语法错误。
3、软硬联调
当确认程序无误后下载到实验箱中进行仿真模拟,看实验箱上的LED灯是否按要求闪烁。
总结
由于初次接触嵌入式系统感觉蛮难的,所以收获不是很大,很多的概念都比较模糊,开始嵌入式课程设计时,通过实践和老师同学的帮助,才开始对嵌入式有了浅层理解。
广义上讲,凡是带有微处理器的专用软件系统都是嵌入式系统,如各类单片机和DSP系统。
从狭义上讲,那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的专用软硬件系统称为嵌入式系统。
嵌入式系统由嵌入式硬件与嵌入式软件组成,嵌入式硬件以芯片、模板、组件、控制器形式埋藏于设备内部。
最后通过这次课程设计的学习我不仅对嵌入式系统有了了解,也从中得到了一种实践能力。
参考文献
[1]朱恺主编.嵌入式系统基础[M].北京:
机械工业出版社,2012.4
[2]周立功主编;ARM嵌入式系统基础教程[M](第2版);北京:
北京航空航天大学出版社;2008.
[3].周立功主编;深入浅出ARM7-LPC213x/214x;北京:
北京航空航天大学出版社;2008.
[4].张崙编著;32位嵌入式系统硬件设计与调试[M];北京:
机械工业出版社;2005.
[5].马洪连,等编著;嵌入式系统设计教程[M];北京:
电子工业出版社;2006.
[6].王田苗主编;嵌入式系统设计与实例开发[M];北京:
清华大学出版社;2003.
[7].符意德编著;嵌入式系统设计原理及应用[M];北京:
清华大学出版社;2004.
附录
源程序
#defineU8unsignedchar
unsignedcharnum1[10]={0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0};//9--0
unsignedcharnum2[5]={0x99,0xb0,0xa4,0xf9,0xc0};//4--0
unsignedcharnum3[6]={0x92,0x99,0xb0,0xa4,0xf9,0xc0};//5--0
unsignedcharnum4[5]={0x90,0x80,0xf8,0x82,0x92};//9--5
voidDelay(inttime);//延时程序初始化
voidled(void)
{
while
(1)
{
inti,j,n;
//人行道绿灯亮,马路红灯从19s开始亮15s
*((U8*)0x20005000)=0x61;
for(j=0;j<10;j++)
{
for(n=0;n<150;n++)
{
*((U8*)0x20007000)=0xfd;
*((U8*)0x20006000)=0xf9;
Delay
(1);
*((U8*)0x20007000)=0xfe;
*((U8*)0x20006000)=num1[j];
Delay
(1);
}
}
*((U8*)0x20005000)=0x61;
for(j=0;j<5;j++)
{
for(n=0;n<150;n++)
{
*((U8*)0x20007000)=0xfd;
*((U8*)0x20006000)=0xc0;
Delay
(1);
*((U8*)0x20007000)=0xfe;
*((U8*)0x20006000)=num1[j];
Delay
(1);
}
}
Delay
(1);
for(j=0;j<5;j++)
{//人行道绿灯暗,马路黄灯从4s开始闪5s
Delay
(1);
for(n=0;n<150;n++)
{
*((U8*)0x20005000)=0x00;
*((U8*)0x20007000)=0xfd;
*((U8*)0x20006000)=0xc0;
Delay
(1);
*((U8*)0x20007000)=0xfe;
*((U8*)0x20006000)=num2[j];
Delay
(1);
*((U8*)0x20005000)=0x12;
}
}
Delay
(1);
*((U8*)0x20005000)=0x8c;
for(j=0;j<5;j++)
{//人行道红灯亮,马路绿灯从64s开始亮5s
for(n=0;n<150;n++)
{
*((U8*)0x20007000)=0xfd;
*((U8*)0x20006000)=0x82;
Delay
(1);
*((U8*)0x20007000)=0xfe;
*((U8*)0x20006000)=num2[j];
Delay
(1);
}
}
Delay
(1);
for(i=0;i<5;i++)
{//人行道红灯亮,马路绿灯从59s开始亮50s
*((U8*)0x20005000)=0x8c;
for(j=0;j<10;j++)
{
for(n=0;n<150;n++)
{
*((U8*)0x20007000)=0xfd;
*((U8*)0x20006000)=num3[i];
Delay
(1);
*((U8*)0x20007000)=0xfe;
*((U8*)0x20006000)=num1[j];
Delay
(1);
}
}
}
*((U8*)0x20005000)=0x8c;
for(j=0;j<5;j++)
{//人行道红灯亮,马路绿灯从9s开始亮5s
for(n=0;n<150;n++)
{
*((U8*)0x20007000)=0xfd;
*((U8*)0x20006000)=0xc0;
Delay
(1);
*((U8*)0x20007000)=0xfe;
*((U8*)0x20006000)=num4[j];
Delay
(1);
}
}
for(j=0;j<5;j++)
{//人行道绿灯暗,马路黄灯从4s开始闪5s
Delay
(1);
for(n=0;n<150;n++)
{
*((U8*)0x20005000)=0x00;
*((U8*)0x20007000)=0xfd;
*((U8*)0x20006000)=0xc0;
Delay
(1);
*((U8*)0x20007000)=0xfe;
*((U8*)0x20006000)=num2[j];
Delay
(1);
*((U8*)0x20005000)=0x12;
}
}
}
}
//延时程序
voidDelay(inttime)
{
inti;
intdelayLoopCount=100;
for(;time>0;time--);
for(i=0;i}