《单片机--交通灯的设计.doc》由会员分享,可在线阅读,更多相关《单片机--交通灯的设计.doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘要目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。本课程设计通过单片机来实现交通信号控制的设计。目的通过键盘控制、数码管显示完成设计主要内容。关键词:单片机 控制 交通信号 键盘控制 数码管显示目录1 绪论11.1 课题背景11.2 课题要求22 课程设计原理32
2、.1 MSC-51芯片简介32.1.1 中央处理器32.1.2 存储器32.1.3 并行输入输出口42.1.4 中断系统42.1.5 时钟电路42.1.6 复位电路43 系统模块设计63.1 计时功能模块设计63.2 动态扫描设计63.3 整体设计原理框图和单片机硬件电路原理图63.4 单片机资源分配83.5 程序设计思路83.6 程序流程83.7 软硬件调试方案94 设计结果显示104.1 发光二级管的显示104.2 八段数码管得显示104.3 电路控制显示115 设计心得12参考文献13附录 交通灯设计程序141 绪论1.1 课题背景 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化
3、和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。 用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管芯片、电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。 现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机
4、智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。 图1-1 单片机铁路交通已经使用自动转换的灯光信号有一段时间了。但是由于火车是按固定的时刻表以单列方式运行的,而且火车要停下来不是很容易,因此铁路上使用的信号只有一种命令:通行。公路交通的红绿灯则不一样,它的职责在很大程度上是要告诉汽车司机把车辆停下来。 1.2 课题要求 本课题的主要内容是采用单片机实现十字路口交通灯的设计,通过这个实习进一步加深单片机原理及应用等相关课程中的理论知识,熟练掌握单片机的编程、调试和应用系统的开发。 实现“十字路口交通灯
5、”的设计要求:1、实现南、北、东、西各三个灯(红、黄、绿)的显示及切换,各种状态如下;南北 东西持续时间状态1绿灯 亮红灯 亮30秒状态2绿灯 闪3次(亮一秒,灭一秒)红灯 亮6秒状态3黄灯 亮红灯 亮3秒状态4红灯 亮黄灯 亮3秒状态5红灯 亮绿灯 亮30秒状态6红灯 亮绿灯 闪3次(亮一秒,灭一秒)6秒状态7红灯 亮黄灯 亮3秒状态8黄灯 亮红灯 亮3秒状态9回到状态12、南北、东西两向各有倒计时功能(各两位 数码管显示); 要求两位数的倒计时。3、功能键:(1)启动按钮 (2)停止按钮 (2)急救车的控制按钮4、急救车的控制按钮按下时,四个路口全红灯状态。2 课程设计原理2.1 MSC-
6、51芯片简介8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:2.1.1 中央处理器 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。2.1.2 存储器8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存
7、器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。图2-1 8051内部结构8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。定时/计数器(ROM),8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。2.1.3 并行输入输出口8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。全双工串行口,8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器
8、使用。2.1.4 中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。2.1.5 时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿
9、结构。2.1.6 复位电路 在单片机应用系统中,除单片机本身需要复位以外,外部扩展I/O接口有电路等也需要复位,因此需要一个上电复位在内的系统同步复位电路,RST管脚上的信号可以使8051处于复位状态,8051的复位有自动上电复位和人工按钮复位两种,下图给出了他们的电路。图2-2 MCS-51的复位电路下图是MCS-51系列单片机的内部结构示意图3。图2-3 单片机内部结构示意图3 系统模块设计3.1 计时功能模块设计 要实现计时功能则需要使用定时器来计时,通过设置定时器的初始值来控制溢出中断的时间间隔,再利用一个变量记录定时器溢出的次数,达到定时1秒中的功能。当计时每到1秒钟后,东西、南北信
10、号灯各状态的暂存剩余时间的变量减1。当暂存剩余时间的变量减到0时,切换到下一个状态,同时将下一个状态的初始的倒计时值装载到计时变量中。开始下一个状态,如此循环重复执行。3.2 动态扫描设计 需要使用4个数码管分别显示东西、南北的倒计时数字,将暂存各状态剩余时间的数字从变量中提取出“十位”和“个位”,用动态扫描的方式在数码管中显示。整个程序依据定时器的溢出数来计时,每计时1S则相应状态的剩余时间减1,一直减到0时触发下一个状态的开始。3.3 整体设计原理框图和单片机硬件电路原理图 选用MCS51系列AT89S51单片机作为微控制器,选择两个四联的共阴极数码管组成8位显示模块,由于AT89S51单
11、片机驱动能力有限,采用两片74HC244实现总线的驱动,一个74HC244完成共阴极数码管位控线的控制和驱动,另一个74HC244完成数码管的7段码输出,在7段码输出口上各串联一个100欧姆的电阻对7段数码管限流。用P3口的P3.0-P3.5完成发光二极管的控制,实现交通灯信号的显示,每个发光二极管串联500欧姆电阻起限流作用。整体设计原理框图如下:图3-1 整体设计原理框图图3-2 交通灯硬件原理图3.4 单片机资源分配 单片机P3口的P3.0-P3.1引脚用作输出,控制发光二极管的显示。在计时模块中,需要定义两个数组变量(init_sn3,init_ew3)来存储东西、南北两个方向在不同状
12、态中倒计时的初始值,题目中每个方向的交通灯共有3种显示状态,因此数组元素个数为3。还需要定义两个变量( cnt_ sn, cnt_ ew)暂存东西、南北两个方向的倒计时剩余时间。 在状态的切换中,为了明确当前处于哪种状态,东西、南北方向各设置一个状态变量(state_val_sn, state_val_ew),当倒计时的剩余时间到零时,状态变量增1,表示启动下一个状态,当该变量增到3时变为0,回到序号为1的状态。3.5 程序设计思路 在设计中,由于没有键盘功能,因此只涉及定时计数和动态扫描功能。主程序将变量初始化之后,设置单片机定时器和中断特殊功能寄存器的初始值,将定时器T1的工作方式设置为8
13、位自动装载模式,定时器每隔250us产生一次溢出。在初始化变量与寄存器后,主程序进入一个循环结构,在循环中只做动态扫描的工作,根据东西、南北两向的剩余时时间进行动态扫描显示。计时以及状态的切换通过定时器的中断服务程序来实现,在中断服务程序中,每计时到一秒时,则各方向当前状态的剩余时间减1,一直减到0时触发下一个状态的开始,改变交通灯的指示。3.6 程序流程图3-3 交通灯主程序流程图图3-4 中断服务程序流程图3.7 软硬件调试方案 软件调试方案:伟福软件中,在“文件新建文件”中,新建C语言源程序文件,编写相应的程序。在“文件新建项目”的菜单中,新建项目并将C语言源程序文件包括在项目文件中。
14、在 “项目编译”菜单中将C源文件编译,检查语法错误及逻辑错误。在编译成功后,产生以 “*.hex”和“*.bin” 后缀的目标文件。硬件调试方案:在设计平台中,将单片机的P3.0-P3.5分别与独立式键盘的相应位通过插线连接起来。4 设计结果显示 运用C语言编写设计交通灯所需要的程序(见附录1),把程序下载到的电路板上,观察电路板上的结果如下。4.1 发光二级管的显示 把单片机的P1口接到颜色不同的发光二极管上,P1.0P1.2接的发光二级管作为南北方向的红、黄、绿灯,P1.3P1.5作为东西方向的红、黄、绿灯。发现各发光二级管的状态如下:南北 东西持续时间状态1绿灯 亮红灯 亮30秒状态2绿
15、灯 闪3次(亮一秒,灭一秒)红灯 亮6秒状态3黄灯 亮红灯 亮3秒状态4红灯 亮黄灯 亮3秒状态5红灯 亮绿灯 亮30秒状态6红灯 亮绿灯 闪3次(亮一秒,灭一秒)6秒状态7红灯 亮黄灯 亮3秒状态8黄灯 亮红灯 亮3秒状态9回到状态14.2 八段数码管得显示 数码管持续时间如上表所示。4.3 电路控制显示 本电路有以下功能键:(1) 启动按钮:按下后电路开始运行; (2) 停止按钮:按下后电路停止运行; (3) 急救车的控制按钮:按下时,四个路口全红灯状态。5 设计心得单片机作为我们的主要专业课之一,虽然在大三我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点
16、一滴的努力中对单片机的兴趣也在逐渐增加。 这项看起来不需要多少技术的工作却是非常需要耐心和精力在两个星期后的今天我已明白课程设计对我来说的意义,它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是同学间的团结,虽然我们这次花去的时间比别人多,但我相信我们得到的会更多! 作为一名电子专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提
17、供了良好的实践平台。 在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。参考文献1李鸿等单片机原理及应用M湖南大学出版社,20052何立民单片机高级教程-应用与设计M北京航空航天大学出版社,2000,83戴佳51单片机C语言应用程序设计实例精讲M北京:电子工业出版社,20064于京51系列单片机C程序设计与应用案例M北京:中国电力出版社
18、,20065孙育才ATMEL新型AT89S52系列单片机及其应用M北京:清华大学出版社, 20056李华MCS-51系列单片机实用接口技术M北京:北京航空航天大学出版社,2000附录 交通灯设计程序/晶振:11.0592M T1-250微秒溢出一次/*变量的定义: show_val_sn,show_val_ew: 显示的值0-59 state_val_sn,state_val_ew: 状态值 南北方向0-绿灯亮;1-黄灯亮;2-红灯亮 T1_cnt: 定时器计数溢出数 cnt_sn,cnt_ew: 倒计时的数值 init_sn3,init_ew3 倒计时 led_seg_code:数码管7段码
19、 */#include reg51.h#define S0 0#define S1 1#define S2 2sbit SN_green=P32 ;/南北方向绿灯sbit SN_yellow=P31 ;/南北方向黄灯sbit SN_red=P30 ;/南北方向红灯sbit EW_green=P35 ;/东西方向绿灯sbit EW_yellow=P34 ;/东西方向黄灯sbit EW_red=P33 ;/东西方向红灯#define KEY_PIN P1unsigned char data cnt_sn,cnt_ew;unsigned char Key;unsigned int data T1_c
20、nt,count1,count2;unsigned char data state_val_sn,state_val_ew;char code led_seg_code10=0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;char code init_sn4=24,4,34,4;char code init_ew5=29,4,24,4,4;/-void delay(unsigned int i)/延时 while(-i); /-void delay_ms(unsigned char DelayTime)/延时子程序 unsigned ch
21、ar i;for(;DelayTime0;DelayTime-) for(i=0;i3999) /如果计数3999, 计时1s T1_cnt=0; count1+; count2+; if (cnt_sn!=0) /南北方向计时 cnt_sn-; if(count1=18&count13) state_val_sn=0; cnt_sn=init_snstate_val_sn; switch (state_val_sn) /根据状态值,刷新各信号灯的状态 case 0: SN_green=0 ;/南北方向绿灯 SN_yellow=1 ;/南北方向黄灯 SN_red=1 ;/南北方向红灯 brea
22、k; case 1: SN_green=1 ;/南北方向绿灯 SN_yellow=0 ;/南北方向黄灯 SN_red=1 ;/南北方向红灯 break; case 2:SN_green=1 ;/南北方向绿灯 SN_yellow=1 ;/南北方向黄灯 SN_red=0 ;/南北方向红灯 break; case 3: SN_green=1 ;/南北方向绿灯 SN_yellow=0 ;/南北方向黄灯 SN_red=1 ;/南北方向红灯 break; if (cnt_ew!=0) /东西方向计时 cnt_ew-; if(count2=52&count24) state_val_ew=0; cnt_ew
23、=init_ewstate_val_ew; switch (state_val_ew) /根据状态值,刷新各信号灯的状态 case 0: EW_green=1 ;/东西方向绿灯 EW_yellow=1;/东西方向黄灯 EW_red=0 ;/东西方向红灯 break; case 1: EW_green=1 ;/东西方向绿灯 EW_yellow=0 ;/东西方向黄灯 EW_red=1 ;/东西方向红灯 break; case 2: EW_green=0 ;/东西方向绿灯 EW_yellow=1 ;/东西方向黄灯 EW_red=1 ;/东西方向红灯 break; case 3: EW_green=1
24、 ;/东西方向绿灯 EW_yellow=0 ;/东西方向黄灯 EW_red=1 ;/东西方向红灯 break; case 4: EW_green=1 ;/东西方向绿灯 EW_yellow=1;/东西方向黄灯 EW_red=0 ;/东西方向红灯 break; /-main()/初始化各变量 KEY_PIN=0xff; cnt_sn=init_sn0; cnt_ew=init_ew0; T1_cnt=0; state_val_sn=0; /启动后,默认工作在序号为1的状态 state_val_ew=0;/初始化各灯的状态 SN_green=0 ;/南北方向绿灯亮 SN_yellow=1 ;/南北方
25、向黄灯灭 SN_red=1 ;/南北方向红灯灭 EW_green=1 ;/东西方向绿灯灭 EW_yellow=1;/东西方向黄灯灭 EW_red=0 ;/东西方向红灯亮/初始化51的寄存器 TMOD=0x20;/用T1计时 8位自动装载定时模式 TH1=0x19;/0x4b; /500微秒溢出一次; 250=(256-x)*12/11.0592 - x= 230.4 TL1=0x19; EA=1; /开中断 ET1=1; TR1=1; /开定时器T1while(1) led_show(cnt_sn,cnt_ew); Key=keym(); if(Key=(1 x= 230.4 TL1=0x19; EA=1; /开中断 ET1=1; TR1=1; /开定时器T1 if(Key=(1S1)0xFF) EA=0; if(Key=(1S2)0xFF) EA=0; EW_green=1 ;/东西方向绿灯 EW_yellow=1;/东西方向黄灯 EW_red=0; SN_green=1 ;/南北方向绿灯 SN_yellow=1 ;/南北方向黄灯 SN_red=0 ;/南北方向红灯