单片机课程交通灯设计报告(1).doc_第1页
单片机课程交通灯设计报告(1).doc_第2页
单片机课程交通灯设计报告(1).doc_第3页
单片机课程交通灯设计报告(1).doc_第4页
单片机课程交通灯设计报告(1).doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录1 课程设计目的和功能 2 器件介绍三硬件电路设计 3 3.1 硬件设计总框图 3 3.1.1 主控电路 43.1.2 按键控制扫描模块 53.1.3 数码管显示模块 83.1.4 LED显示模块 93.1.5 扬声器模块 103.1.6 交通灯模块 6 3.2 硬件原理图 12四软件流程框图 12 4.1 主程序流程图 124.2 蜂鸣器流程图 144.3 流水灯程序流程图 154.4 时钟显示流程图 164.5 交通灯控制流程图 17 5 源程序代码及注释 336 课程设计体会 347 参考文献 35一、课程设计目的和功能单片机原理及应用课程设计是一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。在课程设计过程中,在教师指导下,运用工程的方法,通过一个简单课题的设计练习,其目的使学生初步体验单片机应用系统的设计过程、设计要求、完成工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题。 通过课程设计,应能加强学生如下能力的培训:(1) 独立工作能力和创造力;(2) 查阅图书资料,产品手册和各种工具书的能力;(3) 工程绘图的能力;(4) 编写技术报告和编制技术资料的能力(5) 综合运用专业及基础知识,解决实际工程技术问题的能力; 本次工程实践的校内部分主要以单片机为基础,进行单片机软件编程,目的是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件及软件部分,硬件部分已经制作成功,学生只需要掌握其原理和焊接相应的元器件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路还需要进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生的硬件电子电路的分析、判断能力。 软件编程是本次工程实践的重要环节。在为期两周的工程实践中,将占据主要时间,学生要完成的软件编程任务主要包括以下几点: 1)、熟悉Keil C51编程平台及相关编程软件 2)、编写、调试蜂鸣器、继电器动作、方波程序并进行软硬件联调 3)、编写、调试LED流水灯(循环显示)程序并进行软硬件联调 4)、编写、调试键盘扫描子程序并进行软硬件联调 5)、编写、调试数码管动态扫描程序并进行软硬件联调9)、交通灯控制设计二器件介绍 AT89C52:本次课程设计中主要是设计一个以交通灯控制为主的多功能控制系统。该设计中我们主控电路部分采用了单片机AT89C52芯片来实现这些功能。AT89C52是一个低电压,高性能CMOS的8位单片机,片内含8KB的可反复擦写的Flash只读程序存储器和256B的随机存取数据存储器(RAM)。 按键:用于控制数码显示、LED显示、扬声器等模块的工作。通过扫描按键是否按下,来设定各模块的工作情况,使各模块可以在按键的控制下,有序地进行工作。设计中使用单个按键实现单个功能,属于较为简单的控制方式.数码管:设计中采用六位共阳极数码管,共阳极是指其公共端接正极,通过单片机AT89C52的P0口控制其位选和段选,以达到动态显示相应数值的效果。在其位选控制部分,采用了一个9012型三极管,要求当P0口输出低电平时,位选成功。LED(Light Emitting Diode):发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极蜂鸣器:是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。三、硬件电路设计 3.1 硬件设计总框图 主控电路按键控制扫描模块交通灯模块数码管显示模块LED显示模块扬声器模块原理说明: 本电路以单片机AT89C52为主控电路,分别连接按键控制扫描模块、扬声器模块、LED显示模块、数码显示模块、交通灯模块。首先,按键扫描模块的四个按键分别用来控制数码显示、LED显示和扬声器工作,P1口作为输出口,用来控制LED的亮灭,要使其亮只需要让P1.0-P1.7口保持低电平就可以使8个灯亮起来。同时通过P2.3端控制蜂鸣器发生,当P2.3输出低电平时候使蜂鸣器发出声音,按下按键1时使蜂鸣器发声。P0口用来控制数码管段选和位选,以显示相应的数值。在其位选控制部分,采用了9012型的三极管,要求当对应端口输出低电平时,位选成功,使得该位选的数码管亮,数码管显示时分通过按键3控制。最后通过按按键4实现交通灯控制的功能。3.1.1 主控电路 本次课程设计中主要是设计一个以交通灯控制为主的多功能控制系统。该设计中我们主控电路部分采用了单片机AT89C52芯片来实现这些功能,AT89C52是一个低电压,高性能CMOS的8位单片机,片内含8KB的可反复擦写的Flash只读程序存储器和256B的随机存取数据存储器(RAM)。其引脚如下图所示: 图1.AT89C52引脚图VCC:供电电压。GND:接地。P0口(P0.0-P0.7):P0口来输出数码管位选及段选数据,以控制相应数码管显示相应数值。P1口 (P1.0-P1.7):P1口来控制LED的亮灭。P2口 (P2.0-P2.7):使能相应的模块功能;wela(P2.7):控制数码管位选;dula(P2.6 ):控制数码管段选。 P3口 (P3.0-P3.7):P3.0为RXD(串行输入口),P3.1为TXD(串行输出口),P3.2为/INT0(外部中断0),P3.3为/INT1(外部中断1),P3.4为T0(记时器0外部输入),P3.5为T1(记时器1外部输入),P3.6为/WR(外部数据存储器写选通),P3.7为/RD(外部数据存储器读选通)。 XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义。3.1.2 按键控制扫描模块 按键用于控制数码显示、LED显示、扬声器等模块的工作。通过扫描按键是否按下,来设定各模块的工作情况,使各模块可以在按键的控制下,有序地进行工作。设计中使用单个按键实现单个功能,属于较为简单的控制方式. 图2.按键输入电路在多功能系统设计的实验中中我们使用四个按键分别与单片机的P3.4、P3.5、P3.6、P3.7相连,按键1控制蜂鸣器发声、按键2控制LED流水灯、按键3控制数码管显示,按键4交通灯。通过按下相应的按键来处理相应的程序。3.1.5 数码管显示模块设计中采用六位共阳极数码管,共阳极是指其公共端接正极,通过单片机AT89C52的P0口控制其位选和段选,以达到动态显示相应数值的效果。在其位选控制部分,采用了一个9012型三极管,要求当P0口输出低电平时,位选成功。 图5.数码管显示电路硬件电路中,数码管显示的小时、分、秒,通过键1选择,键2、键3调整。数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5840根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码 驱动器进行驱动,增加了硬件电路的复杂性。 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。3.1.4 LED显示模块 LED(Light Emitting Diode),发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个“P-N结”。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。而光的波长也就是光的颜色,是由形成P-N结的材料决定的。 图6. LED显示电路 本次设计中通过按键2来控制其流水显示,打开电源后按下按键2流水灯模块有效。由于电路中LED为共阳极,故控制流水灯显示的P1口应为低电平时才有效。从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVCA,A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。3.1.3 扬声器模块扬声器模块通过按键1来实现。要求扬声器能够发出连续,断续的声音及音乐,我们可以选择一个蜂鸣器来实现这些功能。 图7. 扬声器电路 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。下面我们以电磁式蜂鸣器为例来说明它的工作原理:电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声,当输出高电平时,三极管截止,蜂鸣器的两引脚间的直流电压接近于0V,没有电流流过线圈,蜂鸣器不发声;当输出低电平时,三极管导通,使蜂鸣器的两个引脚间获得将接近+5V的直流电压,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制IO口输出的电平来控制蜂鸣器是否发出声音,实现各种可能音响的产生。在这个设计中是通P2.3口控制其发声的。由于P2.3与ds1302是连在一起的,当P2.3口输出低电平时蜂鸣器发出声响。故只要ds1302工作,就可以设定使扬声器发出声音。3.1.6交通灯 3.2 硬件原理图四,软件流程框图 4.1. 主程序流程图YYYYP1口置初值0F0H调用蜂鸣器发声程序调用LED显示子程序调用交通灯控制程序KEY1按下?KEY2按下?KEY3按下?KEY4按下?调用数码管显示程序开始N 4.2 蜂鸣器流程图NY开始循环时间的初值设置P2.3端口输出设置延时0.2sP2.3端口取反延时0.2s 循环结束?返回主程序 4.3 流水灯程序流程图YY开 始循环初始化表头首指送地址指针将寄存器A清零NN返回主程序表中花样送A显示并延时花样是否结束?到花样结束标志?4.5Y开始扬声器预响时间设置DS1302实时时间读取两时间是否相同?扬声器发声N延时关闭扬声器 作息时间控制的设计是比较简单的,其基本思路是我们设置扬声器的预响时间,然后通过DS1302实时时间的读取与预响时间做比较,如果两者相同那么扬声器发声,如果两者不相同那么返回DS1302实时时间继续读取,直到与扬声器预响时间相同扬声器发声,然后通过延时关闭扬声器。交通灯流程图开始信号灯初始设置信号灯初始区设置东西绿灯亮南北红灯亮软件延时35s熄灭东西绿灯,点亮东西红灯东西红灯亮,南北绿灯亮软件延时30s重新开始下一个周期软件延时0.5s软件延时5sR是否等于0返回YN五 源程序代码及注释主程序清单:#include #include #defineuint unsigned int #defineuchar unsigned charsbit P32=P32;sbit P33=P33;sbit key1=P34;sbit key2=P35;sbit key3=P36;sbit key4=P37;sbit dula=P26;sbit wela=P27;sbit fmq=P23;uint shu;uchar xianshi,xianshi2;uchar aa,bb,cc,dd;uchar code tablewe=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/void Delay(unsigned int i);/void delayms(uint z);void init()/初始化函数shu=0;xianshi=30;xianshi2=35;aa=3;bb=0;cc=3;dd=5;P0=0xff;P1=0;TMOD=0x01; /用定时器0方式1EA=1; /打开中断ET0=1;/打开定时器0中断TL0=15536/256;TH0=15536%256;EX0=1;/外部中断0EX1=1;/外部中断1IT0=0;/外部中断0电平触发IT1=0;/外部中断1电平触发PX1=1;/设定外部中断1为高优先级void delayms(uint z)uint x,y;for(x=z;x0;x-) for(y=110;y0;y-);void Delay(unsigned int i)/延时程序 unsigned int j;for(;i0;i-)for(j=0;j60;j+);void display(uchar a,uchar b,uchar c,uchar d)wela=1;P0=0xfe;wela=0;dula=1;P0=tablea; /北十位dula=0;Delay(2);wela=1; P0=0xfd;wela=0;dula=1;P0=tableb; /北个位 dula=0;Delay(2);wela=1; P0=0xfb;wela=0;dula=1;P0=tablec; /西十位 dula=0;Delay(2);wela=1;P0=0xf7;wela=0;dula=1;P0=tabled; /西个位 dula=0;Delay(2);void timer0() interrupt 1 using 1 TH0=(65536-50000)/256;TL0=(65536-50000)%256;shu+;if(shu%20=0) xianshi-;xianshi2-; aa=xianshi/10;bb=xianshi%10;cc=xianshi2/10;dd=xianshi2%10; if(shu=600)P1=0xf5;/南北黄亮,东西依然红灯xianshi=5;if(shu=700)P1=0xDE;/南北亮红灯,东西绿灯xianshi=35;xianshi2=30;if(shu=1300)P1=0xee;/东西亮黄灯,南北红灯xianshi2=5; if(shu=1400)/再过5s返回 shu=0;xianshi=30;xianshi2=35; P1=0xf3;/点亮南北绿灯,东西红灯void inter0() interrupt 0 using 2 /南北方向绿灯P0=0xff;P1=0xf3;/南北绿 东西红while(P32=0); P1=0xDE; xianshi=30; shu=700; aa=3; bb=0; cc=3; dd=5;void inter1() interrupt 2 using 3 /东西方向绿灯 P0=0xff;P1=0xDE;/ 东西绿 南北红 while(P33=0);P1=0xf3;xianshi=30;shu=0; aa=3; bb=5; cc=3; dd=0;/蜂鸣器void ka() loop1:fmq=1;if(key1=0) delayms(200); if(key1=1) while(1) fmq=0;if(key1=0) delayms(200); if(key1=1) goto loop1; /流水灯void kb() uchar a;loop2:P1=0xff;if(key2=0) delayms(200); if(key2=1) a=0xfe;while(1) P1=a;delayms(100); a=_crol_(a,1); if(key2=0) delayms(200); if(key2=1) goto loop2; /数码管void kc() uchar numdu,numwe; numdu=0;numwe=0; loop3:wela=1;P0=0xff;wela=0;if(key3=0) delayms(200); if(key3=1) while(1)if(numwe=6)numwe=0;wela=1; P0=tablewenumwe;wela=0;numwe+;if(numdu=6)numdu=0;dula=1;P0=tablenumdu;dula=0;numdu+;delayms(500);if(key3=0) delayms(200); if(key3=1) goto loop3; /交通灯void kd() loop4: TR0=0;init(); wela=1;P1=0xff;if(key4=0)delayms(200);if(key4=1)wela=0;TR0=1;/启动定时器0 P1=0xff; P1=0xf3;/点亮南北绿灯,东西红灯 while(1) display(aa,bb,cc,dd); if (key4=0) delayms(200); if(key4=1) goto loop4; /主函数void main()key1=1;key2=1;key3=1;key4=1; while(1) while(!key1)ka(); while(!key2)kb();while(!key3)kc();while(!key4)kd(); 六、调试情况及小结 6.1 硬件调试硬件调试分为静态调试和动态调试,对于硬件调试而言,只要认真焊接,硬件一般不会出现什么问题的。没有出现什么问题。用所给的调试程序,调试结果很好,各模块都能正常工作。静态调试一般采用的工具是万用表,其是在用户系统未工作时的一种硬件检测。 动态调试是在用户系统工作的情况下发现和排查错误的一种硬件检测。调试步骤是:首先把电路分成若干模块,调式过程中与该模块无关的元件可以不加考虑,这样可把故障限定在一定的范围内;故障清除后,把各个模块合在一起进行联调,即可完成整个硬件调试工作。 6.2 软件调

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论