《基于单片机控制交通信号灯电子设计大学毕设论文.doc》由会员分享,可在线阅读,更多相关《基于单片机控制交通信号灯电子设计大学毕设论文.doc(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、电子信息工程目 录第一章 课程目的与任务21.1设计目的21.2设计任务2第二章 设计方案分析32.1电源模块分析32.2显示界面分析32.3总体界面分析3第三章 主要元件介绍53.1 单片机介绍53.2 发光二极管介绍73.3 LED数码管介绍83.4 反相器介绍83.5 晶振介绍9第四章 硬件电路104.1 时钟电路104.2 复位电路104.3 交通灯电路104.4 LED数码管电路114.5 按键电路124.6单片机最小系统12第五章 软件设计145.1 程序流程图145.2 主要模块程序15第六章 主要问题18第七章 总结20附录一:元件清单22附录二:总电路图23附录三:总程序24
2、附录四:参考文献34摘 要随着科技和经济的发展,汽车已然成为了人们出门旅行的必备工具。但是随之而来的就是交通拥堵和交通事故频繁发生的问题,而且交通事故造成的人员死亡率颇高,这使得交通部门及相关部门非常棘手。因此,诞生了城市交通管理系统,它是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,是现代城市交通监控指挥系统中最重要的组成部分。随着经济的发展和人们生活水平的提高,汽车走进了千家万户,成为了这个时代进步的标志。但是,汽车的增多加剧了道路拥挤的困扰。所以,我们要在拓宽道路的同时,建设设计好更多更好的交通信号灯管理系统,来解决我们当前的问题。现在,运用基于单片机控制交通信号灯
3、成为了我们控制交通的主流。运用单片机控制交通信号灯不仅结构简单,运行安全,精度高,而且成本很低,编程简单。为了紧随时代的步伐,我们开始研究这一课题,并进行相关调查和设计报告。这次我主要设计的是基于AT89c52控制的交通信号灯。其系统包括AT89c52、LED显示、交通信号灯演示系统、按键等组成。系统的主要功能是控制信号灯的显示情况来管理交通的,还有紧急情况处理功能。关键字:交通信号灯,单片机,AT89c52交通信号灯模拟控制系统设计第一章 课设目的与任务1.1 设计目的本课程设计的主要目的是通过对单片机原理及电子技术的学习,综合掌握电子电路综合设计的过程,设计要求和具体的设计方法,掌握单片机
4、的功能和运用,了解单片机的发展历程及未来前景等。通过模拟仿真设计更好的复习、理解模拟电子、数字电子和单片机等课程内容,使理论和实际相结合,加强学生的动手能力以及查阅相关资料解决实际问题的能力,培养学生从事设计工作的整体观念,为以后的工作打好基础。1.2 设计任务1.完成交通灯的变化规律,即一个十字路口为东西向和南北向,四个路口均有红黄绿三等和两个LED数码显示管。交通灯上电以后进入初始状态即东西红灯,南北红灯。5s后转状态1:南北绿灯亮通车,东西红灯亮,禁止通行,持续30s;30s后转状态2:南北绿灯灭转黄灯闪亮,延迟5s,东西仍然红灯;5s后转状态3:东西绿灯亮通车,南北转红灯,持续30s;
5、30s后转状态4:东西绿灯灭转亮黄闪灯,延迟5s,南北仍然红灯。最后循环至状态1。2.用8个LED数码管(各方向均有两个LED数码管,分别表示个位和十位),显示倒计时。倒计时用于提醒驾驶员或者行人信号灯发生改变的时间,以便他们在“停止”和“通行”两者做出合适的选择。3.紧急状态下,通过K1键手动设置,将所有路口的灯变为红灯。第二章 设计方案分析2.1 电源模块分析方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。方案二:采用单片机控制模块提供电源。该方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
6、综上考虑,选择方案二。2.2 显示界面分析方案一:完全采用数码管显示。这种方案优点是实现简单,可以完成倒计时功能。缺点是功能较少,只能显示有限的符号和数码字符。方案二:完全采用点阵式LED显示。这种方案功能强大,可方便的显示各种英文字符,汉字,图形等,但实现复杂,且须完成大量的软件工作。根据设计要求,选择方案一。2.3总体方案分析方案一:直接进行片选和驱动LED数码显示的交通灯系统单片机时钟电路LED数码显示复位电路交通灯电路按键电路图1 总方案一该方案直接采用单片机的I/O口对LED数码管进行数字显示和片选的驱动。时钟电路和复位电路为单片机提供正常的工作环境。按键电路为在紧急情况下的应急处理
7、系统,作用是在紧急情况下使东西南北的灯变为红灯。交通灯电路由单片机I/O口直接驱动。方案二、:采用74LS138译码器和CD4511译码器的交通灯系统时钟电路复位电路按键电路单片机LED数码显示交通灯电路CD451174LS138图2 总方案二该方案使用了CD4511显示译码器和74LS138译码器。通过CD4511将单片机输出的BCD8421码转换成为七段码然后送LED数码管显示;通过74LS138译码器将单片机输出的三位二进制码转换成八位只有一个低电平的代码,从而对LED数码管进行片选。时钟电路和复位电路为单片机提供正常的工作环境。按键电路为在紧急情况下的应急处理系统,作用是使东西南北的等
8、变为红灯。红绿灯电路由单片机I/O口直接驱动。综合上述考虑,方案一电路更加简单,能够完成任务要求,节省了I/O口,而且成本较低,所以选择方案一。第三章 主要元件介绍3.1 单片机介绍AT89C52是美国 ATMEL 公司生产的低电压,高性能CMOS8位单片机,片内含8k的可反复擦写的只读程序存储器(PEROM)和256B的随机存取数据存储器(RAM),2个16位的定时计数器,4个八位并行口,1个全双工串行口,看门狗系统。器件采用 ATMEL公司的高密度,非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU), 功能强大。AT89C52单片机适
9、合于许多较为复杂控制应用场合。CPUROM中断系统串行I/O口并行I/O口定时器RAM图3 AT89c52内部结构图AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:RST(9脚)为复位输入端口,外接电阻电容组成的复位电路。WR(16脚)为外部数据存储器写选通输出端,低电平有效。RD(17脚)为外部数据存储器读选通输出端,低电平有效。XTAL1(1
10、9脚)和XTAL2(18脚)为振荡器输入输出端口,外接11.0592MHz 晶振。PESN为片外程序存储器的读选通信号,低电平有效。ALE(30脚)为地址信号锁存端。EA(31脚)为外部程序存储器访问允许控制端,低电平有效。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义。图4 AT89c52引脚图单片机的基本系统是单片机最小系统。在此系统中,包含一个单片机,在该单片机中含有程序存储器和数据存储器,仅在外部配置了维持系统运行的基本部件,例如电源、输入/输出,除了这些,还包括不扩充程序存储器、数据存储器、I/O接口以及
11、其他功能部件,因此被称为最小系统。单片机复位电路电源电路时钟电路输入输出图5 单片机最小系统示意图在大多数系统中,由于需要实现一些特殊的功能,采用最小系统无法满足系统的控制要求,所以要扩展特殊功能部件,弥补单片机内部资源的不足。单片机扩展系统通过并行I/O口或者串行口做总线,在外部扩展了程序存储器、数据存储器、A/D转换等特殊部件,以满足控制系统的特殊要求。随着科技的发展,单片机各级性能不断提高,CPU功能增强,内部资源增加,寻址范围增加等,大大推动了单片机的应用。而且单片机系统结构简单,使用方便,实现了模块化。其可靠性好,可长时间工作。处理功能强,速度快。所以,现在单片机的应用十分广泛。EP
12、ROM程序存储器RAM数据存储器A/DD/A并行接口串行接口复位电路时钟电路输入/输出电源电路单片机图6 单片机扩展系统结构示意图3.2 发光二极管介绍它是半导体二极管的一种,可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。常用的是发红光、绿光或黄光的二极管。发光二
13、极管和数码二极管一样分为共阴极和共阳极两种,本实验在硬件电路搭建的时候采用的是共阳极发光二级管,这样使用单片机容易驱动,而采用共阴极则不易驱动二极管,有时候采用高电平驱动则会产生单片机电压过低而无法点亮二极管致使单片机烧毁的情况。在proteus8软件仿真的时候软件给出的交通灯如图8所示,该红绿灯模块为共阴极发光二级管模块,所以仿真时采用的驱动方式是高电平驱动。由于是软件仿真,所以不会出现无法驱动的情况,真实情况下需要考虑其驱动情况。 图7 发光二极管图 图8 交通灯3.3 LED数码管介绍LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e
14、,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。 图9 LED数码管3.4 反相器介绍反相器是可以将输入信号的相位反转180度,这种电路应用在模拟电路中,比如说音频放大,时钟振荡等,在电子线路设计中经常
15、用到。它由两个增强型MOS场效应管组成,其中一个是驱动管,一个是负载管。它的主要特点是工作速度快,带负载能力强,传输特性好等。 图10 反相器3.5 晶振介绍晶振是晶体振荡器的简称。它是指从一块石英晶体上按一定方位角切下薄皮;而在封装内部添加IC组成振荡器电路的晶体元件称为晶体振荡器。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的。它的主要技术指标有总频差、频率温度温度度、频率稳定预热时间、频率老化率、频率压控范围、压控频率响应范围、频率压控线性。主要参数有频率准确度、温度稳定度、频率调节范围、调频特性等。它的主要应用有:通用晶体振荡器,用于各种电路中,产生振荡频率;时钟脉冲用石英振
16、荡器,与其它元件配合产生标准脉冲信号,广泛用于数字电路中;微处理器和CTVVTR用晶体谐振器;钟表用石英晶体振荡器。 图11 晶振第四章 硬件电路4.1 振荡电路AT89C51是内部具有振荡电路的单片机,只需在18脚和19脚之间接上晶振,给单片机加工作所需直流电源,振荡器就开始振荡起来。振荡电路就为单片机工作提供了所需要的时钟脉冲信号,使单片机的内部电路、单片机的内部程序开始工作。振荡电路不工作,整个单片机电路都不能正常工作。AT89C51常外接11.0592MHz、12MHz的晶振,18脚和19脚分别对地接了一个30pF的电容,目的是防止单片机自激。若18脚接外部时钟脉冲,则19脚接地。图1
17、1 振荡电路4.2复位电路复位电路就是在RST端(9脚)外接的一个电路,目的是使单片机上的电开始工作时,内部电路从初始状态开始工作,或者在工作中人为让单片机重新从初始状态开始工作。在时钟工作的情况下,只要复位引脚高电平保持在两个机器周期以上的时间,AT89C51便能完成系统重置的各项工作,使得内部特殊功能寄存器的内容均被设置成已知状态,并且从地址0000H处读入程序代码而执行程序。图12 复位电路4.3 交通灯电路交通灯电路由12个发光二极管组成,在Proteus8中提供了仿真的交通灯模型,如图13所示。因为东西和南北的交通情况相同,所以用6个I/O口就可以满足要求。南北接P1.3、P1.4、
18、P1.5引脚,东西接P1.0、P1.1、P1.2引脚。因为提供的是共阴极的交通灯,所以在模拟仿真时,在各个引脚输出端都加入了一个反相器。图13 交通灯电路4.4 LED数码管电路LED数码管电路采用P0口进行数码管的数字显示,用P2口对数码管进行片选。在软件电路仿真连接的时候用非门从而使电路由低电平驱动变为高电平驱动。P0口内部没有上拉电阻,所以在使用P0口是需要外接上拉电阻。P2口的P2.4、P2.5、P2.6、P2.7四个口作为数码管的片选信号,低电平有效,因为南北和东西信号情况相同,所以只需要四个信号就可以啦。其显示电路如下图。图14 LED数码管电路4.5 按键电路按键电路比较简单,原
19、理是先将P3口全部置1,然后在延迟代码段中加入检测P3口高低电平的代码,观察P3口是否变化,如果有变化则进入紧急情况的处理代码,在紧急情况处理代码中继续检测P3口状态,如果变回全部为1,则跳到初始状态重新开始。此电路中,按键接到了P3.0口。由代码可知,按键电路接到P3口任何一个引脚都可以。图15 按键电路4.6 单片机最小系统单片机最小系统就是前面所说的时钟电路、复位电路、电源电路和输入输出电路的集合。40脚接电源,20脚接地,18和19脚接时钟电路,9脚接复位电路。输入输出系统根据需要接P0、P2口。图16 单片机最小系统第五章 软件设计5.1 程序流程图图17 程序流图5.2 主要模块程
20、序设置状态模块:该模块设置程序的状态初始值,分为初始状态,状态1和状态2,代码段主要如下:INIT:MOV 42H,#1 ;闪烁标志位 MOV R0,#0 ;R0为状态标志位 MOV SP,#60H ;设置堆栈指针 MOV DPTR,#TABLE ;将TABLE送DPTR MOV P2,#0FFH ;所有计数器片选置1 MOV R7,#0 计数器1十位 MOV R6,#5 ;计数器1个位 MOV R5,#60 ;循环次数 MOV R2,#0 ;计数器2十位 MOV R1,#5 ;计数器3个位 MOV P1,#0F6H ;红绿灯状态 LJMP SCAN ;跳计数器扫描段代码循环扫描模块:该模块主
21、要功能为扫描数码管的显示计数器时间,以及显示红绿灯的状态。代码段主要如下:SCAN:MOV A,R7 ;将计数器十位送A MOVC A,A+DPTR ;取数据对应的码 MOV P0,A ;送P0口显示 CLR P2.7 ;选中第一个数码管显示 LCALL DELA ;延迟 SETB P2.7 ;取消选中的第一个数码管 MOV A,R6 ;计数器个位送A MOVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.6 ;选中第二个数码管显示 LCALL DELA ;延迟 SETB P2.6 ;取消选中的第二个数码管 MOV A,R2 ;将计数器十位送A M
22、OVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.5 ;选中第三个数码管显示 LCALL DELA ;延迟 SETB P2.5 ;取消选中的第三个数码管 MOV A,R1 ;选中第四个数码管 MOVC A,A+DPTR ;去计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.4 ;选中第四个数码管显示 LCALL DELA ;延迟 SETB P2.4 ;取消选中的第四个数码管 DJNZ R5,SCAN ;循环扫描延迟代码模块:该模块提供延迟0.004167s的时间,用于四个数码管的循环扫描延时调用,以此来对计数器进行技术,代码主要
23、如下:DELA:MOV R4,#10 ;给R4赋10DEL: MOV R3,#228 ;给R3赋228 DJNZ R3,$ ;减R3 DJNZ R4,DEL ;减R4,不为0则跳转DEL MOV A,P3 ;将P3口的状态赋给A CJNE A,#0FFH,WARNING ;若按键则跳转到紧急控制代码段 RET ;子程序返回紧急控制模块:该模块的功能是为紧急情况下的应急系统,通过K1键手动设置,将所有路口的等变为红灯,代码主要如下:WARNING:MOV P1,#0F6H ;将南北东西红灯点亮 MOV R7,#0 ;给R7赋0 MOV P2,#00H ;将数码管全部选中 MOV A,R7 ;将计
24、数器十位送A MOVC A,A+DPTR ;取数据对应的码 MOV P0,A ;送P0口显示 MOV A,P3 ;将P3口的状态赋给A CJNE A,#0FFH,WARNING ;若按键则跳转到紧急控制代码段 LJMP STATE1 ;没有则跳转到状态1重新开始 第六章 主要问题1.单片机的I/O口是否够用,不够用怎么办?本系统中南北和东西交通灯的情况一样,所以需要用掉6个I/O口,数码管显示信号及片选信号需要用到12个I/O口,应急系统按键电路需要用到1个I/O口,加起来一共19个,而单片机共有32个I/O口,所以对于本系统完全够用。若存在不够用情况,则可以用CD4511译码器和74LS13
25、8译码器对数码管的数字和片选信号进行译码,从而减少I/O口的使用。2.如何驱动发光二级管?P0口与P1、P2、P3口相比,P0口驱动能力较大,每位可驱动8个LSTTL输入,而P1、P2、P3口的每一位的驱动能力,只有P0口的一半。当P0口的某位为高电平时,可提供400A的电流;当P0口的某位为低电平(0.45V)时,可提供3.2mA的灌电流,如低电平允许提高,灌电流可相应加大。所以,任何一个口想要获得较大的驱动能力,只能用低电平输出。例如,使用单片机的并行口P1P3直接驱动发光二极管。由于P1P3口内部有30K左右的上拉电阻,如果提高电平输出,则强行从P1、P2和P3口输出的电流会造成单片机端
26、口的损坏。如果端口引脚为低电平,能使电流从单片机的外部流入内部,则将大大增加流过的电流值。所以,当P1P3口驱动LED发光二极管时,应该采用低电平驱动。3.数码管显示电路如何设计?此次设计一共有八个数码管,两个数码管合在一起,而且不需要用到小数点位,所以一共包括七个数码管显示信号输入引脚和八个片选信号输入端。使用数码管首先考虑到了CD4511显示译码器和74LS138译码器,CD4511用于将单片机输出的BCD码转换成为七段码然后送LED数码管显示,74LS138译码器用于将单片机输出的3位二进制码转换成八位只有一个低电平的代码,从而对LED数码管进行片选。但是由于本系统比较简单,使用的I/O
27、比较少,使用CD4511译码器和74LS138译码器会使系统电路变得复杂,增加系统成本,而且编程会变得复杂,所以本设计采用的是通过查表将该数据对应的七段码送P0口显示而得。在proteus8仿真时使用的是共阴极数码管,在P0口输出时加上了非门使低电平变为高电平驱动。由于P0口内部没有电阻,因此在P0口还需加上上拉电阻。数码管显示采用循环扫描方式,直到1s结束计数器减1然后继续循环扫描。扫描足够快的话由于人的视觉效应便会感觉数码管是同时点亮的。4.如何实现定时功能?此次设计中使用R7和R6作为计数器1的十位和个位,使用R2和R1作为计数器2的十位和个位。分别赋予计数器1和计数器2初值,对红绿灯和
28、数码管进行扫描,延时。当1s时间到了以后,分别将计数器1和计数器2里面的数据减1,当计数器个位减到0后,对计数器十位减1,当十位减至0的时候,计数器跳到下一状态如此循环。这样就实现了系统的定时功能。5.如何读取键盘数据?此次设计采用扫描P3口的方式来读取键盘数据。将键盘和P3口的其中一个口相连,对P3口赋初值0FFH,在延时子程序中加入P3口状态的扫描,判断是否相同,不同则跳转紧急情况处理段代码进行紧急情况处理。因为本系统用的I/O口不多,所以直接使用任何一个P3口都可以,这样在编程的时候比较容易,而使用某个I/O口的话,需要使用可位寻址的地址,给代码增加了难度,因此直接使用剩下的P3口来进行
29、编程,大大减少了编程工作量,对于系统的整体协调也起到了很大的作用。第七章 总结为了此次设计我搜索了大量的相关资料和问了同学很多的相关问题。一开始听到要做交通灯模拟设计时,我还是很高兴的,因为最起码外部电路的连接是没有问题的,因为之前就了解过相关的知识,所以做起电路图的设计时非常的简单。但难点就是程序的编写,我编程不是很好,所以就在网上找了相关的程序,稍微的修改了一下,然后编写到Keil4中,运行后生成HEX文件,然后烧录到用Proteus8中仿真的电路图中,结果和预料的一样,是完全符合设计要求的。在此次设计中,我学到了很多的东西,而且进一步掌握了单片机的用法,熟悉了单片机最小系统和交通灯的历史
30、。在大二的时候我就自己买了一个单片机,所以对Keil4还是很熟悉的,它可以编写C语言和汇编语言,因为本次是单片机课程设计,所以用的汇编语言,虽然自己的汇编语言不是很好,但读懂一般的程序的能力还是有的。有时候自己在宿舍也会学习单片机的相关教程,并且实际连接电路和编写程序烧录仿真一下,成就感还是挺大的。对于今天的交通灯仿真设计积累了很多的宝贵经验。之前在实验室自己做过一个心形灯的设计,也是基于AT89C52单片机的,算是我第一个比较系统化的设计了,而且是生成实物的。由于那次设计一开始准备的工作不是特全面,在用裸USB接口时烧坏了电脑的两个USB接口,教训意义重大啊。所以,在此次交通灯模拟设计实验时
31、,我做了很多准备工作,看了很多相关的报告和安全知识。之前我用过Protel99SE、Multisim和ProtelDXP2004,还有ORCAD,但是总体感觉还是Proteus8在单片机模拟仿真设计方面最方便,所以我就选择用它绘制电路图。绘制电路图时也出现了很多问题,由于好久没有用它仿真了都有点生疏了,元器件都不知道在哪个库了,经过我的不断摸索、百度查询和同学讨论,最终设计并画完电路图。然后用Keil4编写了汇编语言源程序,并生成HEX文件,烧录到模拟单片机中完成设计要求。通过此次设计,我了解到了交通信号灯的发展历史,同时,也知道了现在每天都有很多的交通事故发生。虽然交通灯的出现一定程度上遏制
32、了交通事故的发生,但是由于汽车速度、驾驶员情绪等等诸多因素使交通事故造成的死亡率一直居高不下。汽车的出现确是方便了人们的出行,但是我们也要看到它带来的负面影响,使多少家庭妻离子散。因为我们不能现在限制时代的步伐,所以我想我们可以在交通灯的基础上发展出更多符合当代社会现状的东西,使它不仅具有警示人们的作用,还要有预警及提示人们注意潜在的交通危险的能力,当然这方面就要考虑到人工智能了,希望在不久的将来人们可以发展出更加全面的交通设施。我在这次设计中,学到了很多专业知识,比如二极管的驱动情况、反相器的内部结构、单片机的内部结构、程序汇编等,还获得了很多人生感悟。大多数的情况下,事情是具有两面性的。我
33、们在接受一件事情带来的好处的同时,一定要考虑这件事情让我们付出的代价。我相信在以后的道路上我会受用无穷。最后,要感谢老师孜孜不倦的教诲和教导,及在设计中给我带来的很大帮助。附录一:元件清单表格 1元件清单序号名称型号参数数量备注1排阻RESPACK-712电阻1K13电容30pF24电容10F15晶振11.0592HZ16按键BUTTON27反相器400912使信号相位反转180 度8发光二极管129LED数码管810单片机AT89C521运算速度快,结构简单附录二:总电路图附录三:总程序 ORG 0030H AJMP INIT ORG 00H;设置初始状态;INIT:MOV 42H,#1 ;
34、闪烁标志位 MOV R0,#0 ;R0为状态标志位 MOV SP,#60H ;设置堆栈指针 MOV DPTR,#TABLE ;将TABLE送DPTR MOV P2,#0FFH ;所有计数器片选置1 MOV R7,#0 ;计数器1十位 MOV R6,#5 ;计数器1个位 MOV R5,#60 ;循环次数 MOV R2,#0 ;计数器2十位 MOV R1,#5 ;计数器3个位 MOV P1,#0F6H ;红绿灯状态 LJMP SCAN ;跳计数器扫描段代码;设置状态1;STATE1:MOV P1,#0EEH ;红绿灯状态 MOV R0,#1 ;R0为状态标志位 MOV 40H,#1 ;判断闪烁位 MOV 41H,#1 ;判断闪烁位 MOV P2,#0FFH ;所有计数器片选置1 MOV R7,#3 ;计数器1十位 MOV R6,#5 ;计数器1个位 MOV R5,#60 ;循环次数 MOV R2,#3 ;计数器2十位 MOV R1,#0 ;计数器3个位 LJMP SCAN ;跳计数器扫描段代码;设置状态2;STATE2:MOV P1,#0F5H ;红绿灯状态 MOV 42H,#1