单片机交通灯课程设计讲解.pdf

上传人:白大夫 文档编号:5478419 上传时间:2020-05-20 格式:PDF 页数:17 大小:1.67MB
返回 下载 相关 举报
单片机交通灯课程设计讲解.pdf_第1页
第1页 / 共17页
单片机交通灯课程设计讲解.pdf_第2页
第2页 / 共17页
单片机交通灯课程设计讲解.pdf_第3页
第3页 / 共17页
单片机交通灯课程设计讲解.pdf_第4页
第4页 / 共17页
单片机交通灯课程设计讲解.pdf_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《单片机交通灯课程设计讲解.pdf》由会员分享,可在线阅读,更多相关《单片机交通灯课程设计讲解.pdf(17页珍藏版)》请在三一文库上搜索。

1、分院信息科学与工程学院专业自动化 学生姓名学号1003010524 设计题目 基于单片机的交通控制的设计 设计目的: 1. 通过设计了解一个十字路口交通灯基本工作原理; 2. 掌握 89C52计算器/ 定时器的工作方式和74LS573驱动芯片的工作原理; 3. 掌握 keil软件的使用; 4. 学会 team work 团队合作。 设计内容: 设计一个模拟十字路口交通灯控制器,程序运行后,初始状态时东南西北 方向红灯全亮 5 秒,接着程序开始循环以下的程序:先东西绿灯和南北红灯亮 15秒;然后南北红灯亮和东西黄灯闪5 秒;接着南北绿灯和东西红灯亮15 秒; 最后东西红灯亮和南北黄灯闪5 秒。

2、总体设计: 本设计采用单片机89C52作为控制器,通行时间及等待时间使用数码管以 倒计时的方式显示,单片机P1口控制交通灯(红黄绿三色LCD )的替换。 指导教师(签字) : 年月日 分院院长(签字) : 年月日 摘要 近年来随着科技的飞速发展, 单片机的应用正在不断深入, 同时带动传统控 制检测技术日益更新。 在实时检测和自动控制的单片机应用系统中,单片机往往 作为一个核心部件来使用, 仅单片机方面知识是不够的, 还应根据具体硬件结构 软硬件结合,加以完善。 十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什 么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯

3、控制 方式很多,在学习了单片机的有关知识之后,运用相关知识来设计完成交通信号 灯。我对单片机很感兴趣, 所以在听了老师给我们讲解单片机相关知识以后,我 自己课后查找资料,不断学习单片机方面的知识。这次课设给了我学以致用的 机会,我利用自己学的单片机知识, 做了一个基于单片机的模拟交通灯控制的设 计。 单片机课程设计 - 1 - 目录 1 设计目的 . 错误!未定义书签。 2 设计内容 . 错误!未定义书签。 3 总体设计 2 4 硬件设计介绍 2 4.1 数码管倒计时显示的理论分析. 3 4.2 三极管的工作原理. 3 4.3 二联共阳数码管原理. 4 4.4 74LS573 驱动芯片原理 .

4、 6 5 电路图及仿真设计 7 6 源程序 8 7 设计体会及建议 . 13 单片机课程设计 - 2 - 单片机交通灯设计 一、设计目的 (一)通过设计了解一个十字路口交通灯基本工作原理 (二)掌握 89C52计数器 / 定时器的工作方式和74LS573驱动芯片的工作原理; (三)掌握 keil软件的使用 (四)学会 team work 团队合作 二、设计内容 设计一个模拟十字路口交通灯控制器,程序运行后,初始状态时东南西北 方向红灯全亮 5 秒,接着程序开始循环以下的程序:先东西绿灯和南北红灯亮 15 秒;然后南北红灯亮和东西黄灯闪5 秒;接着南北绿灯和东西红灯亮15秒; 最后东西红灯亮和南

5、北黄灯闪5 秒。 三、总体设计 本设计采用单片机89C52作为控制器, 通行时间及等待时间使用数码管以倒 计时的方式显示,使用单片机P1口控制交通灯(红黄绿三色LCD )的替换。用 单片机的 P1.0-P1.5 六个 I/O 口控制东西南北的红黄绿灯,用P0.0P0.7 八个 I/O 口控制数码管的段选,用P2.4P2.7 四个 I/O 口控制数码管的位选,其中 用四个 NPN 三极管放大数码管位选的电流, 用驱动芯片 74LS573驱动数码管的段 选。 四、硬件设计介绍 1. 数码管倒计时显示的理论分析 利用 MCS-51内部的定时器 / 计数器进行,配合软件延时实现倒计时。 在工作 之前必

