课程设计嵌入式资料文档格式.docx

上传人:b****4 文档编号:16426466 上传时间:2022-11-23 格式:DOCX 页数:22 大小:660.61KB
下载 相关 举报
课程设计嵌入式资料文档格式.docx_第1页
第1页 / 共22页
课程设计嵌入式资料文档格式.docx_第2页
第2页 / 共22页
课程设计嵌入式资料文档格式.docx_第3页
第3页 / 共22页
课程设计嵌入式资料文档格式.docx_第4页
第4页 / 共22页
课程设计嵌入式资料文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

课程设计嵌入式资料文档格式.docx

《课程设计嵌入式资料文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计嵌入式资料文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

课程设计嵌入式资料文档格式.docx

②用数码管显示倒计时。

可以利用动态显示或静态显示,串行并出或者并行并出实现。

③南北方向控制车辆的绿灯熄灭的同时,控制蜂鸣器响2秒来作为警报。

蜂鸣器接P0.7引脚。

交通路口示意图如下图:

设计内容:

(1)完成S3C24X0最小系统的硬件电路设计,并用ProtelDXP设计电路原理图;

(2)完成交通指示灯控制程序代码设计,在实验箱上调试并且能正常工作。

三、设计步骤:

(1)对系统进行需求分析;

(2)初始化配置(各种寄存器);

(3)编写各种相关的中断程序并在主函数中调用这些程序;

(4)编译程序;

(5)使用仿真器进行调试。

摘要

本设计此次试验以S3C2440嵌入式开发平台为硬件基础,主要介绍了嵌入式实时操作系统中的最小系统的各个组成部分,其中包括电源、时钟、复位、存储器、JTAG接口电路原理图及交通灯电路图的设计。

随着移动设备的流行和发展,嵌入式系统已经成为一个热点。

它并不是最近出现的新技术,只是随着微电子技术和计算机技术的发展,微控制芯片功能越来越大,而嵌入微控制芯片的设备和系统越来越多,从而使得这种技术越来越引人注目。

它对软硬件的体积大小、成本、功耗和可靠性都提出了严格的要求。

嵌入式系统的功能越来越强大,实现也越来越复杂,随之出现的就是可靠性大大降低。

最近的一种趋势是一个功能强大的嵌入式系统通常需要一种操作系统来给予支持,这种操作系统是已经成熟并且稳定的,可以是嵌入式的Linux,WINCE等等。

本文所要研究的就是基于ARM嵌入式系统的交通灯系统的设计与实现。

关键词:

ARM交通灯控制

一、绪论

1、设计目的

2、设计内容

1.查阅相关文献资料,熟悉所选ARM芯片

2.总体设计方案规划,设计车辆遇到红灯停绿灯行情况,红绿灯时间均为60s,切换时间为10s,最后5s为黄灯闪烁。

3.系统硬件设计,熟悉I/O接口,定时器,计数器工作原理

4.系统软件设计,包括交通信号灯的工作流程软件实现,用C语言编程

5.设计心得体会及总结。

3、要实现的目标

通过设计,培养自己综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练,加深对ARM芯片的了解;

熟悉ARM芯片各个引脚的功能,工作方式,计数/定时,I/O口,中断等相关原理,巩固学习嵌入式的相关内容知识。

利用ARM芯片模拟实现交通灯控制。

自行选择所需ARM芯片,查阅相关文献资料,熟悉所选ARM芯片,了解所选ARM芯片各个引脚功能,工作方式,计数/定时,I/O口,中断等相关原理,通过软硬件设计实现利用ARM芯片完成交通灯的模拟控制。

二、系统分析及硬件设计

1、S3C24X0芯片介绍

S3C2440A基于ARM920T核心,0.13µ

m的CMOS标准宏单元和存储器单元。

低功耗,简单,精致,且全静态设计特别适合于对成本和功率敏感型的应用。

它采用了新的总线架构如先进微控制总线构架(AMBA)。

S3C2440A的突出特点是其处理器核心,是一个由AdvancedRISCMachines(ARM)公司设计的16/32位ARM920T的RISC处理器。

ARM920T实现了MMU,AMBA总线和哈佛结构高速缓冲体系结构。

这一结构具有独立的16KB指令高速缓存和16KB数据高速缓存。

每个都是由具有8字长的行(line)组成。

S3C2440A集成的以下片上功能:

1.2V内核供电,1.8V/2.5V/3.3V储存器供电,3.3V外部I/O供电,具备16KB的指令缓存和16KB的数据缓存和MMU的微处理器

●外部存储控制器(SDRAM控制和片选逻辑)

