单片机课程设计---基于at89s52交通灯设计

上传人:aa****6 文档编号:38366895 上传时间:2018-05-01 格式:DOC 页数:13 大小:809.50KB
返回 下载 相关 举报
单片机课程设计---基于at89s52交通灯设计_第1页
第1页 / 共13页
单片机课程设计---基于at89s52交通灯设计_第2页
第2页 / 共13页
单片机课程设计---基于at89s52交通灯设计_第3页
第3页 / 共13页
单片机课程设计---基于at89s52交通灯设计_第4页
第4页 / 共13页
单片机课程设计---基于at89s52交通灯设计_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《单片机课程设计---基于at89s52交通灯设计》由会员分享,可在线阅读,更多相关《单片机课程设计---基于at89s52交通灯设计(13页珍藏版)》请在金锄头文库上搜索。

1、 基于基于 AT89S52AT89S52 交通灯设计交通灯设计学学 院:院: 电子信息工程电子信息工程 专业班级:专业班级: 2008 电信电信(1)班班 姓姓 名:名: 高健高健 学学 号:号: 指导老师:指导老师: 邹应全邹应全 完成日期:完成日期:2011/6/11摘要摘要 交通灯在我们日常生活中随处可见,它在交通系统中处于至关重要的位置。 交通灯的使用大大减少了交通繁忙路口的事故发生,给行人和车辆提供一个安 全的交通环境,人们的生命和财产安全有了保障。本设计旨在模拟十字路口的 交通灯,以 AT89S51 单片机为基础,结合按键和数码管等元器件设计出一个简 单且完全的交通灯系统。关键词关

2、键词:交通灯 AT89S52 单片机一、设计任务一、设计任务 (1)、设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两条交叉 道路上的车辆交替运行,每次通行时间都设 30 秒,时间可设置修改。 (2)、在绿灯转为红灯时,要求黄灯先亮 5 秒钟,才能变换运行车道,且黄灯亮时, 要求每秒亮一次。 (3)、有紧急车辆要求通过时,系统要能禁止东西和南北两条路上所有的车辆通 行。 二、二、AT89S52 单片机及其他元器件简介单片机及其他元器件简介 (1)AT89S52 单片机 AT89S52 是一种低功耗、高 性能 CMOS8 位微控制器。片上 Flash 允许程序存储器在系统可编 程,亦适

3、于常规编程器。在单芯 片上,拥有灵巧的 8 位 CPU 和在 系统可编程 Flash,使得 AT89S52 为众多嵌入式控制应用 系统提供高灵活、超有效的解决 方案。AT89S52 具有以下标准功 能:8K 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定 时器,2 个数据指针,三个 16 位 定时器/计数器,一个 6 位向量 2 级中断结构,全双工串行口,片 内晶振及时钟电路。空闲模式下, CPU 停止工作,允许 RAM、定 时器计数器、串口、中断继续工 作。鉴于以上的优点本系统采用 AT89S52 作为主控芯片,实现对 整个系统的控制。(2)芯片 74LS24574

4、LS245 是我们常用的芯片,用来驱动 led 或者其他的设备,它是 8 路同相三态双向总线收 发器,可双向传输数据。 当 19 脚 E 为 H 时, A、B 为高阻。E 为 L 时,DIR 为 L 时,数据由 B 传向 A;DIR 为 H 时,由 A 传向 B。(3)两位共阴数码管 16 脚和 11 脚对应 A、15 脚和 10 脚对应 B、3 脚和 8 脚 对应 C、2 脚和 6 脚对应 D、1 脚和 5 脚对应 E、18 脚和 12 脚对应 F、17 脚 7 脚对应 G、4 脚和 9 脚对应 DP。公共 脚为 14 脚和 13 脚,分别对应 左边和右边显示的数字。三、系统硬件电路设计三、

5、系统硬件电路设计 (1)时钟电路设计如图所示,采用内部 时钟产生方式,在 XTAL1 和 XTAL2 两端跨接晶体 或陶瓷振荡器,与内部反 相器构成稳定的自击震荡。 其发出的时钟脉冲直接送 入片内定时控制部件。(2) 复位电路设计如上图所示,采用上电+按钮电平复位方式,当按下按钮时,RST 管脚高 电平触发。为保证复位可靠,RC 时间常数应大于两个机器周期,电容取 10uf,电阻取 1000 欧。 (3) 灯控制电路设计如上图所示,交通灯状态显示电路由东西南北四个方向各三个 LED 灯组成, 分别显示四个方向上红、黄、绿三个状态,用以指示十字路口各方向车辆的行 驶。通过软件编程,可使路口交通变

6、化情况为:南北方向和东西方向两条交叉道 路上的车辆交替运行,主干道每次通行时间都设为 30 秒。在绿灯转为红灯时, 要求黄灯先亮 5 秒钟,才能变换运行车道;黄灯亮时每秒闪亮一次。 (4) 按键控制电路设计开关控制由 7 个连接到单片机的控制按钮组成。通过软件编程,使得各个 开关的功能如上图所示, 基本满足了交通灯的需要。 四、元件清单及实物图四、元件清单及实物图 1、程序清单 名 称规 格数 量 单片机AT89S521 排阻9 脚 10K 1 晶振11.0592MHz 1 发光二极管GREEN 3 发光二极管RED 3 发光二极管YELLOW 3数码管 两位共阴 2电阻1K 1 电阻10K

