基于某单片机地多功能交通灯.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
标准文档 实用文案 基于单片机的交通信号灯 设计人员:管天亮,张凡,邓丽蓉,郑兴乐 指导老师:钟春良 目录 设计目的 硬件电路设计 单片机模块设计 电流放大模块 软件设计 仿真电路 实际电路 参考文献 (设计前请参考电子技术基础数字部分第三章3.6节逻辑门电路使用中的几个实际问题。电子技术基础模拟部分第四章4.5共集电极放大电路) 设计目的 通过AT89S51单片机控制东西南北四个方向的红绿灯,同时设置五个按键,当按下K1键,则进入调节绿灯时间的状态,K2是绿灯时间加5秒,K3是绿灯时间减5秒,绿灯最少时间是25秒,最多加到90秒,再按下K1键则退出调节状态;当不按K1键,直接按下K2键则东西通行南北禁止,按下K3键则是南北通行,东西禁止,再按下K1键则恢复原来状态;当按下K4键则将所有的状态恢复成设置的状态;当按下K5键则停止在当前状态。 硬件电路设计 1、单片机模块设计 本次设计采用的是单片机AT89C51。芯片共有40个引脚,引脚的排列顺序为从靠芯片的缺口,如图3.1所示。左边那列逆时针数起,依次为1,2,3.....40,其中芯片的1脚顶上有一个凹点。在单片机的40个引脚中,电源引脚2根,外接晶体振荡器引脚2根,控制引脚4根以及4组8位可编程I/O引脚32根。 熟悉单片机的拉电流与灌电流的区别,点亮led灯使用的是灌电流驱动 图 AT89C51管脚图 AT89C51单片机共有4组8位可编程I/O口,分别为P0、P1、P2、P3口,每个口有8位,共32根。每一根引脚都可以编程,比如用来控制电机、交通灯等,开发产品时就是利用这些可编程引脚来实现我们想要的功能。 P0口:8位双向I/O口线,名称为P0.0-P0.7; P1口:8位准双向I/O口线,名称为P1.0-P1.7; P2口:8位准双向I/O口线,名称为P2.0-P2.7; P3口:8位准双向I/O口线,名称为P3.0-P3.7。 本文单片机模块如图所示,主要是由单片机芯片与晶振和复位电路组成的。是由单片机来控制整个系统,让我们的系统可以正常的运行。 2、电流放大模块 该程序通过共集电极放大电路实现电流的放大功能,由于单片机的输出电流太小,不足以驱动数码管,因此需要通过共集电极放大电路来放大电流。共集电极电路只有电流放大作用,没有电压放大,因此可用来放大电流而不担心单片机被烧毁。将P1.0~P1.4四个IO口接入四个三极管的基极,集电极接电源Vcc,发射级接入两个共阳极数码管位选端。 数码管显示模块 led数码管(LED Segment Displays)由多个 发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。 数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。本次实验使用的是共阳极数码管 软件设计 该电路的程序设计如下: #include reg51.h #define uchar unsigned char #define uint unsigned int #define io P2 sbit a=P1^6; sbit b=P1^7; sbit c=P3^0; sbit ew1=P1^0; sbit ew2=P1^1; sbit sn1=P1^2; sbit sn2=P1^3; sbit k1=P3^0; sbit k2=P3^1; sbit k3=P3^2; sbit k4=P3^3; sbit k5=P3^4; uchar time=0,sec=0; uchar code table[]={0XC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(uchar i) { uchar j; while(i--) for(j=0;j114;j++); } void main() { uchar b=0,i=0; uchar c=1; P1=0x00; EA=1; TMOD=0X01; TH0=0X4c; //定时50ms TL0=0X00; ET0=1; TR0=1; io=0xff; while(1) { if(sec==60+b) sec=0; if(k1==0) { delay(10); if(k1==0) { while(k1==0); c=++c; sec=0; time=0; } } else if(c/2) { P0=0xff; io=table[(25+b)/10]; sn1=1; delay(1)

文档评论(0)

linlin921 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档