2022年基于AT89S51单片机的交通灯方案设计书.docx
精品学习资源在今日,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段;但这一技术在19 世纪就已显现了;1858 年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行;这是世界上最早的交通信号灯;1868 年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯;它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止 ”,绿色表示 “留意 ”;1869 年 1 月 2 日,煤气灯爆炸,使警察受伤,遂被取消;1914 年,电气启动的红绿灯显现在美国;这种红绿灯由红绿黄三色圆形的投光器组成,安装在纽约市5 号大街的一座高塔上;红灯亮表示“停止 ”,绿灯亮表示 “通行 ”; 智能的交通信号灯指挥着人和各种车辆的安全运行,实现红、黄、绿灯的自动指挥是城乡交通治理现代化的重要课题.在城乡街道的十字交叉路口,为了保证交通秩序和行人安全, 一般在每条道路上各有一组红、黄、绿交通信号灯,其中红灯亮 ,表示该条道路禁止通行;黄灯亮 ,表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆连续通行;绿灯亮 , 表示该条道路答应通行.交通灯掌握电路自动掌握十字路口两组红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现十字路口城乡交通治理自动化;本文为了实现交通道路的治理,力求交通治理先进性、科学化. 分析应用了单片机实现智能交通灯管制的掌握系统,以及该系统软、硬件设计方法,试验证明该系统实现简洁、经济,能够有效地疏导交通 ,提高交通路口的通行才能;2 系统设计要求与整体规划2.1 基础设计要求1) 设计一个十字路口的交通灯掌握电路,要求南北方向和东西方向两个交叉路口的车辆交替运行,两个方向能依据车流量大小自动调剂通行时间,车流量大,通行时间长,车流量小,通行时间短;2) 每次绿灯变红灯时 ,要求黄灯先亮 5S,才能变换运行车辆;3) 东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用数码管显示器进行显示(采纳倒计时的方法);4) 同步设置人行横道红、绿灯指示;2.2 系统规划我们将系统设计成可分别单独工作的主掌握机与客户端的形式,但是和传统的 C/S 模式不一样的是,每个终端机可以脱离主掌握机而独立工作;即使主掌握机停止工作,或者由于某种缘由不能正常工作,各终端机也可以照常稳固的工作;各个终端机负责治理路口的多个信号灯;为了便利我们称主掌握机为主系统,各个终端机称为子系统;掌握系统的总框图如图 2-1 示欢迎下载精品学习资源远程主系统运算机欢迎下载精品学习资源路口子系统路口子系统路口子系统欢迎下载精品学习资源A 干道交通信号A干道交通信号B 道交通信号灯B 道交通信号灯图 2-1 掌握系统的总框图2.3 方案论证和比较1) 智能交通灯的讨论现状目前设计交通灯的方案有很多,有应用CPLD 设计实现交通信号灯掌握器方法;有应用 PLC 实现对交通灯掌握系统的设计;有应用单片机实现对交通信号灯设计的方法;目前,国内的交通灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯;加上一个倒计时的显示计时器来掌握行车;对于一般情形下的安全行车,车辆分流尚能发挥作用,但依据实际行车过程中显现的情形,仍存在缺点:两车道的车辆轮番放行时间相同且固定, 在十字路口,常常一个车道为主干道,车辆较多,放行时间应当长些;另一车道为副干道,车辆较少,放行时间应当短些2) 智能交通灯的设计方案及改进措施针对道路交通拥挤,交叉路口常常显现拥堵的情形;利用单片机掌握技术,提出了软件和硬件设计方案及改进措施:依据各道路路口车流量的大小自动调剂通行时间;由于 AT89S51 单片机自单带有2 计数器, 6 个中断源,能满意系统的设计要求;用单片机设计不但设计简洁,而且成本低,用其设计的交通灯也满意了要求,所以本文采纳单片机设计交通灯;系统构图如图2-2 所示:南北检测点欢迎下载精品学习资源东西检测点T0南北红绿黄灯时间显示块T1AT89S51东西红绿黄灯时间显示块紧急掌握开关图 2-2 系统结构框图3 AT89S51 单片机简介3.1 单片机概述单片机微型运算机是微型运算机的一个重要分支,也是颇具生命力的机种;单片机微型运算机简称单片机,特殊适用于掌握领域,故又称为微掌握器;通常,单片机由单块集成电路芯片构成,内部包含有运算机的基本功能部件:中心处理器、储备器和I/O 接口电路等;因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机掌握系统;AT89S51 是美国 ATMEL公司生产的低功耗,高性能CMOS8 位单片机,片内含4k bytes 的可系统编程的Flash 只读程序储备器 ,器件采纳ATMEL公司的高密度、非易失性存 储技术生产,兼容标准8051 指令系统及引脚;它集Flash 程序储备器既可在线编程(ISP)也可用传统方法进行编程及通用8 位微处理器于单片芯片中,ATMEL公司的功能强大,低价位 AT89S51 单片机可为您供应很多高性价比的应用场合,可敏捷应用于各种掌握领域;3.2 AT89S51 单片机的主要性能参数和主要引脚3.2.1 主要性能参数与单片机产品兼容8K 字节在系统可编程Flash 储备器、 1000 次擦写周期、全静态操作: 0Hz 33Hz、三级加密程序储备器、32 个可编程 I/O 口线 、三个 16 位定时器 /计数器八个中断源 、全双工 UART 串行通道低功耗闲暇和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符;3.2.2 AT89S51 芯片内部结构简介中·央处理器:中心处理器 CPU 是整个单片机的核心部件,是8 位数据宽度的处理器,能处理8 位二进制数据或代码, CPU 负责掌握、指挥和调度整个单元系统和谐的工作,完成运算和掌握输入输出功能等操作;·数据储备器 内部 RAM :欢迎下载精品学习资源数据储备器用于存放变化的数据;AT89S51 中数据储备器的地址空间为256 个 RAM 单元,但其中能作为数据储备器供用户使用的仅有前面128 个,后 128 个被专用寄存器占用;·程序储备器 内部 ROM :程序储备器用于存放程序和固定不变的常数等;通常采纳只读储备器,且其又多种类型,在 89 系列单片机中全部采纳闪存;AT89S51 内部配置了 4KB 闪存;·定时 /计数器 ROM :定时 /计数器用于实现定时和计数功能;AT89S51 共有 2 个 16 位定时 /计数器;并·行输入输出 I/O 口:8051 共有 4 组 8 位 I/O 口P0、 P1、P2 或 P3,用于对外部数据的传输;每个口都由1 个锁存器和一个驱动器组成;它们主要用于实现与外部设备中数据的并行输入与输出,有些I/O 口仍有其他功能;全·双工串行口:A89S51 内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用;时·钟电路:时钟电路的作用是产生单片机工作所需要的时钟脉冲序列;中·断系统:中断系统的作用主要是对外部或内部的终端恳求进行治理与处理;AT89S51 共有 5 个中断源,其中又 2 个外部中断源和 3 个内部中断源;图 3-2 是 AT89S51 系列单片机的内部结构示意图;欢迎下载精品学习资源图 3-2 AT89S51 系列单片机的内部结构示意图3.2.3 主要引脚功能AT89S51 引脚图如图 3-1 所示:·VCC :电源电压·GND :地·P0 口: P0 口是一组8 位漏极开路型双向I0 口,也即地址数据总线复用口;作为输出口用时,每位能驱动8 个 TTL 规律门电路,对端口写“l可”作为高阻抗输入端用;在拜访外部数据储备器或程序储备器时,这组口线分时转换地址(低8 位)和数据总线复用, 在拜访期间激活内部上拉电阻;·P1 口: Pl 是一个带内部上拉电阻的8 位双向 I O 口, Pl 的输出缓冲级可驱动(吸取或输出电流) 4 个 TTL规律门电路;对端口写“l ,”通过内部的上拉电阻把端口拉到高电 平,此时可作输入口;作输入口使用时,由于内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL ); Flash 编程和程序校验期间,Pl 接收低 8 位地址;表 1 具有其次功能的 P1 口引脚端口引脚其次功能:P1.5MOSI (用于 ISP 编程)P1.6MOSI (用于 ISP 编程)P1.7MOSI (用于 ISP 编程)·P2 口: P2 是一个带有内部上拉电阻的8 位双向 I O 口, P2 的输出缓冲级可驱动(吸取或输出电流) 4 个 TTL 规律门电路;对端口写“1,”通过内部的上拉电阻把端口拉到高电欢迎下载精品学习资源平,此时可作输入口,作输入口使用时,由于内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL );在拜访外部程序储备器或16 位地址的外部数据储备器(例如执行 MOVXDPTR指令)时, P2 口送出高 8 位地址数据;在拜访8 位地址的外部数据储备器(如执行 MOVXRi指令)时, P2 口线上的内容(也即特殊功能寄存器(SFR)区中 P2 寄存器的内容),在整个拜访期间不转变;Flash 编程或校验时, P2 亦接收高位地址和其它掌握信号;·P3 口: P3 口是一组带有内部上拉电阻的8 位双向I 0 口; P3 口输出缓冲级可驱动(吸取或输出电流) 4 个 TTL规律门电路;对P3 口写入 “l时”,它们被内部上拉电阻拉高并可作为输入端口;作输入端时,被外部拉低的P3 口将用上拉电阻输出电流(IIL ); P3 口除了作为一般的I 0 口线外,更重要的用途是它的其次功能,如下表所示:表 2 具有其次功能的 P1 口引脚端口引脚其次功能:P3.0RXD (串行输入口)P3.1 P3.2 P3.3P3.4TXD (串行输出口)/INT0 (外中断 0)/ INT1 (外中断 1)T0 (定时计数器 0 外部输入)P3.5T1 (定时计数器 1 外部输入)P3.6P3.7/ WR (外部数据储备器写选通)/ RD 外部数据储备器读选通)P3 口仍接收一些用于Flash 闪速储备器编程和程序校验的掌握信号;·RST:复位输入;当振荡器工作时,RST 引脚显现两个机器周期以上高电平将使单片机复位; WDT 溢出将使该引脚输出高电平,设置SFR AUXR 的 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 端必需保持低电平(接地);需留意的是:假如加密位LB1被编程,复位时内部会锁存 EA 端状态;如EA 端为高电平(接VCC 端), CPU 就执行内部程序储备器中的指令; F1ash储备器编程时,该引脚加上+12V 的编程电压 Vpp ;·XTAL1 :振荡器反相放大器及内部时钟发生器的输入端;4 智能交通灯方案的实现依据设计任务和要求,可画出该掌握器的原理框图, 为确保十字路口的交通安全,往往都采纳交通灯自动掌握系统来掌握交通信号;其中红灯(R)亮,表示禁止通行;黄灯(Y )亮表示暂停;绿灯(G)亮表示答应通行;4.1 系统总框图如图 4-1:图 4-1 系统总框图4.2 智能交通灯系统的组成交通灯系统由四部分组成:车检测电路,信号灯电路,时间显示电路,紧急转换开关;4.3 智能交通灯系统的工作原理大家都明白,绿灯的放行时间与车辆通过数量不成正比;比如说20 秒内每车道可以通过 20 辆车, 40 秒内每车道却可以通过45 辆车;由于这有一个起步的问题,仍有一个黄灯等待问题;也就是说,绿灯放行时间越长,单位时间通过车辆的数量就越多;我们来运算一下,每车道通行20 秒内可以通过20 辆车,一个红绿灯循环是40 秒单交叉路口 ,加上每次状态转换的黄灯5 秒(一个循环要两次转换),即一个红绿黄灯循环要50 秒,即 50秒内通行的车辆为40 辆;通过一辆车的平均时间是1.25 秒;假如每次车辆通行的时间改为 40 秒, 40 秒内每车道可以通过45 辆,一个红绿灯循环是80 秒单交叉路口 ,加上每次状态转换的黄灯5 秒(一个循环要两次转换),即一个红绿黄灯循环要90 秒,即 90 秒内欢迎下载精品学习资源通行的车辆为 90 辆;通过一辆车的平均时间只需1 秒;明显在车辆拥挤的情形下绿灯的通行时间越长,单位时间内通行的车辆越多,可以有效缓解车辆拥堵问题;当然绿灯时间也不行能无限长,要考虑到让另一路口的等待时间不能过长;人们总是期望在交通灯前等候的时间越短越好;所以笔者设定了绿灯通行时间的上限为40 秒;在非拥挤时段绿灯的通行时间的下限为20 秒,当交叉路口双方车辆较少时通行时间设为20 秒,这样可以大大缩短车辆在红灯面前的等待时间;当交叉路口双方车辆较多时通行时间设为40 秒;4.3.1 车检测电路用来判定各方向车辆状况,比如: 20 秒内可以通过的车辆为20 辆,当 20 秒内南往北方向车辆通过车辆达不到20 辆时,判定该方向为少车,当20 秒内北往南方向车辆通过车辆也达不到 20 辆时,判定该方向也为少车,下一次通行仍为20 秒,当 20 秒时间内南往北或北往南任意一个方向通过的车辆达20 辆时证明该状态车辆较多,下一次该方向绿灯放行时间改为 40 秒,当 40 秒内通过的车辆数达45 辆时车辆判定为拥挤,下一次绿灯放行时间改仍为 40 秒,当 40 秒车辆上通过车辆达不到45 辆时,判定为少车,下次绿灯放行时间改为 20 秒, 依此类推;绿灯下限时间为20 秒,上限值为 40 秒,初始时间为20 秒;这样检测,某次可能不精确,但下次确定能补偿回来,累积运算是很精确的,这就是人们常说的“模糊掌握 ”;由于路上的车不行能突然增多,塞车都有一个累积过程;这样掌握可以把不断增多的车辆一步一步消化,虽然最终由于每个路口的绿灯放行时间延长而使等候的时间变长,但比塞车等候的时间短得多;本系统的特点是成本低,掌握精确;十字路口车辆通行次序如图 4-2 所示:图 4-2 十字路口车辆通行次序由于南往北,北往南时间显示相同,所以只要一个方向多车,下次时间就要加长东往西,西往东也一样,显示时间挑选如表3;表3 显示时间挑选车辆情形本次该方向下次该方向通本次该方向本次该方向通行时间行时间通行时间通行时间南往北少车,北往南少车20 秒20 秒40 秒20 秒欢迎下载精品学习资源南往北少车,北往南多车20 秒40 秒40 秒40 秒南往北多车,北往南少车20 秒40 秒40 秒40 秒南往北多车,北往南多车20 秒40 秒40 秒40 秒东往西少车,西往东少车20 秒20 秒40 秒20 秒东往西少车,西往东多车20 秒40 秒40 秒40 秒东往西多车,西往东少车20 秒40 秒40 秒40 秒东往西多车,西往东多车20 秒40 秒40 秒40 秒4.3.2 信号灯电路信号灯用来显示车辆通行状况,下面以一个十字路口为例,说明一个交通灯的四种状态见图 4-3;每个路口的信号的的转换次序为:绿 >黄 >红绿灯表示答应通行,黄灯表示禁止通行,但已经驶过安全线的车辆可以连续通行,是绿灯过渡到红灯提示灯;红灯表示禁止通行;绿灯的最短时间为20 秒,最长时间为 40 秒,红红最短时间为25 秒,最长时间为 45 秒,黄灯时间为 5 秒;图 4-3 交通信号灯运行状态4.3.3 时间显示电路欢迎下载精品学习资源在交通信号灯的正上方安装一个可以显示绿灯通行时间,红灯等待时间的显示电路,采纳数码管显示电路是一种很好的方法;由于东往西方向和西往东方向显示的时间相同,南往北方向和北往南方向显示的时间也相同,所以只需要考虑四位数码管显示电路,其中东西方向两位,南北方向两位,两位数码管可以时间的时间为 0-99 秒完全可以满意系统的要求,数码管连接方法如图 4-4 所示;图 4-4 数码管连接方法5. 系统软件设计5.1 掌握器的软件设计5.1.1 每秒钟的设定延时方法可以有两种一中是利用MCS-51 内部定时器产生溢出中断来确定1 秒的时间, 另一种是采纳软件延时的方法;计数器硬件延时.a 计数器初值运算定时器工作时必需给计数器送计数器初值,这个值是送到TH 和 TL 中的;他是以加法记数的,并能从全1 到全 0 时自动产生溢出中断恳求;因此,我们可以把计数器记满为零所需的计数值设定为C 和计数初值设定为TC 可得到如下运算通式:TC=M-C欢迎下载精品学习资源式中, M为计数器模值,该值和计数器工作方式有关;在方式0 时 M为 213 ; 在方式 1 时 M的值为 216;在方式 2 和 3 为 28.b 运算公式T= (M TC ) T 计数或 TC M-C T 计数T 计数是单片机时钟周期的12 倍; TC 为定时初值如单片机的主脉冲频率为12MHZ,经过 12 分频方式 0TMAX 213微秒 8.912 毫秒方式 1TMAX 216微秒 65.536 毫秒明显秒钟已经超过了计数器的最大定时间,所以我们只有采纳定时器和软件相结合的方法才能解决这个问题5.1.2 1秒的方法我们采纳在主程序中设定一个初值为20 的软件计数器和使T0 定时 50 毫秒这样每当T0 到 50 毫秒时 CPU 就响应它的溢出中断恳求,进入他的中断服务子程序;在中断服务子程序中, CPU 先使软件计数器减,然后判定它是否为零;为零表示1 秒已到可以返回到输出时间显示程序;相应程序代码()主程序定时器需定时50 毫秒,故 T0 工作于方式 1;初值:TC M-T T 计数50ms/1us=15536=3CBOH ORG 1000HSTART: MOV TMOD, #01H; 令 T0 为定时器方式MOV TH0,#3CH;装入定时器初值MOVTL0,#BOH;MOVIE,#82H;开 0 中断SEBTTRO;启动 0 计数器MOVRO,#14H;软件计数器赋初值LOOP:SJMP$;等待中断()中断服务子程序ORG00BH AJMPBRT0ORG00BHBRT0 : DJNZ R0 , NEXTAJMPTIME; 跳转到时间及信号灯显示子程序欢迎下载精品学习资源DJNZ : MOV R0 , 14H;复原 R0 值MOV TH0,#3CH;重装入定时器初值MOV TL0,#BOH;MOV IE,#82H RET1END5.1.3 软件延时MCS-51 的工作频率为2-12MHZ ,我们选用的 8031 单片机的工作频率为6MHZ ;机器周期与主频有关,机器周期是主频的12 倍,所以一个机器周期的时间为12* ( 1/6M )=2us;我们可以知道详细每条指令的周期数,这样我们就可以通过指令的执行条数来确定1 秒的时间;详细的延时程序分析:DELAY:MOV R4,#08H延时 1 秒子程序DE2:LCALL DELAY1DJNZ R4,DE2 RETDELAY1:MOV R6,#0;延时 125ms 子程序MOV R5,#0 DE1:DJNZ R5,$DJNZ R6,DE1 RETMOV RN ,#DATA;字节数数为 2 ,机器周期数为1所 以 此 指 令 的 执 行 时 间 为 2ms , 而 DELAY1 为 一 个 双 重 循 坏 循 环 次 数 为256*256=65536 所以延时时间 =65536*2=131072us 约为 125us ;DELAY R4 设置的初值为 8 主延时程序循环 8 次,所以 125us*8= 1 秒由于单片机的运行速度很快其他的指令执行时间可以忽视不计;欢迎下载精品学习资源5.2 流程图如图 5-1 所示图 5-1 交通灯的软件设计流程图5.3 程序源代码ORG 0000HA_BIT EQU 20H ;用于存放南北十位数B_BIT EQU 21H ;用于存放南北十位数C_BIT EQU 22H ;用于存放东西十位数D_BIT EQU 23H ;用于存放东西位数TEMP1 EQU 24H;用于存放第一二南北状态要显示的时间TEMP2 EQU 25H;用于存放第一二东西状态要显示的时间TEMP3 EQU 26H;用于存放第三第四南北状态要显示的时间TEMP4 EQU 27H;用于存放第三第四南北状态要显示的时间LJMP MAINORG 0003H;外部中断 0 入口LJMP INT0;跳转到外部 0 中断ORG 0013H;外部中断 1 入口LJMP INT1;跳转到外部 1 中断INT0: MOV A,P1;外部 0 中断PUSH ACCMOV A,P2;中断爱护欢迎下载精品学习资源PUSH ACCMOV P1,#0FFH;清除从前状态MOV P2,#0FFH CLR P1.0CLR P1.4;南北通行,东西禁止通行CLR P1.6 CLR P2.3JNB P3.2 ,$;判定是否仍在中断状态POP ACCMOV P2,A;返回中断前状态POP ACC MOV P1,ACCRETI;中断返回INT1:MOV A,P1;外部 1 中断PUSH ACC;中断爱护MOV A,P2 PUSH ACCMOV P1,#0FFH;清除从前状态MOV P2,#0FFH CLR P1.2CLR P2.1CLR P1.3;东西通行,南北禁止通行CLR P1.5JNB P3.3 ,$;判定是否仍在中断状态POP ACCMOV P2,A;返回中断前状态POP ACC MOV P1,ARETI;中断返回基于单片机的交通灯信号掌握器设计含源程序和电路图设计一个基于单片机的交通灯信号掌握器;已知东、西、南、北四个方向各有红黄绿色三个灯,在东西方向有两个数码管,在南北方向也有两个数码管;要求交通灯依据表1 进行显示和定时切换,并要求在数码管上分别倒计时显示东西、南北方向各状态的剩余时间;表 1 交通灯的状态切换表南北方向东西方向序号状态序号状态1绿灯亮25 秒,红、黄灯灭1红灯亮 30 秒,绿、黄灯灭2黄灯亮5 秒,红、绿灯灭3红灯亮30 秒,绿、黄灯灭2绿灯亮 25 秒,红、黄灯灭欢迎下载精品学习资源黄灯亮 25 秒,红、绿灯灭回到状态 13回到状态 13.2.1 模块 1: 系统设计( 1)任务分析与整体设计思路试卷要求实现的功能主要包括计时功能、动态扫描以及状态的切换等几部分;计时功能:要实现计时功能就需要使用定时器来计时,通过设置定时器的初始值来掌握溢出中断的时间间隔,再利用一个变量记录定时器溢出的次数,达到定时 1 秒中的功能;当计时每到 1 秒钟后,东西、南北信号灯各状态的暂存剩余时间的变量减 1;当暂存剩余时间的变量减到 0 时,切换到下一个状态,同时将下一个状态的初始的倒计时值装载到计时变量中;开头下一个状态,如此循环重复执行;动态扫描:需要使用4 个数码管分别显示东西、南北的倒计时数字,将暂存各状态剩余时间的数字从变量中提取出“十位 ”和“个位 ”,用动态扫描的方式在数码管中显示;整个程序依据定时器的溢出数来计时,每计时1S 就相应状态的剩余时间减1,始终减到 0时触发下一个状态的开头;( 2)单片机型号及所需外围器件型号,单片机硬件电路原理图图 3-5 交通灯硬件电路原理图选用 MCS51 系列 AT89S51 单片机作为微掌握器,挑选两个四联的共阴极数码管组成8 位显示模块,由于 AT89S51 单片机驱动才能有限,采纳两片74HC244 实现总线的驱动,一个 74HC244 完成共阴极数码管位控线的掌握和驱动,另一个74HC244 完成数码管的 7 段码输出,在 7 段码输出口上各串联一个100 欧姆的电阻对 7 段数码管限流;用P3 口的 P3.0-P3.5 完成发光二极管的掌握,实现交通灯信号的显示,每个发光二极管串联500 欧姆电阻起限流作用;硬件电路原理图如图3-5 所示;( 3)程序设计思路,单片机资源安排以及程序流程单片机资源安排单片机 P3 口的 P3.0-P3.1 引脚用作输出,掌握发光二极管的显示;在计时模块中,需要定欢迎下载精品学习资源义两个数组变量( init_sn3 , init_ew3 来储备东西、南北两个方向在不同状态中倒计时的初始值,题目中每个方向的交通灯共有3 种显示状态,因此数组元素个数为3;仍需要定义两个变量 cnt_ sn, cnt_ ew 暂存东西、南北两个方向的倒计时剩余时间;在状态的切换中,为了明确当前处于哪种状态,东西、南北方向各设置一个状态变量sta te_val_sn, state_val_ew, 当倒计时的剩余时间到零时,状态变量增1,表示启动下一个状态,当该变量增到3 时变为 0,回到序号为1 的状态;程序设计思路在设计中,由于没有键盘功能,因此只涉及定时计数和动态扫描功能;主程序将变量初始化之后,设置单片机定时器和中断特殊功能寄存器的初始值,将定时器T1 的工作方式设置为8位自动装载模式,定时器每隔250us 产生一次溢出;在初始化变量与寄存器后,主程序进入一个循环结构,在循环中只做动态扫描的工作,依据东西、南北两向的剩余时时间进行动态扫描显示;计时以及状态的切换通过定时器的中断服务程序来实现,在中断服务程序中,每计时到一秒时,就各方向当前状态的剩余时间减1,始终减到 0 时触发下一个状态的开头,转变交通灯的指示;程序流程欢迎下载精品学习资源( 4)软硬件调试方案软件调试方案:伟福软件中,在“文件 新建文件 ”中,新建 C 语言源程序文件,编写相应的程序;在 “文件 新建工程 ”的菜单中,新建工程并将C 语言源程序文件包括在工程文件中;在 “工程 编译 ”菜单中将 C 源文件编译,检查语法错误及规律错误;在编译胜利后,产生以 “*.hex和”“*.bin 后”缀的目标文件;硬件调试方案:在设计平台中,将单片机的P3.0-P3.5 分别与独立式键盘的相应位通过插线连接起来;在伟福中将程序文件编译成目标文件后,运行“MCU下载程序 ”,挑选相应的flash 数据文件,点击 “编程 ”按钮,将程序文件下载到单片机的Flash 中;然后,上电重新启动单片机,检查所编写的程序是否达到题目的要求,是否全面完整地完成试卷的内容;3.2.2 程序设计(仅供参考的C 语言源程序)/ 晶振: 11.0592M T1-250 微秒溢出一次/* 变量的定义 : show_val_sn,show_val_ew:显示的值 0-59state_val_sn,state_val_ew: 状态值 南北方向 0-绿灯亮; 1-黄灯亮; 2-红灯亮T1_cnt:定时器计数溢出数cnt_sn,cnt_ew:倒计时的数值init_sn3,init_ew3倒计时led_seg_code:数码管 7 段码*/ #include "reg51.h"sbit SN_green=P32 ;/南北方向绿灯sbit SN_yellow=P31;/南北方向黄灯sbit SN_red=P30 ;/ 南北方向红灯sbit EW_green=P35 ;/东西方向绿灯sbit EW_yellow=P34;/东西方向黄灯sbit EW_red=P33 ;/东西方向红灯unsigned char data cnt_sn,cnt_ew;unsigned int data T1_cnt ;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_sn3=24,4,29;char code init_ew3=29,24,4;/-void delayunsigned int i/ 延时 while-i ; /-void led_showunsigned int u,unsigned int v unsigned char i ;i=u%10 ;/ 暂存个位P0=led_seg_codei ;欢迎下载精品学习资源P2=0xbf ;delay100 ; /延时i=u%100/10 ; /暂存十位P0=led_seg_codei ;P2=0x7f ;delay100 ; /延时i=v%10 ;/ 暂存个位P0=led_seg_codei ;P2=0xfe ;delay100 ; /延时i=v%100/10 ; /暂存十位P0=led_seg_codei ;P2=0xfd ;delay100 ; /延时/-void timer1 interrupt 3/T1中断 T1_cnt+ ;ifT1_cnt>3999/ 假如计数 >3999, 计时 1s T1_cnt=0 ;if cnt_sn.=0 / 南北方向计时 cnt_sn- ; else state_val_sn+ ;if state_val_sn>2 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 ;/ 南北方向红灯break;case 1: SN_green=1 ;/南北方向绿灯SN_yellow=0;/南北方向黄灯SN_red=1 ;/南北方向红灯break;case 2:SN_green=1 ;/南北方向绿灯SN_yellow=1;/南北方向黄灯SN_red=0 ;/南北方向红灯break;if cnt_ew.=0 / 东西方向计时 cnt_ew- ; else欢迎下载精品学习资源 state_val_ew+ ;if state_val_ew>2 state_val_ew=0 ;cnt_ew=init_ewstate_val_ew ;switch state_val_ew / 依据状态值,刷新各信号灯的状态 case 0: EW_green=1 ;/东西方向绿灯EW_yellow=1 ;/东西方向黄灯EW_red=0 ;/ 东西方向红灯break;case 1: EW_green=0 ;/东西方向绿灯EW_yellow=1;/东西方向黄灯EW_red=1 ;/ 东西方向红灯break;case 2: EW_green=1 ;/东西方向绿灯EW_yellow=0;/东西方向黄灯EW_red