毕业设计(论文)-基于单片机的多功能交通灯控制系统设计.doc_第1页
毕业设计(论文)-基于单片机的多功能交通灯控制系统设计.doc_第2页
毕业设计(论文)-基于单片机的多功能交通灯控制系统设计.doc_第3页
毕业设计(论文)-基于单片机的多功能交通灯控制系统设计.doc_第4页
毕业设计(论文)-基于单片机的多功能交通灯控制系统设计.doc_第5页
免费预览已结束,剩余47页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0 目录 摘要.2 引言.3 第一章 设计任务与要求.4 1.1 交通灯设计.4 1.2 设计基本要求.4 第二章 总体方案设计.5 2.1 总体设计方案.5 2.2 控制模块方案选择.5 2.3 工作状态显示模块方案选择.6 2.5 电源模块方案选择.7 2.6 系统总体方案论证.7 第三章 硬件电路设计.9 3.1 总体设计.9 3.2 stc89c52rc 单片机简介 .9 3.3 单片机最小系统.13 3.4 显示电路设计.14 3.5 设计原理图.15 第四章 软件设计.17 4.1 程序流程图.17 4.2 具体程序.20 第五章 系统调试.21 5.1 软件调试.21 5.2 硬件调试.22 第六章 设计总结.24 参考文献.26 附录一.27 附录二.47 1 摘要摘要 本系统由单片机系统、键盘、led 显示、交通灯演示系统组成。系统包括 左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒 计时、时间设置、以及根据具体情况手动控制等功能并在此基础上添加了菜单 选择功能,分别为 f1、f2、f3。近年来随着科技的飞速发展,单片机的应用正 在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的 单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识 是不够的,还应根据具体硬件结构软硬件结合,加以完善。交通信号灯控制方 式很多。当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最 有效的手段。信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高 道路通行能力,减少交通事故有明显效果。绿灯是通行信号,面对绿灯的车辆 可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆 都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是 禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号, 面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时 可以进入交叉路口。此外还加了其他功能,f2 为密码修改,f3 为秒表。 关键词:单片机; 交通灯;停车;89c51;交叉路口 2 引言引言 近年来,随着我国国民经济的快速发展,我国机动车辆发展迅速,而城镇 道路建设由于历史等各种原因相对滞后,交通拥挤和堵塞现象时常出现。如何 让利用当今计算机和自动控制技术,有效地疏通交通,提高城镇交通路口的通 行能力,减少交通事故是很值得研究的一个话题。目前,国内的交通灯一般设 在十字路口,在醒目位置用红绿黄三种颜色的指示灯再加上一个倒计时的显示 计时器来控制行车。我国交通法规也对交通指挥信号灯做出规定: 绿灯亮时,准行车辆,行人通行,但转弯的车辆不准妨碍执行的车辆和被 放行的行人通行。 黄灯亮时,不准车辆行人通行,但已越过停止线的车辆和已进入人行横道 的行人,可以继续通行。 红灯亮时,不准车辆,行人通行。 绿色箭头灯亮时,准行车辆按箭头所示方向通行。 黄灯闪烁时,车辆行人在确保安全的原则下可以通行。 信号灯的出现,使交通得到有效管制,对于疏导交通流量、提高道路通行 能力和减少交通事故有明显效果。 3 第一章第一章 设计任务与要求设计任务与要求 1.1 交通灯设计交通灯设计 对于十字路口的交通灯进行模拟设计,并且在此基础上对其功能进行扩展, 如:增加了初始化过程,密码输入,功能选择,菜单返回等。 1.2 设计基本要求设计基本要求 车辆通行繁忙的十字交叉路口,设计一交通灯控制器,设东西方向通行时 间为 40 秒,当剩余 3 秒时黄灯亮,南北方向通行时间为 25 秒,当剩余 3 秒时 黄灯亮。 东西、南北方向各用三个(绿、黄、红)led 表示,并用数码管显示东西、 南北方向的剩余时间。 可利用按键修改时间参数。 对交通灯增加初始化过程,让数码管一段一段点亮,全部点亮后显示为 “ff” ,然后输入密码进入菜单界面。 用按键控制功能,按下 s3,选择 f1 进入交通灯功能;按下 s2 选择 f2 密 码修改功能;按下 s3 进人 f3 秒表功能;并且还可以通过按键 s4 返回菜单界面。 用串口通信发送交通灯剩余时间。 4 显示模块显示模块 第二章第二章 总体方案设计总体方案设计 2.1 总体设计方案总体设计方案 根据十字路口交通灯的要求,可将本系统分为四个模块,第一模块是控制 模块,主要负责整个系统的控制和运算,从而使各模块正常工作;第二模块是 工作状态显示模块,包括 led 灯和数码管;第三模块是输入模块,通过外界的 输入对其功能做出选择或完成相应的功能;第四模块是电源模块,给各模块提 供电源,让各模块工作。其系统设计结构如图 2-1 所示。 电源模块 控制模块 图 2-1 2.2 控制模块方案选择控制模块方案选择 控制模块是整个设计中重要的一部分,能对输入模块进行检测,然后做出 相应的控制,使输出模块显示相应的功能,因此方案有两个。 方案一:由计数器 74ls161 级联组成,配合译码器和秒脉冲信号发生器等 器件组成交通灯系统,整个系统简单,控制简单,调试容易。 方案二:采用单片机 stc89c52 作为控制器。单片机运算能力强,软件编程 灵活,自由度大。在指令系统、硬件结构和片内资源上与标准 8052 单片机完全 兼容,使用时容易掌握;采用 stc89c52 单片机稳定可靠、应用广泛、通用性强, 输入模块 工作状态显示模块 5 在系统/在应用可编程。 方案比较:采用方案一来实现十字路口交通灯控制系统非常方便,电路结 构简单,控制单一,但整个系统性能不是很高,倒计时不是非常精确,且不便 于设置和修改添加功能。因而对于完成题目较困难,而方案二完全能实现设计 要求,容易掌握,利用编程,易控制,i/o 接口很多,易于扩展外围电路,价 格便宜,故选择方案二。 2.3 工作状态显示模块方案选择工作状态显示模块方案选择 该系统要求能显示倒计时时间、交通灯的显示状态、初始化过程、菜单选 择界面等功能。基于上述原因,考虑了三种方案。 方案一:完全采用数码管显示。用数码管的不同状态表示,这种方案只显 示有限的符号和数码字苻。 方案二:完全采用点阵式 led 显示。这种方案实现复杂,且须完成大量的 软件工作;但功能强大,可方便的显示各种英文字符,汉字,图形等。 方案三:用七段 led 数码管完成倒计时显示,用 led 灯作为状态灯指示功 能。 方案比较:方案一和方案二都不符合设计要求,实现较复杂,需要完成较 大量的软件编写,且电路图较复杂。而方案三采用数码管与 led 灯相结合的方 法能同时显示灯的变换和倒计时数字,且编程也比较简单。为方便观看并考虑 到现实情况,用数码管与 led 灯分别显示时间与提示信息。这种方案既满足系 统功能要求,又减少了系统实现的复杂度。权衡利弊,选择方案三。 2.42.4 输入模块方案选择输入模块方案选择 方案一:采用 8155 扩展 i/o 口及键盘显示等。该方案的优点是: 使用灵活可编程,并且有 ram,计数器。若用该方案,可提供较多 i/o 口,但操 作起来稍显复杂。 方案二: 直接在 io 口线上接上按键开关。因为设计时精简和优化了电路, 所以剩余的 i/o 口资源还比较多,便于扩展使用。 由于该系统对于交通灯及数码管的控制,只用单片机本身的 i/o 口就可实 现,且本身的计数器及 ram 已经够用,所以只要直接在其自身的 i/o 口姐按键 6 开关即可。故选择方案二。 2.52.5 电源模块方案选择电源模块方案选择 电源是整个系统的“心脏”,它是系统稳定工作的保障,为使各个模块稳 定工作,须有可靠电源。下面考虑了两种电源方案。 方案一:采用单片机控制模块提供电源。该方案的优点是系统简明扼要, 节约成本;缺点是功率不够。 方案二:采用独立的外接稳压电源(可从单片机开发板接入电源),此方 案的优点是稳定可靠;缺点是不方便。 方案比较:方案一采用单片机自身的 i/o 来驱动数码管显示是不行的,而 方案二虽然不方便,但却能给各模块提供稳定可靠的电压从而达到显示明亮的 程度。故选择第二种方案。 2.6 系统总体方案论证系统总体方案论证 经上述各模块的方案选择与论证,十字路口交通灯控制系统的控制芯片选 用单片机 stc89c52 作为整个系统的核心控制器件,主要负责整个系统工作的控 制和运算,从而使各模块正常工作;采用两个一位七段共阳数码管和六个 led 灯(红、黄、绿各两个)作为显示器件,用七段数码管完成倒计时、初始化、 菜单界面显示,用 led 灯作为状态灯指示功能;用 5 个触发按键构成系统的输 入部分,它可以对系统进行状态设置,结合数码管,可根据交通情况对整个系 统进行直观的控制,且还具有功能选择,密码修改等。以外接电源作为系统电 源部分,可方便对该设计系统供电。系统设计方框总图如图 2-2 所示。 7 数码管显 示 数码管显 示 外接稳压电源 单片机 stc89c52 图 2-2 按键输入 六个 led 灯显示 8 第三章第三章 硬件电路设计硬件电路设计 3.1 总体设计总体设计 本设计以单片机为控制核心,采用模块化设计,共分以下几个功能模块: 单片机控制系统,按键输入模块,led 状态显示、数码管倒计时模块,电源模 块等。 单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数 据处理器。它由单片机振荡电路、复位电路等组成。 按键控制输入交通灯初始时间,功能选择和返回。通过单片机 p3 输入到系 统。 系统采用两个一位共阳数码管倒计时或计数功能,最大显示数字 99。通过 led 灯显示四个方向的通行情况。 3.2 stc89c52rc 单片机简介单片机简介 stc89c52rc 是 stc89 系列单片机中应用较为广泛的一种型号,芯片内部有 8kb 的闪速存储器 flash rom。内部的 8kb 存储器用于存放可编程控制器监控程 序。 stc89c52rc 单片机的 40 条引脚按功能来分,可以分为 3 部分,电源及时 钟引脚、控制引脚和输入/输出引脚。单片机 stc89c52rc 图 3-1 。 9 图 3-1 89c52 单片机引脚功能: 主电源及时钟引脚 此类引脚包括电源引脚 vcc、vss、时钟引脚 xtal1、xtal2 vcc(40 脚):接+5v 电源,为单片机芯片提供电能。 vss(20 脚)接地。 xtal1(18 脚)在单片机内部,它是一个反向放大器的输入端,该放大 器构成了片内的振荡器,可提供单片机的时钟控制信号。 xtal2(19 脚)在单片机内部,接至上述振荡器的反向输出端。 控制引脚 此类引脚包括 reset(即 rsr/vpd)、ale、psen、ea,可以提供控制信号, 有些具有复用功能。 rsr/ vpd(9 脚):复位信号输入端,高电平有效,当振荡器运行时,在此 引脚加上两个机器周期的高电平将使单片机复位(rest)。复位后应使此引脚 电平保持为不高于 0.5v 的低电平,以保证单片机正常工作。 掉电期间,此引脚可接上备用电源(vpd),以保持内部 ram 中的数据不丢 失。当 vcc 下降到低于规定值,而 vpd在其规定的电压范围内(50.5v)时, vpd就向内部 ram 提供备用电源。 10 ale/prog(30 脚):ale 为地址锁存允许信号。当单片机访问外部存储器 时,ale(地址锁存允许)输出脉冲的下降沿用于锁存 16 位地址的低 8 位。即 使不访问外部存储器,ale 端仍有周期性正脉冲输出,其频率为振荡器频率的 1/6。但是每当访问外部数据存储器时,在两个机器周期中 ale 只出现一次,即 丢失一个 ale 脉冲。ale 端可以驱动 8 个 lsttl 负载。 psen(29 脚):程序存储器允许输出控制端。此输出为单片内访问外部程 序存储器的读选通信号。在从外部程序存储器取指令(或取常数)期间,每个 机器周期均 psen 两次有效。但在此期间,每当访问外部数据存储器时,这两次 有效的 psen 信号将不会出现。psen 同样可以驱动 8 个 lsttl 负载。 ea(31 脚):ea 功能为内外程序存储器选择控制端。当 ea 端保持高电平 时,单片机访问内部程序存储器,但在 pc(程序计数器)值超过 0fffh 时将自 动转向执行外部程序存储器内的程序。 输入/输出引脚 此类引脚包括 p0 口、p1 口、p2 口和 p3 口。 p0(p0.0p0.7)是一个 8 位三态双向 i/o 口,在不访积压处部存储器时, 做通用 i/o 口使用,用于传送 cpu 的输入/输出数据,当访问外部存储器时,此 口为地址总路线低 8 位及数据总路线分时复用口,可带 8 个 lsttl 负载。 p1(p1.0p2.7)是一个 8 位准双向 i/o 口(作为输入时,口锁存器置 1), 带有内部上拉电阻,可带 4 个 lsttl 负载。 p2(p2.0p2.7)是一个 8 位准双向 i/o 口,与地址总路线高 8 位复用,可 驱动 4 个 lsttl 负载。 p3(p3.0p3.7)是一个 8 位准双向 i/o 口,除此之外每位还具有第二功能。 p3 口功能表 3-1: 11 p3 口各个位的第二功能 p3 口的位第二功能说明 p3.0rxd 串行数据接收口 p3.1txd 串行数据发射口 p3.2int0 外部中断 0 输入 p3.3int1 外部中断 1 输入 p3.4t0 计数器 0 计数输入 p3.5t1 计数器 1 计数输入 p3.6wr 外部 ram 写信号 p3.7rd 外部 ram 读信号 表 3-1 89c52 单片机内部结构图 3-2 : xtal2 xtal1 vcc vss rst ea ale psen p0 p1 p2 p3 时钟电路 rom/eprom/fl ash4k ram128bsfr21 个 定时/计数 器 cpu 总线控制中断系统 5 个中 断源 2 个优先级 串行口全双工 1 个 并行口 4 个 12 图 3-2 3.3 单片机最小系单片机最小系统统 时钟电路如图 3-3 xtal1 是片内振荡器的反相放大器输入端,xtal2 则是输出端,使用外部振 荡器时,外部振荡信号应直接加到 xtal1,而 xtal2 悬空。内部方式时,时钟 发生器对振荡脉冲二分频,如晶振为 12mhz,时钟频率就为 6mhz。晶振的频率 可以在 1mhz-24mhz 内选择。电容取 30pf 左右。系统的时钟电路设计是采用的 内部方式,即利用芯片内部的振荡电路。at89 单片机内部有一个用于构成振荡 器的高增益反相放大器。引脚 xtal1 和 xtal2 分别是此放大器的输入端和输出 端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。 外接晶体谐振器以及电容 c1 和 c2 构成并联谐振电路,接在放大器的反馈回路 中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的 高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的 晶体振荡器的值为 12mhz,电容应尽可能的选择陶瓷电容,电容值约为 22f。 在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以 减少寄生电容,更好地保证震荡器稳定和可靠地工作。 复位电路 在振荡器运行时,有两个机器周期(24 个振荡周期)以上的高电平出现在 此引腿时,将使单片机复位,只要这个脚保持高电平,51 芯片便循环复位。复 位后 p0p3 口均置 1 引脚表现为高电平,程序计数器和特殊功能寄存器 sfr 全 13 部清零。当复位脚由高电平变为低电平时,芯片为 rom 的 00h 处开始运行程序。 复位是由外部的复位电路来实现的。片内复位电路是复位引脚 rst 通过一个斯 密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机 器周期的 s5p2,由复位电路采样一次。复位电路通常采用上电自动复位和按钮 复位两种方式,此电路系统采用的是上电与按钮复位电路。当时钟频率选用 6mhz 时,c 取22f, rs 约为 200,r3 约为1k。复 位操作不会对内部ram 有所 影响。具体如图3-4 所示 : 3.4 显示电路设计显示电路设计 显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料 及产品工艺,单片机应用系统中常用的显示器有: 发光二极管、led 显示器、 液晶 lcd 显示器、crt 显示器等。数码管显示器是现在最常用的显示器之一, 如图 3-5 所示。 14 图 3-5 发光二极管(led)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单 独使用,也可以组装成分段式或点阵式 led 显示器件(半导体显示器)。分段 式显示器(led 数码管)由 7 条线段围成 8 字型,每一段包含一个发光二极管。 外加正向电压时二极管导通,发出清晰的光。只要按规律控制各发光段亮、灭, 就可以显示各种字形或符号。led 数码管有共阳、共阴之分。本次设计我采用 一位共阳数码管作为显示模块。 此外,还采用 led 作为显示模块。各模块设计如图 2-2 所示。 3.5 设计原理图设计原理图 综合以上设计思路,具体设计电路路为如图 3-6 所示: 15 图 3-6 具体 pcb 图和原件清单见附录二图 1 和表 8。 16 第四章第四章 软件设计软件设计 4.1 程序流程图程序流程图 流程程序图是程序分析中最基本、最重要的分析技术,它是进行流程程序 分析过程中最基本的工具。具体设计为如图 4-1、图 4-2 所示: 17 开 始 显示缓冲区初始化 必要参数初始化 t0 初始化,th0,tl0 装入初值 系统初始化检测数码管 好坏 t0 关中断 输入密码正确? 进入主菜单显示 ff key1 按下 key2=0? key3 按下 密码修改,key2, key3 分别为控制十 位和个位密码 key1 按下确认 密码,key4 按 下返回主菜单 交通灯,key2,key3 控制时间 加减按 1 下 key1 调节东西方向 时间再按下 key1 调节南北方向 时间,再按 key1 反回工作 key4 按下 返回主菜单 秒表,key1 按下开始计时, key2 按下暂停,key3 按 下暂停重新开始时清零。 key4 按下 返回主菜单 是 是 是 否 否 否 正确 不正确 图 4-1 19 中断入口 aa 的值清零 num送入数码 管显示如果 aa 的值为 0 则重新赋 40 对 tttho,tl0 重装初 值定时 500ms aa 清零 num+送入数码管显示如 果 num 的值为 99 则 num 的值清零 f4 的值等于 1 还是 f3 的值等于 1? aa 的值是否等 于 2 aa 的值是否等 于 20 中断返回 f3=1 f4=1 是是 否 20 4.2 具体程序具体程序 根据流程图可设计程序,具体见附录一。 21 第五章第五章 系统调试系统调试 5.1 软件调试软件调试 静态调试 静态调试是指对程序进行人工书面检查。静态调试时要仔细阅读程序及其 文档,经过结构分析、功能分析、逻辑分析、接口分析、语法分析以及逐行检 查。 动态调试 动态调试是指实际上机运行程序进行调试。源程序上机运行,语言系统及 操作系统会在程序有故障时给出信息,此时应进行修改,直到编译成功为止。 仿真调试 根据要求,仿真结果应该包括: 1、上电后数码管初始化,一段一段点亮数码管,然后出现“ff” ,此时输入 密码,重新初始化然后进入菜单界面; 2、按下 s1 按键进入 f1 交通灯,情况一,南北方向绿灯亮 40 秒,此时东西 方向的红灯亮 40 秒(南北方向通车) 。情况二,南北方向黄灯亮 5 秒,此时东 西方向继续亮红灯(南北方向通车,黄色警告) 。情况三,南北方向亮红灯,东 西方向亮绿灯(东西方向通车) 。情况四,南北方向亮红灯,东西方向亮黄灯 5(东西方向通车) ,然后继续重复此过程; 3、按下 s2 进入 f2 密码修改输入输入新密码然后按确认键即可; 4、按下 s3 进入 f3 秒表功能; 5、并且在交通灯时打开串口发送剩余时间; 下图 5-1 是其中密码修改的仿真结果,由图可知此电路图是可行的。 22 图 5-1 5.2 硬件调试硬件调试 系统的硬件调试一般分下面三个步骤: 第一步:目测,检查外部的各种元件或者电路是否有断点。 第二步:用万用表检测,先用万用表复核目测中有疑问的连接点,在检测 各种电源线与地线之间是否有短路现象。 第三步:加电检测,给板加电,检测所有插座或者器件的电源是否符合要 求的值。 初始化及密码调试 给硬件电路接上电源,这时数码管开始初始化,一段一段点亮数码管,然 后显示“ff”再通过按键 s1、s2 输入密码重新初始化,进入菜单界面。 交通灯电路的调试 用按键 s1 选择 f1 功能,按确认键即可。此外打开串口可以看到发送剩余 时间。 需要说明的是,由于整个设计是用发光二极管来代替交通灯,需要低电平 “0”来驱动点亮,在实际应用中,应使 p1 口输出高电平“1”来驱动继电器导 通,从而使 220v 的交通灯点亮。这是试验与实际应用比较容易混淆的地方,应 23 该引起注意。同时,在进行交通灯调试应注意 led1-led6 这 6 个发光二极管不 能焊反。 密码修改调试 用按键 s4 返回菜单界面后按 s2 选择 f2 功能,可以输入新密码,再按确认 键即可。 秒表调试 跟其他功能一样在菜单界面按 s3 选择 f3 然后按确认键开始计时。 具体调试图见附录二 24 第六章第六章 设计总结设计总结 课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻 炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科 学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握单片机的 开发技术是十分重要的。回顾起此次单片机课程设计,我仍感慨颇多,虽然此 次设计知识在以前的基础上添加功能,知识对软件做出调试和修改,但是在这 一个月的日子里,可以说是苦多于甜,尽管如此,还是学到很多的东西,不仅 巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,对 编程也有了一定的提高。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知 识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结 论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在设计的过程中可以说是困难重重,同时在设计的过程中也发现了自己的 不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说在 画 pcb 图时对单片机最小系统不够了解导致我画的图中出现了晶振与单片机的 连接不够合理、这样就可能因为干扰而无法起振;在制版时由于转印过程中没 调好比例造成与元器件不能吻合,所以只能重新转印;在焊接时有些元器件没 有按照要求摆放,不够合理;对用 c 语言编程也掌握不好等等。 特别是程序的编写,由于我对这个不熟,所以此次过程吃了很多亏,碰到 很多问题,不过最后都在同学的帮助下解决了。 虽然遇到很多问题,不过还是顺利完成了这次设计,通过这次设计,我对 单片机有了进一步的理解,这将对我以后运用单片机有很大的帮助。同时,也 要感谢老师和同学们对我的指点和帮助。 25 另外,由于此次是第一次接触单片机的设计,所以很多考虑的不够好,如 对于电路图的布局,不合理,以后应该避免,还有就是在画图时为了简单,没 有把下载接口设计进去,导致每次调试时都不能直接下载,造成很大麻烦。还 有就是应该进一步学习软件的有关知识。 26 参考文献参考文献 1 李海滨,片春媛,许瑞雪.单片机技术课程设计与项目实例m.北京: 中 国电力出版社,2009 2 王静霞.单片机应用技术m.北京:电子工业出版社.2009 3 雄建云.protel99 se eda 技术及应用m.北京:机械工业出版社,2007 4 曹天汉.单片机原理与接口技术m.电子工业出版社,2009 5 何立民.单片机高等教程m.北京:航空航天大学出版社,2000 6 何立民.单片机应用系统设计系统配置与接口技术m.北京:航空航天大学 出版社,2001 27 附录一附录一 #include/声明头文件 #include #define rdcommand 0x01/定义 isp 的操作命令 #define prgcommand 0x02 #define erasecommand 0x03 #define error 1 #define ok 0 #define waittime 0x01 /定义 cpu 的等待时间 #define uint unsigned int #define uchar unsigned char sfr isp_data=0xe2; /寄存器申明 sfr isp_addrh=0xe3; sfr isp_addrl=0xe4; sfr isp_cmd=0xe5; sfr isp_trig=0xe6; sfr isp_contr=0xe7; sbit red1=p20;/定义六个灯分别为 p1.07 sbit yellow1=p21; sbit green1=p22; sbit red2=p23; sbit yellow2=p24; sbit green2=p25; sbit key1=p30;/模式选择键 sbit key2=p31;/数值+ 28 sbit key3=p32;/数值- sbit key4=p33; uchar aa,qian,bai,shi,ge,bb,shu1,shu2,shu3,shu4,cc,dd,shu5,shu6; uint num,key1num,num1=5,num2=5,numt1=6,numt2=6,f1=0,f2=0; /定义数组 09 uchar code table= 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x8e; uchar shuzu=“密码: “; uchar digit=“0123456789“; /延时函数 z 毫秒 void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); /初始化函数 /* = 打开 isp,iap 功能 = */ void isp_iap_enable(void) ea =0;/* 关中断 */ isp_contr =isp_contr /* 0001,1000*/ isp_contr =isp_contr | waittime;/* 写入硬件延时*/ isp_contr =isp_contr | 0x80; /* ispen=1*/ /* = 关闭 isp,iap 功能 = */ void isp_iap_disable(void) isp_contr =isp_contr /* ispen = 0 */ isp_trig=0x00; 29 ea= 1;/* 开中断 */ /* = 公用的触发代码 = */ void ispgoon(void) isp_iap_enable();/* 打开 isp,iap 功能 */ isp_trig=0x46;/* 触发 isp_iap 命令字节 1*/ isp_trig=0xb9;/* 触发 isp_iap 命令字节 2*/ _nop_(); /* = 字节读 = */ unsigned char byte_read(unsigned int byte_addr) isp_addrh = (unsigned char)(byte_addr 8);/* 地址赋值 */ isp_addrl = (unsigned char)(byte_addr isp_cmd = isp_cmd/* 清除低 3 位 */ isp_cmd = isp_cmd| rdcommand;/* 写入读命令 */ ispgoon();/* 触发执行*/ isp_iap_disable();/* 关闭 isp,iap 功能*/ return (isp_data);/* 返回读到的数据 */ /* = 扇区擦除 = */ void sectorerase(unsigned int sector_addr) unsigned int isectoraddr; isectoraddr = (sector_addr /* 取扇区地址 */ isp_addrh = (unsigned char)(isectoraddr 8); isp_addrl = 0x00; isp_cmd= isp_cmd /* 清空低 3 位 */ isp_cmd= isp_cmd | erasecommand;/* 擦除命令 3 */ ispgoon();/* 触发执行*/ isp_iap_disable();/* 关闭 isp,iap 功能*/ 30 /* = 字节写 = */ void byte_write(unsigned int byte_addr, unsigned char original_data) isp_addrh =(unsigned char)(byte_addr 8); /* 取地址 */ isp_addrl =(unsigned char)(byte_addr isp_cmd = isp_cmd /* 清低 3 位*/ isp_cmd = isp_cmd | prgcommand;/* 写命令 2*/ isp_data = original_data;/* 写入数据准备*/ ispgoon();/* 触发执行*/ isp_iap_disable();/* 关闭 iap 功能*/ void init() tmod=0x21;/设置定时器 t0 为工作方式 1 th0=(65536-50000)/256;/赋初值 tl0=(65536-50000)%256; ea=1;/开总中断 et0=1; / tr0=1;/开定时器 num=40;/数码管初始显示 40 qian=num/10; bai=num%10; red1=0;/起始状态为南北绿灯,东西红灯 yellow1=0; green2=0; yellow2=0; bb=1; key1num=0; shu1=40;/南北通行时间初始为 40s,东西通行时间 初始为 25s shu2=25; scon = 0x40;/ 设定串行口工作方式 1,不允许接收 pcon =0x80;/ 波特率不倍增 31 / tmod = 0x20;/ 定时器 1 工作于 8 位自动重载模式, 用于产生 波特率 th1 = 0xfd;/ 11.0592mhz 波特率 9600 tl1 = 0xfd; tr1 = 1; void xsq() tr0=0; p0=0xfe; p1=0xfe; delay(1000); p0=0xfc; p1=0xfc; delay(1000); p0=0xf8; p1=0xf8; delay(1000); p0=0xf0; p1=0xf0; delay(1000); p0=0xe0; p1=0xe0; delay(1000); p0=0xc0; p1=0xc0; delay(1000); p0=0x80; p1=0x80; delay(1000); p0=0x00; p1=0x00; delay(1000); 32 / tr0=1; /数码管显示函数 void display(uchar qian,uchar bai) p0=tablebai; delay(1); p1=tableqian; delay(1); /键盘扫描函数 void keyscan() if(key1=0) delay(10);/消抖 if(key1=0) key1num+; if(key1num=4)/再次按下 key1 进入调式模式 key1num=1; while(!key1); if(key1num=2)/按下第二次进入设置南北通行时间模式 tr0=0; num=40; qian=num/10; bai=num%10; 33 display(qian,bai); green1=1; yellow1=0; red1=0; green2=0; yellow2=0; red2=1; if(key1num=1) /按下第一次进入设置东西通行时间模式 tr0=0; num=25; qian=num/10; bai=num%10; display(qian,bai); green1=0; yellow1=0; red1=1; green2=1; yellow2=0; red2=0; if(key1num=1) /当 key1 键被按下一次时进入东 西方向时间的设置 if(key2=0)/ 按下 key2 执数东西方向的时间加 delay(10); if(key2=0) 34 num+; qian=num/10; bai=num%10; display(qian,bai); shu2=num; /将设置后的时间赋给 shu1 if(shu2=26)/归 0 shu2=0; num=shu2; qian=num/10; bai=num%10; display(qian,bai); while(!key2); if(key3=0) /按 key3 执行东西方向数值减 delay(10); if(key3=0) num-; qian=num/10; bai=num%10; display(qian,bai); shu2=num; /将设置后的值赋给 shu2 if(shu2=0) shu2=25; num=shu2; qian=num/10; 35 bai=num%10; display(qian,bai); while(!key3); if(key1num=2) /当 key1 键被按下二次执行南北 方向时间设置 if(key2=0) delay(10); if(key2=0)/按下 key2 键调整南北通行时间加 num+; qian=num/10; bai=num%10; display(qian,bai); shu1=num; /将设置后的时间赋给 shu1 if(shu1=41) shu1=0; num=shu1; qian=num/10; bai=num%10; display(qian,bai); while(!key2); 36 if(key3=0) delay(10); if(key3=0) /按下 key3 键设置数值减 num-; qian=num/10; bai=num%10; display(qian,bai); shu1=num; /将设置后的值赋给 shu2 if(shu1=0) shu1=40; num=shu1; qian=num/10; bai=num%10; display(qian,bai); while(!key3); if(key1num=3)/重启定时器 tr0=1; void smm() 37 if(key3=0) /按 key3 执行东西方向数值减 delay(10); if(key3=0) num1-; qian=num2; bai=num1; display(qian,bai); shu3=num1; /将设置后的值赋给 shu2 if(shu3=-1) shu3=9; num1=shu3; qian=num2; bai=num1; display(qian,bai); while(!key3); if(key2=0) /按 key3 执行 东西方向数值减 delay(10); if(key2=0) num2-; qian=num2; bai=num1; display(qian,bai); shu4=num2; /将设置后的值赋给 shu2 38 if(shu4=-1) shu4=9; num2=shu4; qian=num2; bai=num1; display(qian,bai); while(!key2); / *串口通信 */ /* 发送一个字节 */ /发送一个字节 void sendbyte(uchar dat) sbuf = dat; while(!ti); ti = 0; /* 发送一个字符串 */ /发送一个字符串 /例如:sendstr(“我乐意“) void sendstr(uchar *s) 39 while(*s!=0) sendbyte(*s); s+; void tmm() if(key3=0) /按 key3 执行东西方向数值减 delay(10); if(key3=0) numt1-; qian=numt2; bai=numt1; display(qian,bai); shu5=numt1; /将设置后的值赋给 shu2 if(shu5=-1) shu5=9; numt1=shu5; qian=numt2; bai=numt1; display(qian,bai); shuzu6=digitnumt1; sendstr(shuzu); while(!key3); 40 if(key2=0) /按 key3 执行 东西方向数值减 delay(10); if(key2=0) numt2-; qian=numt2; bai=numt1; display(qian,bai); shu6=numt2; /将设置后的值赋给 shu2 if(shu6=-1) shu6=9; numt2=shu6; qian=numt2; bai=numt1; display(qian,bai); while(!key2); if(key1=0) delay(10); if(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论