●LCD控制器(最大支持4K色STN和256K色TFT)提供1通道LCD专用DMA

●4通道DMA并有外部请求引脚

●3通道UART(IrDA1.0,64字节发送FIFO和64字节接收FIFO)

●2通道SPI

●1通道IIC总线接口(支持多主机)

●1通道IIS总线音频编码器接口

●AC’97编解码器接口

●兼容SD主接口协议1.0版和MMC卡协议2.11兼容版

●2通道USB主机/1通道USB设备(1.1版)

●4通道PWM定时器和1通道内部定时器/看门狗定时器

●8通道10位ADC和触摸屏接口

●具有日历功能的RTC

●摄像头接口(最大支持4096×

4096像素输入;

2048×

2048像素输入支持缩放)

●130个通用I/O口和24通道外部中断源

●具有普通,慢速,空闲和掉电模式

●具有PLL片上时钟发生器系统管理

●支持大/小端

●地址空间:

每Bank128M字节(总共1G字节)

●支持可编程的每Bank8/16/32位数据总线宽度

●BANK0到BANK6固定Bank的起始地址

●BANK7具有可编程Bank起始地址和大小

●8个存储器Bank:

●六个存储器Bank为ROM,SRAM和其它

●两个存储器Bank为ROM/SRAM/SDRAM

●所有存储器具备完整可编程访问周期

●支持外部等待信号来扩展总线周期

●支持SDRAM掉电时自刷新模式

●支持从各种类型ROM启动(NOR/NANDFlash,EEPROM或其它)NANDFlash启动引导(BootLoader)

●支持从NANDFlash启动

●4KB的启动内部缓冲区

●支持启动后NANDflash作为存储器

●支持先进NANDFlash

2、系统电路设计

3、电路原理图

三、系统软件设计

1、系统流程图

2、系统程序设计

1.首先从设定系统初始值开始,将所有交通灯,数码管的选位,以及倒数计数的数组设定。

2.开始设定子程序,定时器0中断服务子程序重装初值,计数增减,人行道红灯马路绿灯,并且开始计数递减,若在55内并且是0时开始显示黄灯闪烁,闪烁3秒,若是55秒的话马路黄灯人行道红灯,若是在55到60秒之内,黄灯开始闪烁,当到60秒时,马路红灯人行道绿灯。

3.主程序开始时,要先对中断程序进行中断初始化。

4.对主程序开始调试,先设置引脚位置和输出位置,初始化定时器,然后引用中断程序,根据定时器的定时,设定红绿黄灯跳转。

四、系统调试

总结

了解所选择的ARM芯片各个引脚功能,工作方式,计数/定时,I/O口,中断等的相关原理,并巩固学习嵌入式的相关内容知识。

这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。

附录

一、源程序

#include"

at89x51.h"

Unsignedchar

num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//数字0~9

unsignedcharctr[]={0x7e,0xf5};

//0xfa(P3_0和P3_2为0,即高位有效)unsignedchardisEW[2];

//记录东西向高低位数值

unsignedchardisSN[2];

//记录南北向高低位数值

unsignedcharv;

unsignedcharcnt_ctr;

unsignedintscdEW,scdSN;

unsignedintcntSN,cntEW;

unsignedcharcntP3_4,cntP3_5,cntP3_6;

unsignedintcnt_num,cnt_key,cnt_flash,keyMemory;

intgreenEW=56,yellowEW=3,greenSN=56,yellowSN=3;

//延时函数,a为1延时1毫秒

voiddelay_ms(unsignedinta)

{

inti;

while(a--)

i=70;

while(i--);

}

//设置红绿黄灯秒数

voidsetSecond(void)

while(P3_4==0);

cntP3_4++;

//标志设置键被按下的次数

switch(cntP3_4)

case1:

cntEW=5;

P1=0xf7;

break;

case2:

cntEW=1;

P1=0xef;

case3:

cntSN=1;

P1=0xfe;

case4:

cntSN=3;

P1=0xfd;

case5:

cntSN=5;

cnt_num=0;

cntP3_4=0;

}

//秒数加1

voidaddSecond(void)

{

while(P3_5==0);

cnt_key=0;

//记录长按键的参数清零

switch(cntP3_4)

if(keyMemory!

=greenEW+10)//判断按键是否已经加10,如果没有加10则秒数加1,如果已经加10则不加1

greenEW++;

if(greenEW==90)

greenEW=0;

scdEW=greenEW;

scdSN=greenEW+yellowEW+1;

if(yellowEW++==9)

yellowEW=0;

scdEW=yellowEW;

=greenSN+10)

greenSN++;

if(greenSN==90)

greenSN=0;

scdEW=greenSN+yellowSN+1;

