资源描述
单片机原理及应用课程设计报告交通灯设计专 业:班 级:姓 名:学 号:2013年5月1 .课程设计目的1.1 巩固和加深对单片机原理和接口技术知识的理解;1. 2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3 学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4 掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5 能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能 用计算机绘制电路图和流程图。2 .课程设计要求1)设计一个十字路I1交通灯控制器。用单片机控制LED灯模拟指示。模拟东西方向 的十字路口交通信号控制情况。东西向通行时间为80s,南北向通行时间为60s,缓冲时 间为3so2)黄灯亮时,要求每秒闪亮一次。3)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进 行显示(采用计时的方法)。4)当有突发事情发生时(如有救护车通过时),可通过按键将各个路口设置成红灯,只让救 护车通过。3 .硬件设计3.1 设计思想单片机选型:AT89C523sz都引记J4mm 平个鸿平汩冶冶冶陪ZCd 02 部 贪& ua DSC os 3d zsf awrzd B Nluysdd ;d : ;dd:MddddldAT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash 只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、 非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储 单元,AT89c52单片机在电子行业中有着广泛的应用。AT89c52具有以下标准功能:8k字 节Flash, 256字节RAM, 32位I/O 口线,看门狗定时器,2个数据指针,三个16位 定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路,8位 微控制器8K字节在系统可编程Flash ROMoPO : P0 口是一个8位漏极开路的双向I/O I Io作为输出口,每位能驱动8个TTL 逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入端用。在访问外部数据存储器或程序存储器时,P0 口被分时转换地址(低8位)和数据总 线更用,在访问期间激活内部上拉电阻。在Flash编程时,PO II接收指令字节,而在程序校验时,输出指令字节,校验时, 要求外接上拉电阻。P1 口: P1 口是一个具有内部上拉电阻的8位双向I/O I I, P1输出缓冲器能驱动 4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为 输入口使用。作为输入使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会 输出一个电流(IIL)。此外,P1.0和PL 2分别作定时器/计数器2的外部计数输入(PL0/T2)和时器/计 数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1 口接 收低8位地址字节。P1端口引脚号第二功能:P1.0 T2 (定时器/计数器T2的外部计数输入),时钟输出Pl. 1 T2EX (定时器/计数器T2的捕捉/重载触发信号和方向控制)P2 口: P2是一个带有内部上拉电阻的8位双向I/O D, P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口 P2写“1”,通过内部的上拉电阻把 端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引 脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令) 时,P2 口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVXRI 指令)时,P2 口输出P2锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号。P3 口: P3 口是一组带有内部上拉电阻的8位双向I/O PL P3 口输出缓冲级可驱 动(吸收或输出电流)4个TTL逻辑门电路。对P3 口写入“1”时,它们被内部上拉 电阻拉高并可作为输入端口。此时,被外部拉低的P3 门将用上拉电阻输出电流(IIL)。P3 口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能。P3I亦作为AT89s52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3 口也接收一些控制信号。P3端口引脚第二功能:P3. 0 RXD (串行输入口)P3. 1 TXD (串行输出口)P3. 2 INTO (外中断 0)P3. 3 INT1(外中断 1)P3.4 T0 (定时/计数器0)P3.5 T1 (定时/计数器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)RST一一复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单 片机兔位。ALE/PROG一一当访问外部程序存储器或数据存储器时,ALE (地址锁存允许)输出脉 冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的 脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存 储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲 (PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止 ALE操作。该位置位后,只有一条MOVX和M0VC指令才能将ALE激活。此外,该引脚会 被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN一一程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲, 在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP外部访问允许,欲使CPU仅访问外部程序存储器(地址为OOOOH-FFFFH), EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,更位时内部会锁 存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件 是使用12V编程电压Vpp。3. 2系统原理图3. 3复位电路:上电+按钮1uF 3fRST1k29R2 30 1k APSEN ALE EAP1.0P1.1P1.2。图中,上电时,接通电源,电容器C相当于瞬间短路,+5V加到了 RST/VPD端,该高电 平使8051全机复位。若运行过程中,需要程序从头执行,只需按动按钮开关,则直接把+5V加 到了 RST八TD端,从而复位.显然,该电路即可以上电更位,也可以手动复位,是常用复位电 路之一。si T8KXIPXZCC ,3.4数码管显示:7SEG-MPX2-CC5此处采用的数码管时共阴极数码管,G、F、E、D、C、B、A七个端口是输入端口,对其各 位进行赋值,置位则亮,复位则灭,用此来显示出相应的数字;1、2两端II用来控制高位和低 位的选通显示,只要对端II置位,便可以选择该端口,并对其所代表的位进行赋值,显示。3. 5发光二极管显示每个路I I都采用了三个LED灯来显示,分别代表了红黄绿三种灯,来模拟路II交通灯的变换。3 . 6键盘:独立键盘+中断采用开关来控制进入中断,可以在路口出现紧急情况时,拉动开关,来使得红绿灯发生相 应的改变,己处理紧急情况下的车辆通行。4 .软件设计4. 1总体流程图4.2紧急中断子程序流程图4. 3循环流程控制思路:5. 4源程序#include#include#define unit unsigned mt#define uchar unsigned char uchar temp.aa.mi;sbit rn=P2A0;sbit nb=P2Al;sbit gn=P2A2;sbit rw=P2 八3;sbit dx=P2A4;sbit gw=P2 八 5;sbit shi=P3A6;sbit ge=P3八7;/*对要使用的单片机各个口进行定义*/bit flag=O;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71);/*将数字0123456789的16进制数定义成数组用以显示*/void delay(umt z);void disp(uint n);void nb_flash(void);void dx_flash(void);void xintOQ;void tiinerO();void LED_ONQ;void xintlQ;void LED_OFF();void nanbei();void dongxiO;/*将所使用的子函数定义*/void main。 (umt num;num=0;aa=0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=l;TR0=l;EX0=l;IT0=0;EX1=1;IT1=1;/*中断初始化*/10naiibeiQ;nb_flash();dongxiQ; dx_flash();)void delay(umt z)umt x,y;fbr(x=z;x0;x-)for(y=U0;y0;y-);)/*主函数中显示部分*/*延时子函数*/void tiiiierO() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa+;if(aa=18)aa=0;flag=l;)void disp(uint n)while(lflag)ge=0;P0=tablen%10;delay(50);shi=l;ge=l;slii=0;PO=tableivlO;delay(50);shi=l;ge=l;if(flag=l) flag=O;)void nanbei()/*显示子函数*/*南北方向的红绿灯和数码管显示子函数*/ uiiit num;num=60;disp(num);wlule(num0) num;P2=0xde;disp(num); )void dongxi()/*东西方向的红绿灯和数码管显示子函数*/ uiiit num;num=80;wlule(num0) P2=Oxf3;disp(num);num-; )void nb_flash(void)/*南北方向的黄灯和数码管显示子函数*/(uint a;fbr(a=3;aO;a) P2=Oxdd;nb=l;delay(lOO);nb=O;disp(a);)void dx_flash(void)/*东西方向的黄灯和数码管显示子函数*/(uint a;fbr(a=3;aO;a) P2=0xeb;dx=l;delay(100);dx=0:disp(a);) )void xintOQ mtenupt 2/* 中断定义*/TH0=(65536-50000)/256;TL0=(65536-50000)%256;LED.ONQ;产开关控制灯的子函数*/void LED_ON() uiiit b;rn=0;rw=0; gn=l; gw=l; nb=l; dx=l;fbr(b=5;bO;b) ( ge=O;shi=l; PO=tableb;delay(lOOO); ge=l;shi=l; xeturn;5 .调试运A5.1 正常运行状态5.2中断运行状态5.3黄灯闪烁状态6 .设计心得体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重 要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的口新口异,单片机已 经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世 纪的大学来说掌握单片机的开发技术是十分重要的。这次的单片机课程设计大概用了一周的时间,在这一周的时间当中,虽然开始遇到了很多 的困难,但是由于合理地进行设计安排,分工合作,并各自查阅了相关的资料,最后在大家共 同努力下我们顺利地完成了本次单片机课程设计,同时也学到了很多东西。回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践, 在整整一星期的口子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可 以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。例如我们在设计 数码管显示的时候,刚开始的时候,由于对数码管引脚的不熟悉,我们都无法让数字显示,后 来发现时十位和个位的置位、兔位发生了问题,我们对此进行了修改,可以正确的显示出十位 及个位的数值,但是数字的显示不稳定,不停的跳动,我们为此查阅了很多的资料,但还是未 能解决,最后我们不停地对程序进行修改,终于发现了问题所在,在显示子程序上存在缺陷未 能快速的切换对十位、个位的置位和复位,经过这样的修改,终于可以完美的显示时间了。我 们也更好地掌握了对数码管的使用,这都是课堂上学不到的知识。这次的单片机课程设计是通过实践操作和理论相结合,提高动手实践能力,提高科学的思 维能力。与此同时,我们也对分工合作有了进一步的认识,只有通过合理的分工合作,我们们 才能够在短短一周的时间内完成设计任务,相信这对以后在社会上工作和学习会有很多帮助, 让我们能更好的进入工作状态。最重要的是,这次课程设计也增加了我们对问题的研究和探讨, 们以后的学习中会有更多的帮助。单片机为我们的主要专业课之一,对我们还是很有帮助的,课程设计也是为我们以后的工 作提前进行了一次练手,也是我们学习生活之中少有的一次自己探索、研究,发现问题、解决 问题的机会。当然要做好一个课程设计也不是很简单的,我认为有以下几步:(1)在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪 些资源;(2)要有一个清晰的思路和一个完整的的软件流程图,善于将大的程序段缩小为每个子函 数来实现;(3)在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计 的必经之路;(4)要养成注释程序的好习惯,写程序是应该思路清晰,结构明了,应该让人一看就能明 白你的思路,方便资料的保存和交流;(5)我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题 的;在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不 够牢固。我们们通过杳阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在 搞不明白的问题就会及时请教老师,或者与其他小组成员讨论,共同解决,使自己学到了不少 知识,也经历了不少艰辛,但收获同样巨大。通过这次课程设计我们也发现了自身存在的不足 之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努 力才得以解决。通过这次课程设计使我更加懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的, 只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正将一个东西学好学透, 从而提高自己的实际动手能力和独立思考的能力。我想这对于我今后的学习生活和工作都会是 有很大帮助的!7 .参考书目11 .肖金球.单片机原理与接口技术;【2】.江志红.51单片机技术与应用系统开发案例精选;3 .周润景.基于PROTEUS的51单片机设计与仿真;【4】.王守中.51单片机开发入门与典型实例;5 .张齐.朱宁西.单片机系统设计与开发;【6】.周立功单片机开发网;【7】.天津锐志单片机开发网;8 . ATMEL公司AT89S52单片机中文PDF资料;
展开阅读全文