基于C51单片机的简单交通灯系统设计课程设计报告.docx
《基于C51单片机的简单交通灯系统设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于C51单片机的简单交通灯系统设计课程设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
基于C51单片机的简单交通灯系统设计课程设计报告
成绩:
课程设计报告书
所属课程名称单片机原理与接口技术
题目基于C51单片机的简单交通灯系统设计
分院机电学院
一、课程设计任务书1
二、总体设计2
(一)单片机交通控制系统方案的比较、论证2
(二)单片机交通控制系统总体设计2
三、智能交通灯控制系统的硬件设计5
(一)AT89C51单片机简介5
(二)交通灯中的中断处理流程7
(三)系统硬件总电路构成及原理8
四、程序设计10
(一)程序主体设计流程10
(二)理论基础知识10
(三)子程序模块设计11
(四)系统软件调试12
五、程序调试及结果分析15
(一)总体设计程序15
(二)protues仿真模拟及模拟图17
六、总结19
七、参考文献20
一、课程设计任务书
课程设计题目:
基于C51单片机的简单交通灯系统设计
课程设计时间:
自2012年07月02日起至2012年07月13日。
课程设计要求:
我们本次模拟系统由单片机硬/软件系统、LED灯显示系统和复位电路控制电路等组成,较好的模拟了交通路面的控制。
(1)分析目前交通路口的基本控制技术以及各种通行方案,并以此为基础提出自己的交通控制的初步方案。
(2)确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能。
(3)进行LED灯状态电路,按键电路的设计和对各器件的选择及连接,大体分配各个器件及模块的基本功能要求。
(4)进行软件系统的设计,对于本系统,我们采用单片机汇编语言编写,对单片机部结构和工作情况做了充足的研究,了解定时器,中断以及延时原理,总体上完成了软件的编写。
学生签名:
年月日
课程设计评阅意见
项目
课程设计态度评价
10%
出勤情况评价10%
任务难度
、量评价10%
创新性评价
10%
综合设计
能力评价20%
报告书写规评价20%
答辩
20%
成绩
综合评定等级
评阅教师:
2012年月日
二、总体设计
(一)单片机交通控制系统方案的比较、论证
1、电源提供方案
为使模块稳定工作,须有可靠电源。
因此考虑了两种电源方案:
方案一:
采用独立的稳压电源。
此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。
方案二:
采用单片机控制模块提供电源。
改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
综上所述,我们选择第二种方案。
2、输入方案
题目要求系统能调节灯亮时间,并可处理紧急情况,我们研究了两种方案
方案一:
采用8155扩展I/O口及键盘,显示等。
该方案的优点是:
使用灵活可编程,并且有RAM,及计数器。
若用该方案,可提供较多I/O口,但操作起来稍显复杂。
方案二:
直接在I/O口线上接上按键开关。
由于该系统对于交通灯的控制,只用单片机本身的I/O口就可实现,且本身的计数器及RAM已经够用。
综上所述,我们选择第二种方案。
(二)单片机交通控制系统总体设计
1、单片机交通控制系统的通行方案设计
设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。
其具体状态如下图所示。
图2-1交通状态
说明:
黑色表示亮,白色表示灭。
交通状态从状态1开始变换,直至状态6然后循环至状态1,周而复始。
表2-1表示灯状态和行止状态的关系
状态1
状态3
状态4
状态6
东西向
禁行
等待变换
通行
等待变换
南北向
通行
等待变换
禁行
等待变换
东西红灯
1
1
0
0
东西黄灯
0
0
0
1
东西绿灯
0
0
1
0
南北红灯
0
0
1
1
南北绿灯
1
0
0
0
南北黄灯
0
1
0
0
在任一个路口,遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换。
状态及红绿灯状态如表1所示。
说明:
0表示灭,1表示亮。
2、单片机交通控制系统的功能要求
本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生。
还可以进行紧急处理,交通路口出现紧急状况在所难免,如特大事件发生,救护车等急行车通过等,我们都必须尽量允许其畅通无阻,毕竟在这种情况下是分秒必争的,时时刻刻关系着公共财产安全,个人生死攸关等。
由此在交通控制中增设禁停按键,就可达到想此目的。
3、单片机交通控制系统的基本构成及原理
单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行。
本系统在此基础上,加入了紧急情况处理功能。
图2-2系统的总体框图
据此,本设计系统以单片机为控制核心,连接成最小系统,由按键设置模块产生输入,信号灯状态模块。
系统的总体框图如上所示。
单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制,在此过程中随时调用急停按键。
三、智能交通灯控制系统的硬件设计
(一)AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1、AT89C51单片机的主要特性
与MCS-51兼容,4K字节可编程闪烁存储器,寿命:
1000写/擦循环,数据保留时间:
10年,全静态工作:
0Hz-24Hz,三级程序存储器锁定,128*8位部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源(两个外部中断源和3个部中断源),可编程串行通道,低功耗的闲置和掉电模式,片振荡器和时钟电路。
●时钟电路:
时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。
●中断系统:
中断系统的作用主要是对外部或部的终端请求进行管理与处理。
AT89S51共有5个中断源,其中又2个外部中断源和3个部中断源。
图3-1AT89C51系列单片机的部结构示意图
2、主要引脚功能
图3-2AT89C51引脚图
●VCC:
电源电压
●GND:
接地
●P0口:
P0口是一组8位双向I/0口。
P0口即可作地址/数据总线使用,又可以作为通用的I/O口使用。
当CPU访问片外存储器时,P0口分时先作低8位地址总线,后作双向数据总线,此时,P0口就不能再作I/O口使用了。
在访问期间激活要使用上拉电阻。
●P1口:
Pl是一个带部上拉电阻的8准位双向I/O口,P1作为通用的I/O口使用。
●P2口:
P2是一个带有部上拉电阻的8位准双向I/O口,P2即可作为通用的I/O口使用,也可以作为片外存储器的高8位地址总线,与P0口配合,组成16位片外存储器单元地址。
●P3口:
P3口是一组带有部上拉电阻的8位准双向I/0口。
P3口除了作为通用的I/O口使用之外,每个引脚还具有第二功能。
表3-1具有第二功能的P3口引脚
端口引脚
第二功能:
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外中断0)
P3.3
/INT1(外中断1)
P3.4
T0(定时/计数器0外部输入)
P3.5
T1(定时/计数器1外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD外部数据存储器读选通)
●RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRT0位(地址8EH)可打开或关闭该功能。
DISRT0位缺省为RESET输出高电平打开状态。
●ALE/
:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
●
程序储存允许(
)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次
有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的
信号。
●
/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
如EA端为高电平(接VCC端),CPU则执行部程序存储器中的指令。
F1ash存储器编程时,该引脚加上+12V的编程电压Vcc。
●XTAL1:
振荡器反相放大器及部时钟发生器的输入端。
3、MCS—51的中断源
8051有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片定时/计数器溢出中断TF0和TF1,一个是片串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制,其中5个中断源的程序入口。
表3-2中断源程序入口
入口地址
中断源
0003H
外部中断0(
)
000BH
定时器0(T0)
0013H
外部中断1(
)
001BH
定时器1(T1)
0023H
串行口
(二)交通灯中的中断处理流程
●现场保护和现场恢复
有特殊车辆要通过时就要进行中断,在中断之前,先将交通灯中断前情况保护好,当中断执行后再恢复现场,包括信号灯显示电路。
●中断打开和中断关闭
为了使特殊车辆通行按一下打开中断开关就可以打开中断,关闭中断开关就关闭中断。
●中断返回
执行完中断服务程序后,必然要返回,即回交通灯信号回到中断前状态。
(三)系统硬件总电路构成及原理
实现本设计要求的具体功能,可以选用AT89C51单片机及外围器件构成最小控制系统,12个发光二极管分成4组红绿黄三色灯构成信号灯指示模块和紧急按钮。
1、系统硬件电路构成
本系统以单片机为核心,系统硬件电路由状态灯,按键等组成。
图3-3硬件电路总图
其中P1用于控制红绿黄发光二极管,XTAL1和XTAL2接入晶振时钟电路,REST引脚接上复位电路,P3.2即INT0紧急情况处理按键。
2、系统工作原理
系统上电或手动复位之后,系统显示状态灯,将状态码值送显P1口。
时间到达一个状态所要全部时间,则要进行下一状态判断及衔接,并装入次状态的相应状态码值以及时间值,
当然,还要开启两个外部中断,其一为紧急情况处理中断,一旦信号有效,即K键为低电平时进入中断服务子程序,东西南北路口的红灯全亮禁止全部通行,再按一下K键,中断结束返回。
其二为系统复位,若此时按下复位按钮,系统将自动恢复到初始状态。
3、其它硬件介绍
(1)发光二极管
根据本设计的特点,红绿灯的显示不可少,红绿灯的显示采用普通的发光二极管。
每个方向上设置红绿黄灯,总共4组。
如果东西红灯亮,那南北方向就是绿灯亮,反之亦然,所以在硬件上连接图上也是对称分布的。
图3-4信号灯的连接
(2)按键控制
本设计设置了有2个键:
K键连接P3.2,复位按钮。
K键一端接地,另一端接对应的P3端口。
低电平有效,当按键按下端口接地,单片机捕获到低电平,从而知道相应的输入信息。
四、程序设计
(一)程序主体设计流程
全部控制程序实际上分为若干模块:
键盘设置处理程序,状态灯控制程序,LED显示程序紧停程序,中断服务子程序,红绿灯时间调整程序等。
整个软件程序方面主要分两大部分:
主程序部分和中断处理程序。
图4-1系统总流程图
设计说明:
该智能交通灯控制系统的软件设计采用的是顺序执行并反复循环的方法。
为了能够使实验快速地实现设计目的,我们将每个工作循环时间设计定在20s。
每红绿灯转换时,正在通行路口的绿灯开始闪烁三次,随后点亮黄灯,以提醒路人上的行人及车辆,交通灯即将发生变化。
在此期间若中断按键按下则转入中断服务子程序进行相关操作。
(二)理论基础知识
1、定时器原理
定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。
它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器模值。
计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=T/T0。
计算通式变为:
T=(M-TC)T0
模值和计数器工作方式有关。
在方式0时M为8192;在方式1时M的值为65536;在方式2和3为256。
就此可以算出各种方式的最大延时。
如单片机的主脉冲频率为12MHZ,经过12分频后,若采用方式0最大延时只有8.129毫秒,采用方式1最大延时也只有65.536毫秒。
2、软件延时原理
MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速度很快其他的指令执行时间可以忽略不计。
3、中断原理
本系统主要使用了外部中断,中断信号有引脚INT0和INT1输入,低电平有效,CPU每个时钟周期都会检测INT0和INT1上的信号,8051允许外部中断以电平方式或负边沿方式两种中断方式输入中断请求信号,可由用户通过设置TCON中IT0和IT1位的状态来实现。
以IT0为例,IT0=0,为电平触发方式,IT0=1,为边沿触发方式,本设计采用边沿触发方式,IE0为其中断标志位,有中断信号则置位,中断服务子程序响应后,IE0自动清零。
IE中的EA为允许中断的总控制位,为1开启,EX0为外部中断允许位,为1开启。
在优先级的允许下,一旦有外部中断信号产生,单片机CPU首先保护断点,PC值进栈,然后执行相应的中断服务子程序,执行完后,用RETI指令返回,此时CPU会从堆栈中取保存的断点地址,送回PC,程序再正常执行。
(三)子程序模块设计
1、状态灯显示及判断
在本设计中,实际控制的灯只有6个,即:
东西红灯,东西绿灯,东西黄灯,南北红灯,南北绿灯,南北黄灯。
MOVP1,#00H;南北红,东西绿
SETBP1.0
SETBP1.4
MOVR5,#125
ACALLDELAY
MOVP1,#00H;南北红,东西黄
SETBP1.0
SETBP1.5
MOVR5,#40
ACALLDELAY
MOVP1,#00H;南北绿,东西红
SETBP1.1
SETBP1.3
MOVR5,#125
ACALLDELAY
MOVP1,#00H;南北黄,东西红
SETBP1.2
SETBP1.3
MOVR5,#40
ACALLDELAY
2、紧停及调整时间中断子程序
紧停按键连接到外部中断引脚P3.2,即INT0捕获到一个低电平,则进入该中断进行相关处理。
程序如下:
INT0:
;外部中断服务程序,中断后,全红5秒
PUSHP1
MOVP1,#0
SETBP1.0
SETBP1.3
MOVR5,#25*5
ACALLDELAY
POPP1
RETI
(四)系统软件调试
1、PROTUES仿真器
仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。
单片机系统开发中的仿真包括软件仿真和硬件仿真。
软件仿真这种方法主要是使用计算机软件来模拟实际的单片机运行,因此仿真与硬件无关的系统具有一定的优点。
用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。
软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最后的设计。
硬件仿真使用附加的硬件来替代用户系统的单片机并完成单片机全部或大部分的功能。
使用了附加硬件后用户就可以对程序的运行进行控制,例如单步、全速、查看资源断点等。
2、集成开发环境KEIL
KEILuVision2集成开发环境主要由以下部分组成:
ØKEILuVision2包括:
一个工程管理器,一个功能丰富并有交互式错误提示的编辑器选项设置生成工具,以及在线帮助。
使用KEIL创建源文件并组成应用工程加以管理。
KEIL可以自动完成编译汇编程序的操作;
ØC51编译器和A51汇编器。
Vision2IDE创建的源文件可以被C51编译器或A51汇编器处理生成可重定位的object文件。
KEILC51编译器遵照ANSIC语言标准支持C语言的所有标准特性,另外还增加了几个可以直接支持80C51结构的特性。
KEILA51宏汇编器支持80C51及其派生系列的所有指令集;
ØLIB51库管理器。
B51库管理器可以从由汇编器和编译器创建的目标文件建立目标库,这些库是按规定格式排列的目标模块,可在以后被器所使用当器处理一个库时仅仅使用了库中程序使用了的目标模块而不是全部加以引用;
ØBL51器定位器。
L51器使用从库中提取出来的目标模块和由编译器汇编器生成的目标模块创建一个绝对地址目标模块,绝对地址目标文件或模块包括不可重定位的代码和数据所有的代码和数据都被固定在具体的存储器单元中。
3、利用KEIL开发和调试系统软件流程大致如下:
✧启动uVision2,进入KEIL软件的集成开发环境;
✧利用KEIL置的文本编辑器进行程序源文件的编辑,因为KEIL集成的文本编辑器对中文支持不是很好,可以选择其他的编辑器(本文使用的文本编辑器是Ultraedit—32),uVision2能够自动识别外部改变了的源文件;
✧建立工程,指定针对哪种单片机进行开发,指定对源程序的编译、参数,指定调试方式(本文采用外部硬件仿真器仿真调试的方式,即使用PROTUES仿真器仿真),然后对工程进行相关设置;
✧设置好工程后即可进行编译、。
连接仿真器对软件进行调试。
也可以生成下载到单片机存储器上的.HEX文件。
4、系统软件调试
系统的软件调试借助于PROTUES,在进行系统软件的连续调试之前要先进行软件的初调,就是要使各个子程序模块运行正确,程序的运行流程正确。
✓功能子程序的调试。
能子程序的调试包括运算、采样、数字滤波以及PID运算等子程序的调试。
在调试功能子程序时,许多参数都是未知的,要根据其所需的条件,给出假定的数据,使其运行,如果能完成预定的处理功能或与手工计算的结果相符,就说明该子程序己调试通过。
调试时由小到大,由里到外。
例如,调试PID算法子程序时,先调通其包含的各个运算子程序和参数处理子程序,然后将它们连起来进行通调。
通调时,也是假定一些数据、参数和初始条件,然后运行程序。
当运算结果与手工计算的结果相同时,该算法子程序则调试完成,反之,就要进行相应的修改。
其它子程序的调试同理;
✓程序流程的调试。
序流程的调试主要是查看程序运行的步骤是否正确,在某时刻程序运行所处的位置是否正确,是否能正确运行各个中断服务程序。
在调试过程中,先将PID算法子程序屏蔽,输出可控硅导通时间用一个固定的常数代替,在各个中断服务子程序设置断点,然后运行程序,查看程序是否能运行到所有的断点,若所有断点都能运行到,则程序流程基本正确。
去掉所有断点,再一次运行程序,查看可控硅状态,从而判断程序流程正确,反之,若程序流程不正确,做相应的修改后,重新调试;
✓功能程序与算法程序的通调。
完成整个程序流程的调试后,将PID等算法子程序加入,在算法子程序前或后设置断点,运行整个程序。
当程序在断点处暂停时,查看PID计算的控制量与手工计算的值是否相同。
多运行几次,若每次的结果都正确,则说明程序各个部分互相没有矛盾,反之,则说明算法子程序和其它子程序之间有影响,需要做相应的修改后重新调。
五、程序调试及结果分析
(一)总体设计程序
ORG0000H
AJMPMAIN
ORG0003H
LJMPINT0
ORG0040H
MAIN:
SETBEA
SETBIT0
SETBEX0
S:
MOVP1,#00H;南北红,东西绿
SETBP1.0
SETBP1.4
MOVR5,#125
ACALLDELAY
MOVR4,#6;南北红,东西绿闪3次
S1:
SETBP1.0
CPLP1.4
MOVR5,#13
ACALLDELAY
DJNZR4,S1
MOVP1,#00H;南北红,东西黄
SETBP1.0
SETBP1.5
MOVR5,#40
ACALLDELAY
MOVP1,#00H;南北绿,东西红
SETBP1.1
SETBP1.3
MOVR5,#25*5
ACALLDELAY
MOVR4,#6;南北绿闪3次,东西红
S2:
CPLP1.1
SETBP1.3
MOVR5,#13
ACALLDELAY
DJNZR4,S2
MOVP1,#00H;南北黄,东西红
SETBP1.2
SETBP1.3
MOVR5,#40
ACALLDELAY
LJMPS
DELAY:
;延时子程序,入口参数为R5
MOVR6,#100
DEL1:
MOVR7,#200
DEL2:
DJNZR7,DEL2
DJNZR6,DEL1
DJNZR5,DELAY
RET
INT0:
;外部中断服务程序,中断后,全红5秒
PUSHP1
MOVP1,#0
SETBP1.0
SETBP1.3
MOVR5,#125
ACALLDELAY
POPP1
RETI
END
(二)protues仿真模拟及模拟图
1、交通灯系统
2、模拟图
六、总结
为期两周的单片机原理及应用课程设计的学习与实践结束了,在两周的时间里使我受益颇深,不仅巩固了在课堂上所学到的知识,同时也扩展了自己的知识面,现将我的学习实践心得做出如下总结:
在系统的设计与调试,我觉得它主要考验你的思维逻辑能力及你对指令的熟悉程度。
可以说在整个软件设计过程中,让我学会了很多。
当然,通过几次反复调试过程,使得我对汇编指令有了更深刻的理解。
在整个课程设