7、6 按键 8 电解电容10uF 1 独石电容22pF 2 电源插头 1 排座20 脚 1排座40 脚 1 双排针2.54 间距 单排针2.54 间距 排线15cm16 根 实验板10*15cm1 2、原理图五、实验心得五、实验心得 这次交通灯的制作是我学会了不少的东西,首先是 proteus 和 keil 的使用。 单片机程序的编写和原理图的仿真都是在这两个软件的运行下才可以进行的。 这个实验最重要的是让我对 51 系列的单片机有了更深层次的了解,这一学期 开接触单片机的时候觉得这是一门极其高深的课程,老师讲的什么基本完全不 懂,课后看仍旧是一头雾水。通过交通灯的学习和制作,对单片机有了初步的

8、 了解,知道了它的组成、工作原理等等。 在软件编写这一块,开始时遇到了很大的难题,因为两百行的程序,哪怕 有一个错误,修改起来也不是十分方便。时常没有心思去寻找和改正错误,所 以软件这一块花了很大的一部分时间。几次调试后总算出现“0 warning”和“0 error”的字样。焊接也是比较麻烦,由于万能板买小了,再加上需要连接的线有很多根, 所以首先必须考虑到元器件的排布问题,尽量让自己的焊接的时候方便一点。 借鉴别人的经验,数码管和排阻之间用排线相连接,很大程度上节省焊接的时 间,并且让板子看起来更加整洁、美观。 除了学会很多东西以为,也发现了自己的不足。由于自己在这一方面只是 的短缺,所以

9、很多问题都需要查阅资料或者向别的同学请教。比如说 proteus 和 keil 的使用方法,都是看着别人操作几遍之后才慢慢学会。还有在焊接这一 方面也存在着很大问题。由于焊接在万能板反面,所以有时候会把单片机的引 脚看错,然后用吸枪慢慢清理。这不仅浪费时间而且还可能破坏万能板。在焊 接过程中还出现短路问题,一不小心锡丝用多了就有可能造成两个点之间的短 路问题,这一点说明了焊接能力还有待提升。 实验的结果是成功的,模拟出了交通灯的功能,各个按键的功能也和模拟 时一致,看着数字的跳动自己信息也感到十分开心。虽然想过在这个交通灯里 加入一些额外的功能,但终究由于自己知识的局限性而放弃,有点遗憾,不过

10、 能够学到东西就好。此次试验增长了自己的单片机知识外也让我知道实践和理 论学习的差别。实践过程中学到的知识自己记得会更加牢固一些,不容易忘记。 总的来说,单片机的制作让我收获不小。附附 1 源程序代码源程序代码 #include #define uchar unsigned char #define uint unsigned intuchar data buf4; uchar data sec_dx=20;/东西数默认 uchar data sec_nb=30;/南北默认值 uchar data set_timedx=20; uchar data set_timenb=30; int n;

11、uchar data b;/定时器中断次数 sbit k1=P16;/定义 5 组开关 sbit k2=P17; sbit k3=P27; sbit k4=P30; sbit k5=P31; sbit Yellow_nb=P25;/南北黄灯标志 sbit Yellow_dx=P22;/东西黄灯标志 sbit Green_nb=P24; sbit Green_dx=P21; sbit Buzz=P37; bit Buzzer_Indicate; bit time=0;/灯状态循环标志 bit set=1;/调时方向切换键标志 uchar code table11= /共阴极字型码 0x3f, /

12、-0 0x06, /-1 0x5b, /-2 0x4f, /-3 0x66, /-4 0x6d, /-5 0x7d, /-6 0x07, /-7 0x7f, /-8 0x6f, /-9 0x00 /-NULL ;/函数的声明部分 void delay(int ms);/延时子程序 void key();/按键扫描子程序 void key_to1();/键处理子程序void key_to2(); void key_to3(); void display();/显示子程序 void logo(); /开机 LOGO void Buzzer(); /主程序 void main() TMOD=0X01

13、; TH0=0XD8; TL0=0XF0; EA=1; ET0=1; TR0=1; EX0=1; EX1=1;logo(); P2=0Xc3;/ 开始默认状态,东西绿灯,南北黄灯sec_nb=sec_dx+5; while(1) key(); /调用按键扫描程序 display(); /调用显示程序 Buzzer(); /函数的定义部分 void key()/按键扫描子程序 if(k1!=1) delay(10); if(k1!=1) while(k1!=1) key_to1();for(n=0;n40;n+) display(); if(k2!=1) delay(10); if(k2!=1)

14、 while(k2!=1) key_to2();for(n=0;n40;n+) display(); if(k3!=1) TR0=1; /启动定时器 Buzzer_Indicate=0; sec_nb=set_timenb; /从中断回复,仍显示设置过的数值 sec_dx=set_timedx; if(time=0) P2=0X99;sec_nb=sec_dx+5; else P2=0xC3;sec_dx=sec_nb+5; if(k4!=1) delay(5); if(k4!=1) while(k4!=1); set=!set; if(k5!=1)delay(5);if(k5!=1)whil

15、e(k5!=1)key_to3(); void display() /显示子程序 buf1=sec_dx/10; /第 1 位 东西秒十位 buf2=sec_dx%10; /第 2 位 东西秒个位 buf3=sec_nb/10; /第 3 位 南北秒十位 buf0=sec_nb%10; /第 4 位 南北秒个位P1=0xff; / 初始灯为灭的P0=0x00;P1=0xfe; /片选 LCD1P0=tablebuf1;delay(1);P1=0xff;P0=0x00;P1=0xfd; /片选 LCD2P0=tablebuf2;delay(1);P1=0xff;P0=0x00;P1=0Xfb; /片选 LCD3 P0=tablebuf3;delay(1); P1=0xff;P0=0x00; P1=0Xf7; P0=tablebuf0; /片选

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

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号