scdSN=greenSN;

if(yellowSN++==9)

yellowSN=0;

scdSN=yellowSN;

//秒数减1

voidsubSecond(void)

while(P3_6==0);

//记录长按键的参数清零

=greenEW-10)//判断按键是否已经减10,如果没有减10则秒数减1,如果已经减10则不减1

greenEW--;

if(greenEW==-1)

greenEW=89;

if(yellowEW--==0)

yellowEW=9;

=greenSN-10)

greenSN--;

if(greenSN==-1)

greenSN=89;

if(yellowSN--==0)

yellowSN=9;

//正常显示秒数

voiddisplay(void)

cnt_num++;

if(cnt_ctr==10)

cnt_ctr=0;

P3=0xff;

P3=ctr[v];

P2=num[disEW[v]];

//显示东西方向秒数

P0=num[disSN[v]];

//显示南北方向秒数

if(v++==1)

v=0;

//闪烁显示秒数

voiddspFlash(void)

cnt_flash++;

if(cnt_flash<

660)

//数码管灭

else

if(cnt_flash==1333)

//数码管亮1333=4000/3即1秒闪3次

cnt_flash=0;

if(cnt_ctr==59)

P3_0=1;

P3_1=1;

P3_2=1;

P3_3=1;

;

}//长按加10秒

voidadd_10s(void)

greenEW=greenEW+10;

//长按秒数加10

if(greenEW>

=90)

keyMemory=greenEW+10;

//keyMemory用来标记秒数已经加10

greenSN=greenSN+10;

if(greenSN>

=90)

keyMemory=greenSN+10;

//长按减10秒

voidsub_10s(void)

greenEW=greenEW-10;

//长按秒数减10

if(greenEW<

0)

{

greenEW=89;

}

keyMemory=greenEW-10;

//keyMemory用来标记秒数已经减10

scdEW=greenEW;

scdSN=greenEW+yellowEW+1;

break;

case3:

greenSN=greenSN-10;

if(greenSN<

greenSN=89;

keyMemory=greenSN-10;

scdEW=greenSN+yellowSN+1;

scdSN=greenSN;

}//T0中断

voidt0(void)interrupt1

cnt_ctr++;

if(cntP3_4==0)

display();

//正常显示秒数

if(cntP3_4!

=0)

dspFlash();

//闪烁显示秒数

if(cnt_num==4000)

cnt_num=0;

if(scdEW--==0)

cntEW++;

//东西向秒数减至0,标志位加1

if(scdSN--==0)

cntSN++;

//南北向秒数减至0,标志位加1

switch(cntEW)

scdEW=yellowEW;

//东西向黄灯亮,显示黄灯秒数

P1_3=1;

P1_4=0;

P1_5=1;

cntEW++;

//避免程序到此阻塞,故将其至为2

//避免cntEW为2

//东西向红灯亮,显示红灯秒数

P1_4=1;

P1_5=0;

//避免程序到此阻塞,故将其至为4

case5:

//避免cntEW为4

//东西向绿灯亮,显示绿灯秒数

P1_3=0;

cntEW=0;

switch(cntSN)

//南北向绿灯亮,显示绿灯秒数

P1_0=0;

P1_1=1;

P1_2=1;

//避免cntSN为2

scdSN=yellowSN;

//南北向黄灯亮,显示黄灯秒数

P1_0=1;

P1_1=0;

//避免cntSN为4

//南北向红灯亮,显示红灯秒数

P1_0=1;

P1_2=0;

cntSN=0;

if(P3_5==0)

if(cnt_key++==4000)

add_10s();

//长按数码管加10秒

if(P3_6==0)

if(cnt_key++==4000)

sub_10s();

//长按数码管减10秒

disEW[0]=scdEW/10;

disEW[1]=scdEW%10;

disSN[0]=scdSN/10;

disSN[1]=scdSN%10;

//主函数

voidmain(void)

TMOD=0x02;

//设置定时器0为工作方式2

TH0=0x06;

TL0=0x06;

//初始化8位定时器(256-6)*40000=1s

EA=1;

//总中断允许

ET0=1;

//T0中断允许

TR0=1;

//打开T0中断

EX0=1;

//xiugai:

:

开外部中断

P1=0xf3;

//东西向绿灯,南北向红灯

P3_4=1;

//设置东西向显示秒数

//设置南北向显示秒数

while

(1)

if(P3_4==0)

delay_ms(15);

if(P3_4==0)

setSecond();

//设置红绿黄灯秒数

}

else

if(P3_5==0)

addSecond();

elseif(P3_6==0)

if(P3_6==0)

subSeco

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1