C语言版交通灯课程设计(15页).doc

上传人:1595****071 文档编号:35418064 上传时间:2022-08-21 格式:DOC 页数:15 大小:135.50KB
返回 下载 相关 举报
C语言版交通灯课程设计(15页).doc_第1页
第1页 / 共15页
C语言版交通灯课程设计(15页).doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《C语言版交通灯课程设计(15页).doc》由会员分享,可在线阅读,更多相关《C语言版交通灯课程设计(15页).doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-C语言版交通灯课程设计-第 13 页微机控制课程设计报告 课程名称 基于C语言单片机交通灯 学生姓名 张 万 双 学号 51102022004 专业班级 电子信息科学与技术2班 指导老师 2013年12月5日 目录 一.前言.3 二.功能概述 .3 三.设计思路4 四.硬件介绍4 五.软件程序设计.9 六.电路图及仿真实现.12.14 .15.18 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控 制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往 作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构 软硬件结合,加以完善。 十字路口车

2、辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什 么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制 方式很多,在学习了单片机的有关知识之后,运用相关知识来设计完成交通信号灯。二功能概述 2.1 设计任务:交通灯的硬件和软件设计 2.2 设计目的 1.进一步熟悉和掌握单片机的结构和工作原理。 2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。 3.通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术,了解 有关电路参数的计算方法。 4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。 5.通过完成一个包括电路设计和程序开发的完整过程,为我

3、们今后从事相应 工作打下基础。 三设计思路 交通灯的变化规律 按照常规我们假设一个十字路口为东西南北走向。初始状态为状态 1,南北 方向绿灯通车,东西方向红灯。经过过一段时间(25S)转换状态 2,南北方向 绿灯闪几次转亮黄灯,延时 5S,东西方向仍然红灯。再转换到状态 3,东西方向 绿灯通车,南北方向红灯。过一段时间(25S)转换到状态 4,东西方向绿灯闪 几次转亮黄等,延时 5S,南北方向仍然红灯。最后循环至南北绿灯,东西红灯。在这些状态下,有时钟倒数计时。四硬件介绍 基础知识 交通灯控制器实例主要使用了 89C51 单片机的定时器计数器,基础知识主 要包括交通灯的变化规律、定时器计数器的

4、概念、定时器计数器的相关寄存 器、定时器计数器的 4 种工作方式、以及定时器计数器的变成。 4.1 定时器/计数器 定时器计数器是单片机中最常用、最重要的功能模块之一,本节通过交通灯控 制器实例来演示定时器的使用,并复习如何使用散转程序。 首先介绍交通灯以及定时器计数器的基础知识,接着介绍本实例的硬件电路构 成,然后逐步分析定时器的变成以及程序的全貌,最后总结一下本实例的技巧与 注意点。4.2 定时器计数器的概念 89C51 单片机内有两个可编程的定时器计数器 T0、T1。 当定时器计数器用作“定时器”时,每经过 1 个机器周期(12 个时钟周期), 计数器加 1。 当定时器计数器用作“计数器

5、”时,计数器在对应的外部输入管脚(T0 为 P3.4 引脚,T1 为 P3.5 引脚)上每发生一次 1 到 0 的跳变时加 1。使用“计数器”功 能时,外部输入每个机器周期被采样一次。当某一周期管脚状态采样为高电平而 下一周期采样为低电平时,计数器加 1。由于检测下降沿跳变需要两个机器周期(24个时钟周期)的时间,所以技术频率最大值只能为时钟周期的 124。计数器对外部输入信号的占空比并无限制,但为了保证给定的电平信号在其改变之前 至少被采样一次,外部输入信号必须至少保持一个完整的机器周期。4.3 定时器计数器的相关寄存器 与定时器计数器相关的寄存器有定时器计数器工作方式寄存器(TMOD)、定

6、 时器计数器控制寄存器(TCON)。TCON 已经在 2.5 节受控输出实例中介绍过, 因此,在本例中主要介绍 TMOD 寄存器。 定时器计数器工作方式寄存器(TMOD),字节地址 89H,不可进行位寻址。定时器计数器工作方式寄存器(TMOD)的 8 位分为两组,高 4 位控制 T1,低 4 位控制 T0。TMOD 每一位的功能如下: GATE:门控位。 GATE0,仅由运行控制位 TRX(X0,1)1 来启动定时器计数器运行; GATE1,由运行控制位 TRX(X0,1)1 和外部中断引脚上的高电平共同来 启动定时器计数器运行。 CT:定时器模式和计数器模式选择位。 CT0,为定时器模式;