6、须通过软件设定它的工作方式,即对寄存器TMOD 中每位进行设定,格式 如表 3 所示。 单片机课程设计 - 1 - 表 3 TMOD 格式 D7 D6 D5 D4 D3 D2 D1 D0 CATE C/T M1 M0 CATE C/T M1 M0 其中,低四位用于决定 T0的工作方式, 高四位用于决定 T1 的工作方式, M1 和 M0 工作方式控制位用以确定 4 种工作方式 , 如下表 4 所示: 表 4 M1 和 M0控制 4 种工作方式 M1 M0 工作方式说明 0 0 方式 0 13位计数器 0 1 方式 1 16位计数器 1 0 方式 2 自动装载 8 位计数器 1 1 方式 3 定

7、时器 0:分为两个 8 位计数器 定时器 1:对外部停止计数 采用 T0 方式 1, 定时 1S, 系统时钟为 6MHZ , 所以时钟周期 =(12*1/6)us=2us ; 采用每隔 100ms中断一次,中断 10 次为 1S,使时间的计数值减1,实现了倒计 时的功能。计算计数初值X: (216-X)*2us=1s,所以 X=15536=3CB0H, 因此 TH0=3CH,TL0=B0H。 状态灯显示的理论分析 南北通行,东西禁止时利用定时器中断倒计时15S;东西通行,南北禁止时 利用定时器中断倒计时15S。 中断理论分析 MCS-51 中断系统有 5 个中断源,分别是外部中断0、外部中断

8、1、定时器 / 计数器 T0溢出中断、定时器 / 计数器 T1溢出中断、串行口中断请求。 MCS-51的 CPU 对中断源的开放和屏蔽,是由片内的中断允许寄存器IE 控 制。中断允许控制寄存器IE 的格式,如表 5 所示。 位地址 AF AE AD AC AB AA A9 A8 位符号EA / / ES ET1 EX1 ET0 EX0 EA 中断允许总控制位, EA=0 ,中断总禁止,禁止所有中断。EA=1 ,中断总 单片机课程设计 - 2 - 允许,总允许位打开后,各中断的允许或禁止由各中断允许控制位设置决定。 EX0(EX1) 外部中断允许控制位, EX0(EX1)=0,禁止外部中断。 E

9、X0(EX1)=1, 允许外部中断。 ET0(ET1) 定时/ 计数中断允许控制位, ET0(ET1)=0, 禁止定时 / 计数中断。 ET0(ET1)=1,允许定时 / 计数中断。 ES 串行中断允许控制位, ES=0 ,禁止串行中断。 ES=1 ,允许串行中断。 利用 MCS-51内部的中断进行,采用外部中断0,跳沿触发方式;外部中断 0 的中断入口地址为0003H 。 2. 三极管的工作原理 三极管是电流放大器件,有三个极,分别叫做集电极C,基极 B,发射极 E。 分成 NPN 和 PNP两种。我们仅以 NPN 三极管的共发射极放大电路为例来说明一 下三极管放大电路的基本原理。 如上图所

10、示,我们把从基极B流至发射极 E的电流叫做基极电流Ib ;把从 集电极 C流至发射极 E的电流叫做集电极电流 Ic 。这两个电流的方向都是流出 发射极的,所以发射极 E上就用了一个箭头来表示电流的方向。三极管的放大作 用就是:集电极电流受基极电流的控制(假设电源能够提供给集电极足够大的 电流的话),并且基极电流很小的变化,会引起集电极电流很大的变化,且变化 满足一定的比例关系: 集电极电流的变化量是基极电流变化量的 倍,即电流 变化被放大了 倍,所以我们把 叫做三极管的放大倍数( 一般远大于 1, 单片机课程设计 - 3 - 例如几十,几百)。如果我们将一个变化的小信号加到基极跟发射极之间,这

11、 就会引起基极电流Ib 的变化, Ib 的变化被放大后,导致了Ic 很大的变化。如 果集电极电流 Ic 是流过一个电阻 R的, 那么根据电压计算公式 U=R*I 可以算得, 这电阻上电压就会发生很大的变化。我们将这个电阻上的电压取出来,就得到了 放大后的电压信号了。 3. 二联共阳数码管原理 单片机课程设计 - 4 - 静态显示 静态显示是当显示器显示某个字符时,相应的段恒定地导通或截止,指导显示 另一个字符为止 当采用静态显示方式时,各段公共端接地(共阴极)或接电源(共阳极),段选 线与一个 8 位锁存器的输出口相连,显示器的各位相互独立 静态方式显示器亮度较高,编程容易,但占用的IO 口线

