课程设计报告基于单片机原理的交通信号灯设计小组成员学号指导教师专业2013年06月目录1.课题名称........................................................................32.设计任务.........................................................................32.1基本要求…………………................................32.2创新部分………………………………............33.系统设计..........................................................................33.1工作原理……………………………………33.2电路原理图…………………………………44.芯片的选择与简介...........................................................44.1MCS-51单片机内部结构…………………44.2MCS-51的引脚说明………………………..55.硬件设计..........................................................................65.1显示部分………………………………...........65.2信号灯部分……………………………...........76.软件设计………………………….................................76.1流程图…………………………………..........76.2主程序…………………………………..........87.个人总结……………………………………………14一.课题名称:基于单片机原理的交通信号灯设计一.设计任务2.1基本要求:1.运用所学的单片机知识设计一个交通灯控制系统。2.上电的时候南北方向的红灯亮60秒;东西方向的绿灯亮60秒,接下来东南西北都亮黄灯,亮30秒。再接下来东西方向的红灯亮20秒;南北方向的绿灯亮20秒。如此循环。2.2创新部分1.各种信号灯所亮的时间由数码管显示出来。2.在出现问题的时候(红灯全亮),按键中断停止。三.系统设计3.1工作原理设置交通灯的初始时间,数码管的段码依次用P2口不同的口线,用单片机来控制各种信号灯的燃亮时间,通过单片机的P3和P1口控制。3.2电路原理图四.芯片的选择与简介4.189TC51单片机内部结构MCS-51单片机是在一块芯片中集成了CPU,RAM,ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部件。MCS-51单片机内包含下列几个部件:◆一个8位CPU;◆一个片内振荡器及时钟电路;◆4K字节ROM程序存储器;◆128字节RAM数据存储器;◆两个16位定时器/计数器;◆可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;◆32条可编程的I/O线(四个8位并行I/O端口);◆一个可编程全双工串行口;◆具有五个中断源、两个优先级嵌套中断结构。4.2MCS-51的引脚说明:89TC51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:如下图所示。五.硬件设计5.1显示部分系统要求南北和东西方向的信号灯时间不一样,所以就利用单片机的p0和p3口来做数码管的段码驱动,东西方向和南北方向的位线可以公共来使用,可以节约单片机的口线。数码管可以使用共阴数码管,电路图如下图所示:5.2信号灯部分设计利用单片机的P3的四个口和P18口来驱动和控制各种信号灯的燃亮和燃亮时间,在实际中,交通灯的信号灯需要用高电压控制,在这里我们只是模拟一下它的控制信号,所以我们就只用单片机的信号引脚直接来控制发光二极管,电路图见下图。六.系统软件设计6.1软件流程图6.2主程序:#includereg51.h#defineucharunsignedchar#defineuintunsignedintsbitD1=P3^7;sbitD2=P3^3;sbitD3=P3^1;sbitD4=P1^2;sbitD5=P1^1;sbitD6=P1^0;开始系统初始化设置时间初值初值送缓冲单元初值减到“0”?返回图6.1主程序流程调用显示子程序初值自减拆分程序YNsbitD7=P1^5;sbitD8=P1^4;sbitD9=P1^3;sbitD10=P3^0;sbitD11=P1^7;sbitD12=P1^6;sbitButton_A=P3^6;uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴段码表0--9charTime_EW;//东西方向倒计时charTime_SN;//南北方向倒计时ucharEW=59,SN=59,EWJ=29,SNJ=29,EWL=19,SNL=19;//程序初始化赋值ucharcount=0;/********************************************************/voiddelay(unsignedchari)//延时ims{unsignedcharj;while(i--){for(j=0;j115;j++);}}/******************************************************/voidDisplay(void){P0=0x08;P2=table[Time_EW%10];delay(2);P0=0x04;P2=table[Time_EW/10];delay(2);P0=0x02;P2=table[Time_SN%10];delay(2);P0=0x01;P2=table[Time_SN/10];delay(2);}/******************T0中断*************************************/voidtime_0()interrupt1{TH0=0x3c;TL0=0xb0;count++;if(count==20){Time_SN--;Time_EW--;count=0;}}voidint0(void)interrupt0{while(Button_A==0){D1=0;D4=0;D7=0;D10=0;//所有都是红灯P2=0;//关数码管}}/******************主程序*******************************/voidmain(){TR0=1;//启动定时器0TMOD=0x01;//定时器工作于方式1TH0=(65536-50000)/256;//定时器赋初值TL0=(65536-50000)%256;EA=1;//CPU开中断总允许ET0=1;//开定时中断EX0=1;//开外部INTO中断IT0=1;//INT0负跳变触发while(1){/*S1*****A道放行*******///S1状态Time_EW=EW;//90sTime_SN=SN;//90swhile(Time_EW=0){D1=1;D2=1;D3=0;D4=0;D5=1;D6=1;D7=1;D8=1;D9=0;D10=0;D11=1;D12=1;Display();}/******A道+30s********/Time_SN=SNJ;//SNJ=29Time_EW=EWJ;//EWJ=29while(Time_EW=0){D1=1;D2=0;D3=1;D4=1;D5=0;D6=1;D7=1;D8=0;D9=1;D10=1;D11=0;D12=1;Display();}/******A道黄灯********//*S3*****B道放行*****///S3状态Time_EW=EW;//60sTime_SN=SN;//60swhile(Time_EW=0){D1=0;D2=1;D3=1;D4=1;D5=1;D7=0;D6=0;D8=1;D9=1;D10=1;D11=1;D12=0;Display();}/******B道黄灯*******/}}七.个人结论通过这次期末设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,特别是中断这一块,为日后成为合格的应用型人才打下良好的基础。我学到了很多,也找到了自己身上的不足。感受良多,获益匪浅。在课程设计的第一天我们便对这次任务进行了规划和分工。在以后的几天中,我们组的成员一起努力,查阅资料、小组讨论、对资料进行分析。当发现问题时,对于程序的调试很重要,所以对整个流程应该要非常熟悉,在写程序时也要细心,养成良好习惯,打括号就成双的打。