7、CT1,为计数器模式。 M1、M0:工作方式选择位。M1、M0 的 4 中编码对应 4 种工作方式,对应关系见 表 210。 4.5 定时器计数器的 4 种工作方式 定时器计数器的 4 种工作方式下的逻辑结构如表所示。M1M2工作方式00方式 0,为 13 位定时器/计数器 01方式 1,为 16 位定时器/计数器 1 0方式 2,为初值自动重装的 8 位定时器/计数器 1 1方式 3,仅 T0 有效,将 T0 分为两个 8 位定时器/计数器(1)方式 0。 定时器计数器的工作方式 0 称为 13 位定时器计数器的。它由 TLX 的低 5 位 和 TLX 的 8 位构成 13 位的计数器,此时

8、 TLX 的高 3 位未使用。改工作方式是为 了和 48 系列单片机兼容而设计的一种工作方式,一般情况不使用方式 0 进行定 时计数。方式 0 的控制方式与方式 1 完全相同,下面重点介绍方式 1 的控制方式。 (2)方式 1 定时器计数器的工作方式 1 称为 16 位定时器计数器。它由 TLX 和 THX 构成, TLX 计数溢出向 THX 进位,THX 计数溢出置位 TCON 中溢出标志位 TFX。 GATE 位的状态定时器计数器运行控制取决于 TRX 一个条件还是 TRX 和 INTX 引 脚这两个条件。当 GATE=0 时,则只要 TRX 被置为 1,定时器计数器即被允许 计数(定时器

9、计数器的计数控制仅由 TRX 的状态确定,TRX=1 计数,TRX=0 停 止计数)。当 GATE=1 时,定时器计数器是否计数由 INTX 输入的电平和 TRX 的 状态共同确定:当 TRX=1,且 INTX=1 时,才允许定时器计数器计数(定时器 计数器的计数控制由 TRX 和 INTX 两个条件控制)。 (3)方式 2 定时器计数器的工作方式 0 和方式 1 再计数溢出后,计数器的值为 0,需要通 过程序重新装入计数初值。 定时器计数器的工作方式 1 称为初值自动重装的 8 位定时器计数器。在该工 作方式下,TLX 作为计数器,当 TLX 计数溢出时,在置 1 溢出标志 TFX 的同时,

10、 还自动的将 THX 中的常数送至 TLX,使 TLX 从该常数开始重新计数。这种工作方 式可以省去用户软件中重装常数的程序,简化定时常数的计算方法(确定计数初 值),可以相当精确地确定定时时间。 (4)方式 3 工作方式 3 仅对定时器计数器 0 有效,在该工作方式之下,定时器计数器的 0 被拆成 2 个独立的定时器计数器:TL0、TF1。TL0 使用 T0 的状态控制 CT、 GATE、TR0、INT0,而 TH0 被固定位一个 8 位定时器(不能作外部计数方式),并 使用定时器计数器 1 的状态控制位 TR1、和 TF1,同时占用定时器 T1 的中断源。 此时,定时器计数器 1 可设定为

11、方式 0、方式 1 和方式 2,作为串行口的波特率发生器。 4.5 定时器计数器的编程 (1)初始化 定时器计数器的初始化编程包括以下几个部分。 根据要求给定时器计数器方式寄存器(TMOD)送一个方式控制字,以设定定时 器计数器的工作方式。 根据需要给 TH 和 TL 寄存器送初值,以确定需要的定时时间或计数的初值。根据需要给中断允许寄存器(IE)送中断控制字,以开放相应的中断和设定中断 优先级。 给 TCON 寄存器送命令字以启动或禁止定时计数器的运行。 (2)定时器计数器初值的计算。 计数器初值: 设计算器的模值位 M,所需的计数值为 C,计数初值设定为 TC,则 TC=M-C (M 等于

12、 2 的 13 次方,16 次方,8 次方)。 定时器初值: 设定时器的模值为 M,需要的定时时间为 T,定时器的初值设定为 TC,则 TC=M-T/t (M 等于 2 的 13 次方,16 次方,8 次方)。五软件程序设计 交通灯控制器实例使用了 89C51 单片机的定时器/计数器,首先分定时器初 始化,定时器中断服务程序两个部分介绍定时器计数器的软件编程,其次在画出 程序流程图的基础上编写软件程序,并给出完整的交通灯控制器程序实例。 5.1 定时器初始化 为了使定时器时间准确,避免因为定时器重装而引起的累计误差,应将定时 器设置为初值自动装置的 8 位定时器/计数器,即定时器工作在工作方式