12、资源较多,日常生活中 比较少用。 动态显示 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱 动是将所有数码管的8 个显示笔划 “a,b,c,d,e,f,g,dp“的同名端连在一起, 另外 为每个数码管的公共极COM 增加位选通控制电路, 位选通由各自独立的I/O 线控 制,当单片机输出字形码时, 所有数码管都接收到相同的字形码,但究竟是那个 数码管会显示出字形, 取决于单片机对位选通COM 端电路的控制, 所以我们只要 将需要显示的数码管的选通控制打开,该位就显示出字形, 没有选通的数码管就 不会亮。通过分时轮流控制各个数码管的的COM 端,就使各个数码管轮流受控显 示,这

13、就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms , 由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同 时点亮,但只要扫描的速度足够快, 给人的印象就是一组稳定的显示数据,不会 有闪烁感, 动态显示的效果和静态显示是一样的,能够节省大量的 I/O 端口,而 且功耗更低。 单片机课程设计 - 5 - 4. 74LS573驱动芯片原理 说明: LS573 的八个锁存器都是透明的 D 型锁存器,当使能( G )为高时, Q 输出 将随数据( D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。 输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被

14、关闭时, 新的数据也可以置入。 这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总 线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工 作寄存器 单片机课程设计 - 6 - 五、电路图及仿真设计 设计完成原理图如下 在电路连接完成后,将写好的程序放入单片机,运行。 单片机交通灯控制原理图 单片机课程设计 - 7 - 交通灯实物图 实物图 六、源程序 #include #define uchar unsigned char #define uint unsigned int sbit red_dongxi=P10; /P1.0东西红灯 sbit yello

15、w_dongxi=P11; /P1.1东西黄灯 sbit green_dongxi=P12; /P1.2东西绿灯 sbit red_nanbei=P13; /P1.3南北红灯 sbit yellow_nanbei=P14; /P1.4南北黄灯 sbit green_nanbei=P15; /P1.5南北绿灯 sbit nbweixuan1=P24; /P2.4南北数码管位选1 sbit nbweixuan2=P25; /P2.5南北数码管位选2 sbit dxweixuan1=P26; /P2.6东西数码管位选1 sbit dxweixuan2=P27; /P2.7东西数码管位选2 uint

16、aa,shi1,shi2,ge1,ge2; /定义无符号整型变量 uint code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; void delay(uint z); /延时函数声明 void display(uint shi1,uint ge1,uint shi2,uint ge2);/数码管显示函数声明 单片机课程设计 - 8 - void init1(); /状态函数1 声明 void init2() /状态函数2 声明 void init3(); /状态函数3 声明 void init4(); /状态函数4 声明

17、void init5(); /状态函数5 声明 void main() /主函数 P0=0xFF; /P0口初始化 P1=0xFF; /P1口初始化 P3=0xFF; /P3口初始化 EA=1; /打开中断 ET0=1; TR0=0; init1(); while(1) init2(); init3(); init4(); init5(); void init1() /状态函数1 uint temp; temp=5; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) red

18、_dongxi=0; red_nanbei=0; green_dongxi=1; green_nanbei=1; yellow_nanbei=1; yellow_dongxi=1; if(aa=20) aa=0; temp-; shi1=shi2=temp/10; ge1=ge2=temp%10; if(temp=0) break; display(shi1,ge1,shi2,ge2); 单片机课程设计 - 9 - void init2() /状态函数2 uint temp; temp=10; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000

19、)%256; EA=1; ET0=1; TR0=1; while(1) red_dongxi=1; red_nanbei=0; green_dongxi=0; green_nanbei=1; yellow_nanbei=1; yellow_dongxi=1; if(aa=20) aa=0; temp-; shi1=(temp+5)/10; ge1=(temp+5)%10; shi2=temp/10; ge2=temp%10; if(temp=0) break; display(shi1,ge1,shi2,ge2); void init3() /状态函数 3 uint temp; temp=5;

