1、0萍乡学院课程设计2016 年 03 月 20 日课 程 单片机课程设计 题 目 交通灯系统 院 系 机电系 专业班级 学生姓名 学生学号 指导教师 1目录摘要 3引言 31.设计目的 42.设计要求 43.系统总体方案硬件设计 43.1 设计思想及总体设计 .43.2 硬件设计 .53.3 复 位 电 路 93.4 数码管显示 .93.5 红绿灯显示 103.6 键盘:独立键盘+中断 .103.7 系统原理图 114 软件设计 .114.1 总体流程 114.2 循环流程控制思路 124.3 源程序 125 调试运行 .175.1 正常运行状态 175.2 左右行显示 185.3 黄灯闪烁显
2、示 186.设计心得体会 .197 参考文献 .192摘要交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用单片机 AT89C51 为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展强。本设计就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间。本设计系统由单片机,交通灯状态显示系统、LED 数码显示系统等几大部分组成。系统除基本的交通灯功能外,还具有倒计时、紧急情况处理等功能,较好的模拟实现了十字路口可能出现的状况。本系统采用单片
3、机 C 语言编写,主要编写了主程序,LED 数码管显示程序等。总体上完成了软件的编写。关键词:交通灯;控制;AT89C51;倒计时显示引言近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果交通信号灯在大多数城市得到了广泛的应用。传统的交通信号灯控制一般采用了电子线路和继电器控制,结构复杂,可
4、靠性低,故障率高。本次设计是基于 AT89C51 单片机的交通灯控制系统,东西南北的通行时间可调,倒计时显示通行时间灯功能,该系统具有设计周期短、可靠性高维护方便、使用简单等优点。31.设计目的1.1 巩固和加深对单片机原理和接口技术知识的理解;1.2 培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3 学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4 掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5 能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计 算机绘制电路图和流程图。 2.设计要求1)东西干道和南北干道的通行分左
5、行,右行,直行,其中左行,右行固定 15秒;直行固定 30 秒。2)信号灯分绿灯,红灯,黄灯,每次绿灯换红灯时,黄灯亮 3 秒。3)东西干道和南北干道交替控制,每次干道绿灯交替时,有 3 秒钟所有干道的交通灯都是黄灯闪烁 3 秒钟,提示已经进入路口的车辆迅速通过。4)当遇到突发状况时,各个方向静止通行,显示红灯,并维持 5 秒倒计时。3.系统总体方案硬件设计3.1 设计思想及总体设计1)分析目前交通路口的基本控制技术以及各种通行方案,并以此为基础提出自己的交通控制的初步方案。2)确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,在这里,本设计除了有信号灯
6、状态控制能实现基本的交通功能,还增加了倒计时显示提示。3)进行显示电路,灯状态电路,按键电路的设计和各器件的选择及连接,大体分配各个器件及模块的基本功能要求。4)进行软件系统的设计,对于本系统,本人采用 C 语言编写,对单片机内部结构和工作情况做了充足的研究,了解定时器,中断以及延时原理,总体上完成了软件的设计。4图 1 系统框图 3.2 硬件设计1)单片机选型:AT89C51与 MCS-51 单片机产品兼容,8k 字节在系统可编程 Flash 存储器,1000 次可檫写周期,全静态操作:0Hz33Hz,三级加密程序存储器,32 个可编程 I/O 口线,三个 16 位定时器/计数器八个中断源、
7、全双工 UART 串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。功 能 特 性 描 述 :AT89C51 是 一 种 低 功 耗 、 高 性 能 CMOS8 位 微 控 制 器 , 具 有 8K 在 系 统 可 编 程Flash 存 储 器 。 使 用 Atmel 公 司 高 密 度 非 易 失 性 存 储 器 技 术 制 造 , 与 工 业 80C51 产 品 指 令 和 引 脚 完 全 兼 容 。 片 上 Flash 允 许 程 序 存 储 器 在 系 统 可 编 程 , 亦 适 于 常规 编 程 器 。 在 单 芯 片 上 , 拥 有 灵 巧 的
8、 8 位 CPU 和 在 系 统 可 编 程 Flash, 使 得AT89C51 为 众 多 嵌 入 式 控 制 应 用 系 统 提 供 高 灵 活 、 超 有 效 的 解 决 方 案 。 AT89C51 具有 以 下 标 准 功 能 : 8k 字 节 Flash, 256 字 节 RAM, 32 位 I/O 口 线 , 看 门 狗 定 时 器 ,2 个 数 据 指 针 , 三 个 16 位 定 时 器 /计 数 器 , 一 个 6 向 量 2 级 中 断 结 构 , 全 双 工 串 行口 , 片 内 晶 振 及 时 钟 电 路 。 另 外 , AT89C51 可 降 至 0Hz 静 态 逻
9、辑 操 作 , 支 持 2 种软 件 可 选 择 节 电 模 式 。 空 闲 模 式 下 , CPU 停 止 工 作 , 允 许 RAM、 定 时 器 /计 数 器 、 串口 、 中 断 继 续 工 作 。 掉 电 保 护 方 式 下 , RAM 内 容 被 保 存 , 振 荡 器 被 冻 结 , 单 片 机 一切 工 作 停 止 , 直 到 下 一 个 中 断 或 硬 件 复 位 为 止 。 8 位 微 控 制 器 8K 字 节 在 系 统 可 编程 Flash AT89C52 P0 口 : P0 口 是 一 个 8 位 漏 极 开 路 的 双 向 I/O 口 。 作 为 输 出 口 , 每
10、 位 能 驱 动 8个 TTL 逻 辑 电 平 。 对 P0 端 口 写 “1”时 , 引 脚 用 作 高 阻 抗 输 入 。 当 访 问 外 部 程 序 和 数 据 存 储 器 时 , P0 口 也 被 作 为 低 8 位 地 址 /数 据 复 用 。 在 这 种单片机中断键盘 复位电路晶振电路LED 数码管显示LED 指示灯5模 式 下 , P0 具 有 内 部 上 拉 电 阻 。 在 flash 编 程 时 , P0 口 也 用 来 接 收 指 令 字 节 ; 在 程 序 校 验 时 , 输 出 指 令 字 节 。 程序 校 验 时 , 需 要 外 部 上 拉 电 阻 。 P1 口 :
11、P1 口 是 一 个 具 有 内 部 上 拉 电 阻 的 8 位 双 向 I/O 口 , p1 输 出 缓 冲 器 能驱 动 4 个 TTL 逻 辑 电 平 。 对 P1 端 口 写 “1”时 , 内 部 上 拉 电 阻 把 端 口 拉 高 , 此 时 可 以 作 为输 入 口 使 用 。 作 为 输 入 使 用 时 , 被 外 部 拉 低 的 引 脚 由 于 内 部 电 阻 的 原 因 , 将 输 出 电 流( IIL) 。 此 外 , P1.0 和 P1.2 分 别 作 定 时 器 /计 数 器 2 的 外 部 计 数 输 入 ( P1.0/T2) 和 时 器/计 数 器 2 的 触 发
12、输 入 ( P1.1/T2EX) , 具 体 如 下 表 所 示 。 在 flash 编 程 和 校 验 时 , P1 口 接 收 低 8 位 地 址 字 节 。 引 脚 号 第 二 功 能 P1.0 T2( 定 时 器 /计 数 器 T2 的 外 部 计 数 输 入 ) , 时 钟 输 出 P1.1 T2EX( 定 时 器 /计 数 器 T2 的 捕 捉 /重 载 触 发 信 号 和 方 向 控 制 ) P1.5 MOSI( 在 系 统 编 程 用 ) P1.6 MISO( 在 系 统 编 程 用 ) P1.7 SCK( 在 系 统 编 程 用 ) P2 口 : P2 口 是 一 个 具 有
13、 内 部 上 拉 电 阻 的 8 位 双 向 I/O 口 , P2 输 出 缓 冲 器 能驱 动 4 个 TTL 逻 辑 电 平 。 对 P2 端 口 写 “1”时 , 内 部 上 拉 电 阻 把 端 口 拉 高 , 此 时 可 以 作 为输 入 口 使 用 。 作 为 输 入 使 用 时 , 被 外 部 拉 低 的 引 脚 由 于 内 部 电 阻 的 原 因 , 将 输 出 电 流( IIL) 。 在 访 问 外 部 程 序 存 储 器 或 用 16 位 地 址 读 取 外 部 数 据 存 储 器 ( 例 如 执 行 MOVX DPTR) 时 , P2 口 送 出 高 八 位 地 址 。 在
14、 这 种 应 用 中 , P2 口 使 用 很 强 的 内 部 上 拉 发 送 1。 在 使用 8 位 地 址 ( 如 MOVX RI) 访 问 外 部 数 据 存 储 器 时 , P2 口 输 出 P2 锁 存 器 的 内 容 。 在 flash 编 程 和 校 验 时 , P2 口 也 接 收 高 8 位 地 址 字 节 和 一 些 控 制 信 号 。 P3 口 : P3 口 是 一 个 具 有 内 部 上 拉 电 阻 的 8 位 双 向 I/O 口 , p2 输 出 缓 冲 器 能驱 动 4 个 TTL 逻 辑 电 平 。 对 P3 端 口 写 “1”时 , 内 部 上 拉 电 阻 把
15、端 口 拉 高 , 此 时 可以 作 为 输 入 口 使 用 。 作 为 输 入 使 用 时 , 被 外 部 拉 低 的 引 脚 由 于 内 部 电 阻 的 原 因 , 将 输6出 电 流 ( IIL) 。 P3 口 亦 作 为 AT89C51 特 殊 功 能 ( 第 二 功 能 ) 使 用 , 如 下 表 所 示 。 在 flash 编 程 和 校 验 时 , P3 口 也 接 收 一 些 控 制 信 号 。 端 口 引 脚 第 二 功 能P3.0 RXD(串 行 输 入 口 )P3.1 TXD(串 行 输 出 口 )P3.2 INTO(外 中 断 0)P3.3 INT1(外 中 断 1)P
16、3.4 TO(定 时 /计 数 器 0)P3.5 T1(定 时 /计 数 器 1)P3.6 WR(外 部 数 据 存 储 器 写 选 通 )P3.7 RD(外 部 数 据 存 储 器 读 选 通 )此 外 , P3 口 还 接 收 一 些 用 于 FLASH 闪 存 编 程 和 程 序 校 验 的 控 制 信 号 。RST复 位 输 入 。 当 振 荡 器 工 作 时 , RST 引 脚 出 现 两 个 机 器 周 期 以 上 高 电 平 将 是单 片 机 复 位 。ALE/PROG当 访 问 外 部 程 序 存 储 器 或 数 据 存 储 器 时 , ALE( 地 址 锁 存 允 许 ) 输
17、 出脉 冲 用 于 锁 存 地 址 的 低 8 位 字 节 。 一 般 情 况 下 , ALE 仍 以 时 钟 振 荡 频 率 的 1/6 输 出 固定 的 脉 冲 信 号 , 因 此 它 可 对 外 输 出 时 钟 或 用 于 定 时 目 的 。 要 注 意 的 是 : 每 当 访 问 外 部 数据 存 储 器 时 将 跳 过 一 个 ALE 脉 冲 。对 FLASH 存 储 器 编 程 期 间 , 该 引 脚 还 用 于 输 入 编 程 脉 冲 ( PROG) 。如 有 必 要 , 可 通 过 对 特 殊 功 能 寄 存 器 ( SFR) 区 中 的 8EH 单 元 的 D0 位 置 位
18、, 可 禁止 ALE 操 作 。 该 位 置 位 后 , 只 有 一 条 MOVX 和 MOVC 指 令 才 能 将 ALE 激 活 。 此 外 , 该 引脚 会 被 微 弱 拉 高 , 单 片 机 执 行 外 部 程 序 时 , 应 设 置 ALE 禁 止 位 无 效 。PSEN程 序 储 存 允 许 ( PSEN) 输 出 是 外 部 程 序 存 储 器 的 读 选 通 信 号 , 当AT89C52 由 外 部 程 序 存 储 器 取 指 令 ( 或 数 据 ) 时 , 每 个 机 器 周 期 两 次 PSEN 有 效 , 即输 出 两 个 脉 冲 , 在 此 期 间 , 当 访 问 外
19、部 数 据 存 储 器 , 将 跳 过 两 次 PSEN 信 号 。EA/VPP外 部 访 问 允 许 , 欲 使 CPU 仅 访 问 外 部 程 序 存 储 器 ( 地 址 为 0000H-FFFFH) , EA 端 必 须 保 持 低 电 平 ( 接 地 ) 。 需 注 意 的 是 : 如 果 加 密 位 LB1 被 编 程 , 复位 时 内 部 会 锁 存 EA 端 状 态 如 EA 端 为 高 电 平 ( 接 Vcc 端 ) , CPU 则 执 行 内 部 程 序 存 储器 的 指 令 。7FLASH 存 储 器 编 程 时 , 该 引 脚 加 上 +12V 的 编 程 允 许 电 源
20、 Vpp, 当 然 这 必 须 是 该 器件 是 使 用 12V 编 程 电 压 Vpp。引 脚 图 如 下 :图 2 89C51 引 脚 图83.3 复 位 电 路图 3 复 位 电 路当 8051 的 ALE 及/PSEN 两引脚输出高电平,RST 引脚高电平到时,单片机复位。RST/VPD 端的高电平,若直接由启动瞬间产生,则为启动复位,若通过按动按钮产生高电平复位称手动复位。图中,上电时,接通电源,电容器 C 相当于瞬间短路,+5V 加到了RST/VPD 端,该高电平使 8051 全机复位。若运行过程中,需要程序从头执行,只需按动按钮 S,则直接把+5V 加到了 RST/VPD 端,从
21、而复位。显然,该电路即可以上电复位,也可以手动复位,是常用复位电路之一。3.4 数码管显示图 4 数码管显示此处采用的数码管时共阴极数码管,G、F、E、D、C、B、A 七个端口是输入端口,对其各位进行赋值,置位则亮,复位则灭,用此来显示出相应的数字;1、2 两端用来控制高位和低位的选通显示,只要对端口置位,便可以选择该端口,并对其所代表的位进行赋值,显示。正常通行状况下,数码管从 30 秒开始倒计时,各个方向,对应点亮红绿黄灯。9遇到突发状况,数码管从 5 秒开始倒计时,各方向禁止通行,点亮红灯。3.5 红绿灯显示图 5 红绿灯显示每个路口都采用了 3 个 LED 灯来显示,分别代表红绿黄三种
22、灯,来模拟路口交通的变换。其中 D7 和 D8 表示转弯模块。以南北方向举例,正常状况下,从 30 秒开始倒计时,南北方向可直行,即绿灯(D6)亮起,东西方向禁止通行,亮红灯(D2)。当显示至 15 秒时,南北方向可直行和转弯,即两个绿灯(D6 和 D7)亮起,东西方向禁止通行,亮红灯(D2)。当显示至 3 秒时,通知车辆快速通过,南北黄灯(D5)闪烁,东西方向禁止通行,亮红灯(D2)。3.6 键盘:独立键盘+中断图 6 独立键盘+中断采用开关来控制进入中断,可以在路口出现紧急情况时,拉动开关。使红绿灯发生相应的改变,已处理紧急情况下车辆通行。当发生突发情况时,如救护车通过,接通上面的按键,各
23、个方向中止当前状态,即禁10止通行,各个方向点亮红灯,并维持 5 秒倒计时。当结束 5 秒倒计时,各个方向恢复到中止前的状态。3.7 系统原理图图 7 总电路图4 软件设计4.1 总体流程 开 始 南北绿东西红30s 倒计时显示黄灯亮 3s南北红东西绿30s 倒计时显示11图 8 流程图 4.2 循环流程控制思路东西红灯南北绿灯 东西红灯南北黄灯闪东西绿灯南北红灯东西黄灯闪南北绿灯东西红灯南北及转弯绿灯东西及转弯绿灯南北红灯中断图 9 流程控制图4.3 源程序#include #include #define uint unsigned int #define uchar unsigned c
24、har uchar temp,aa,nn;sbit rn=P20; sbit nb=P21; sbit gn=P22; sbit rw=P23; sbit dx=P24; sbit gw=P25; sbit shi=P36; sbit ge=P37; /*对要使用的单片机各个口进行定义*/ bit flag=0; ucharcodetable=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /*将数字 0123456789 的 16 进制数定义成数组用以显示*/ 黄灯亮 3s12v
25、oid delay(uint z); void disp(uint n); void nb_flash(void); void dx_flash(void); void xint0();void timer0(); void LED_ON(); void xint1(); void nanbei(); void dongxi();/*将所使用的子函数定义*/ void main() uint num; num=0; aa=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; EX0=1;
26、IT0=0; EX1=1; IT1=1; /*中断初始化*/while(1)nanbei();nb_flash();dongxi();void delay(uint z)13uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa+; if(aa=9) aa=0; flag=1;void disp(uint n) /*显示子函数*/ while(!flag) ge=0; P0=tablen%10;delay(50); shi=1;
27、ge=1; shi=0; P0=tablen/10; delay(50); shi=1;ge=1; if(flag=1) flag=0; void nanbei() /*南北方向的红绿灯和数码管显示子函数*/ uint num; 14num=30; disp(num); while(num15) num-; P2=0xf3; disp(num); while(num4) /*南北方向及转弯的红绿灯和数码管显示子函数*/ num-; P2=0xb3; disp(num); void nb_flash(void) /*南北方向的黄灯和数码管显示子函数*/ uint a; for(a=3;a0;a-
28、) P2=0xf5; nb=1; delay(100); nb=0; disp(a); void dongxi() /*东西方向的红绿灯和数码管显示子函数*/ uint num; num=30; while(num15) P2=0xde; 15disp(num); num-; while(num3) /*东西方向及转弯的红绿灯和数码管显示子函数*/ num-; P2=0x5e; disp(num); while(num0) /*东西方向的黄灯和数码管显示子函数*/ P2=0xee; dx=1; delay(100); dx=0; disp(num); num-; void xint0() in
29、terrupt 2 /*中断定义*/ TH0=(65536-50000)/256; TL0=(65536-50000)%256; LED_ON();void LED_ON() uint b;rn=0;rw=0;gn=1;gw=1;nb=1;dx=1;16for(b=5;b0;b-)ge=0;shi=1;P0=tableb;delay(1000);ge=1;shi=1;return;5 调试运行5.1 正常运行状态图 10 正常运行状态175.2 左右行显示 图 11 左右行显示 5.3 黄灯闪烁显示18图 12 黄灯闪烁显示6.设计心得体会一周的单片机课程设计很快就结束了,在这一周当中,虽然开
30、始有点困难,但是经过我们们分工合作,合理地进行设计安排,再加上老师的耐心指导,我们们终于顺利地完成了本次单片机课程设计,同时也学到了很多东西。在本次课程设计中,我们通过动手实践操作,进一步学习和掌握了单片机原理的有关知识,特别是程序的编程方面,加深了对单片机原理及应用技术的认识,进一步巩固了对单片机知识的理解,掌握简单单片机应用系统的设计、制作、调试的方法。在设计时根据课题要求,复习相关的知识,查询相关的资料。根据实验条件,找到适合的方案,找到需要的元器件及工具,进行实验。这次的单片机课程设计重点是通过实践操作和理论相结合,提高动手实践能力,提高科学的思维能力,更在一周的时间了解了更多的有关单
31、片机的知识,使知识更加丰富,使自己更加充实。与此同时,我们也对团队分工合作有了进一步的认识,只有通过合理的分工合作,我们们才能够在短短一周的时间内完成设计任务,相信这对以后在社会上工作和学习会有很多帮助,让我们能更好的进入工作状态。最重要的是,这次课程设计也增加了我们对问题的研究和探讨,们以后的学习中会有更多的帮助。单片机为我们的主要专业课之一,但要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成
32、注释程序的好习惯,一个程序19的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我们受益终身。在完成单片机课程设计后,我们们发现我们们还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能被动完成。但通过学习这一次实践,增强了我们们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。从中增强了我们的团队合作精神,并让我们们认识到把理论应用到实践中去是多么重要。7 参考文献1李全利.单片机原
33、理及应用(C51)高等教育出版2刘海宽.包建华.张兴奎.南京东南大学出版社.2009.13郭天祥.新概念 51 单片机 C 语言教程北京:电子工业出版社 2009.14 张洪润.单片机原理及应用系统. 北京:机械工业出版社,2004.25 胡雪梅.单片机原理及应用. 北京:清华大学出版社,2009.56 穆兰.单片机原理及接口技术. 北京:机械工业出版社,2006.5 附件 1 评价表萍乡学院课程设计成绩评价表课程名称题目名称学生姓名 学号 指导教师姓名序号 评价项目 指 标 满分 评分1工作量、工作态度和出勤率按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。202 课程设计质量课程设计选题合理,计算过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。60203 仿真实践设计的硬件和程序在 proteus 能仿真运行,效果良好。20总分评语:指导教师: 年 月 日附件 2 任务书萍乡学院课程设计任务书课程题目专业 姓名 学号主要内容、基本要求、主要参考资料等21完成期限 指导教师 专业负责人 年 月 日