13、 2.在 12MHz 晶振条件下,8 位定时器的最长定时时间是 0.256ms,为了方便计算取定 时时间为 0.25ms,所以,定时 0.5s 需要定时器中断 2000 次。 下 面 计 算 定 时 器 的 初 值 。 定 时 器 初 值 TC=M-T/t=256-250/1=6 , 因 此 TH0=06H,TL0=06H. 定时器初始化程序如下,定时器 T0 设定为工作方式 2,初始值为 06H,自动 重装入值为 06H。 T0 -INIT;MOV TMOD,#00000010B ; 定时器 T0 工作方式 2MOV TL0,#06H; 设定时器 T0 的初始值MOV TH0,#06H; 设

14、定时器 T0 的自动重装值MOV TCON,#00010000B ; 定时器 T0 的使能 SETB EA;中断允许总控制位使能 SETB ET0;T0 中断使能 RET 5.2 定时器中断服务程序 T0-INIT; DJNZTIME-COUNT0,T0-INT-EXIT MOVTIME-COUNT0,#250 DJNZTIME-COUNT1, T0-INT-EXIT MOVTIME-COUNT1,#8 SETBSECOND-FLAG; T0-INT-EXIT; RETI 每 0.25ms 定时器中断发生,程序跳转到中断服务程序 T0-INT 开始执行。中 断服务程序每次将定时器中断计数变量减

15、 1,但定时器中断计数变量为 0 时,0.5s 定时时间到,将位变量 SECOND-FLAG 置为 1.定时器中断服务程序通过 RETI 指令 返回,程序将跳转到进入中断前的断点继续执行。 5.3 程序流程图 程序较为简单,可以直接进行程序的编写,但本实例的程序流程比较复杂, 在编写程序前,应当先画出程序流程图。程序流程图是描述程序运行流程的一种 图表。它不仅描绘程序从头到尾的运行顺序,也描述程序运行过程中的所有可能 发生的状况。 六电路图及仿真设计 6.1 设计完成原理图如下 在电路连接完成后,将写好的程序放入单片机,运行。 6.2 在初始状态南北绿灯,东西红灯,持续时间为 25s 6.3

16、南北跳转到黄灯 5s,东西仍为红灯在南北转换为红灯的同时,东西灯转换到绿灯持续 25s;东西转换为黄灯持续5s,南北红灯不变;如此循环,从而实现交通灯的作用。 七总结 回顾起此次单片机课程设计,我仍感慨颇多,学到了很多的东西。同时不仅 巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。在 实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入 的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切 问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的 提升。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问 题,而

17、程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能 力,它才是一个设计的灵魂所在。因此可以说单片机的设计是软件和硬件的结合, 二者是密不可分的。 通过这次课程设计我发现单片机原理应用行很强,只有老师的讲解不行,只 看也不中,只有自己动手去做才会发现自己确实有太多的不足,许多的原理,程 序看似简单,真正去做才知道知识并没有自己想象的那样扎实。从而懂得了理论 与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的 实际动手能力和独立思考的能力。树立了对自己工作能力的信心,相信会对今后 的学习工作生活

18、有非常重要的影响。而且大大提高了动手的能力,使我充分体会 到了在创造过程中探索的艰难和成功时的喜悦。 八源程序 #include #define uchar unsigned char #define uint unsigned int uchar n=0,temp=0;uchar code segcode0=0x5b,0x06,0x3f,0x5b,0x06,0x3f,0x5b,0x06,0x3f;Uchar code segcode0=0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f;/uchar code segcode0=0x3f,0x0

19、6,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; void delay(x) while(x-); void timer0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; n+; temp=temp%61; if(n=20) temp+; n=0; if(temp=25)&(temp=28)&(temp=30)&(temp=55)&(temp=58)&(temp60)P1=0x24;main() uint i=0; /P1_0=0; /P1_7=0; TMOD=0x01; TH0=(65

20、536-50000)/256; TL0=(65536-50000)%256; /while(1) /i=temp; / TH1=256-125; / TL1=256-125; EA=1; ET0=1; / ET1=1; TR0=1; while(1) P2_0=0; P2_1=1; P0=segcode0temp/10; delay(3000); P2_0=1; P2_1=0; P0=segcode1temp%10; delay(3000); P2_1=1;/TR1=1; 参考文献 【1】单片机的 C 语言应用程序设计 马忠梅 籍顺心 北京航空航天大学出版社 2007 【2】51 单片机应用开发案例精选 王为青 邱文勋 人民邮电出版社2007【3】51 系列单片机设计实例楼然苗 李广飞 北京航空航天大学出版社 2003【4】单片机原理与接口技术胡汉才清华大学出版社2006【5】单片机原理与应用丁元杰机械工业出版社2007

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