20、 TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) red_nanbei=0; green_dongxi=1; 单片机课程设计 - 10 - if(aa=20) aa=0; temp-; yellow_dongxi=yellow_dongxi; shi1=temp/10; shi2=shi1; ge1=temp%10; ge2=ge1; if(temp=0) break; display(shi1,ge1,shi2,ge2); void init4() /状态函数4 uin

21、t temp; temp=10; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) red_dongxi=0; red_nanbei=1; yellow_dongxi=1; green_nanbei=0; if(aa=20) aa=0; temp-; shi1=temp/10; ge1=temp%10; shi2=(temp+5)/10; ge2=(temp+5)%10; if(temp=0) break; display(shi1,ge1,shi2,ge2); void

22、init5() /状态函数5 uint temp; temp=5; TMOD=0x01; 单片机课程设计 - 11 - TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) red_nanbei=1; red_dongxi=0; green_dongxi=1; green_nanbei=1; if(aa=20) aa=0; temp-; yellow_nanbei=yellow_nanbei; shi1=temp/10; shi2=shi1; ge1=temp%10; ge2=ge1; if(tem

23、p=0) break; display(shi1,ge1,shi2,ge2); void display(uint shi1,uint ge1,uint shi2,uint ge2) /数码管显示 dxweixuan1=1; dxweixuan2=0; nbweixuan1=0; nbweixuan2=0; P0=tablege1; delay(5); dxweixuan1=0; dxweixuan2=1; nbweixuan1=0; nbweixuan2=0; P0=tableshi1; delay(5); dxweixuan1=0; dxweixuan2=0; nbweixuan1=1;

24、nbweixuan2=0; P0=tablege2; delay(5); dxweixuan1=0; dxweixuan2=0; 单片机课程设计 - 12 - nbweixuan1=0; nbweixuan2=1; P0=tableshi2; delay(5); void xtimer0() interrupt 1 /中断函数 TH0=(65535-50000)/256; TL0=(65535-50000)%256; aa+; void delay(uint z) /延时函数 uint x,y; for(x=0;xz;x+) for(y=0;y110;y+); 七设计体会与建议 在本次课程设计

25、中, 重新巩固了单片机理论课时, 感觉到的内容很多, 知识 点很杂、很繁琐。通过自己的努力也更进一步掌握了单片机的内容构造和工作原 理,以及接外部电路的情况。当然光有理论知识那只是“纸上谈兵”,还需实际 动手去实践。真正把所学的用到日常生活中,理论联系实际,做出实物模型。这 次单片机课程设计, 我们设计的是简易十字路口交通灯设计,通过这次课程设计 我感觉到要想做成功, 必须花时间多做准备, 查阅大量资料,每个过程都很繁琐, 都要认真地分析每一步每一个模块要实现大的功能,然后分步进行编写调试, 最 后整合成在一起。 在这次课程设计中,让我感到过程决定结果,细节觉得成败。过程很艰难, 每个细节都要

26、认真的分析。 通过本次课程设计, 我们要对所做的事情有耐性, 在编程的时候有困难, 也 可能变得不一定成功,所以要经过多次调试,分析,改正,反复去做;认真虚心 求教老师和同学。 在本次课程设计中,遇到最难的问题是倒计时这个模块。从一位静态LED 显示开始调试, 到 2 位动态 LED显示调试, 遇到很多困难。 一位一位的静态显示 单片机课程设计 - 13 - 都可以,用动态显示方法的时候,就出现乱码,之后一条一条指令的测试,知道 没出错为止。 这时又有问题了, 十位先显示个位要显示的数再显示十位要显示的 数,经过反复的调试和老师的帮助下,发现我们把段选和位选分开了(有两个子 程序来写)。程序经过更改后, 继续调试, 又发现 2 个数码管只是移位的在显示, 可且间隔时间很长(这是由延时时间太长引起的)。设置延时时间很短的时候, 就发现显示很快(很容易会发生交通意外),经过同学的帮助下,查处我们的定 时有问题,在同学的帮助下,重新编写和调试定时,最后成功了。 在本次课程设计中, 我们用汇编语言编写, 觉得汇编语言很复杂很麻烦,能 用的寄存器少,每个参数都要放在寄存器里,很繁琐,而且格式是固定的,编写 出来的程序很长。 在这次课程设计中,经历了多次失败的洗礼,我明白在以后学习和实践中, 我要努力掌握知识,多动手,多思考,以免在以后的学习工作中犯同样的错误。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1