您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 单片机整套实验及程序(交通灯_跑马灯等)
1实验1跑马灯实验一、实验目的初步学会ProteusISIS和uVision2单片机集成开发环境的使用;初步掌握采用汇编语言与C语言开发单片机系统的程序结构;掌握80C51单片机通用I/O口的使用;掌握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法。二、实验设备及器件硬件:PC机,HNIST-1型单片机实验系统软件:ProteusISIS单片机仿真环境,uVision2单片机集成开发环境三、实验内容编写一段程序,采用P1口作为控制端口,使与P1口相接的四个发光二极管(D1、D2、D3、D4)按照一定的方式点亮。如点亮方式为:先点亮D1,延时一段时间,再顺序点亮D2……D4,然后又是D4……D1,同时只能有一个灯亮;然后每隔一段时间一次使相邻两个灯亮,三个灯亮,四个灯亮,最后闪烁三次,接着循环变化。基于ProteusISIS仿真环境完成上述功能的仿真。基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。四、实验原理图图3.1跑马灯实验电路原理图电路原理图如上图3.1所示,AT89S52的P1.0~P1.3控制4个发光二极管,发光2二极管按照一定次序发光,相邻发光二极管的发光时间间隔可以通过定时器控制,还可以通过软件延时实现。五、软件流程图与参考程序主程序流程图如下:参考程序#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintucharaa,num,speed,flag;ucharcodetable[]={0x0e,0x0d,0x0b,0x07};ucharcodetable1[]={0x0a,0x05,0x09,0x06};ucharcodetable2[]={0x0c,0x09,0x03,0x08,0x01,0x0e,0x0c,0x08,0x00};voiddelay(uintz)//延时函数{uintx;uchary;for(x=z;x0;x--)for(y=200;y0;y--);}voidinit()//条件初始化函数{flag=0;speed=10;//控制跑马灯流水速度TMOD=0x01;//中断方式开始初始化(定时器、中断、标志位设置)Flag=1?流水灯操作结束YN3TH0=(65535-50000)/256;TL0=(65536-50000)%256;//初值EA=1;//打开总中断ET0=1;//打开外中断0TR0=1;}voidmain(){init();//调用初始化函数while(1){if(flag){delay(2000);//调用延时函数for(num=0;num4;num++)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=3;num0;num--)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=0;num4;num++)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=3;num0;num--)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=0;num6;num++)//两个,三个,四个跑马灯依次闪烁{P1=table2[num];delay(2000);4}for(num=0;num5;num++)//闪烁5次{P1=0xff;//全暗delay(2000);P1=0X00;//全亮delay(2000);}speed=speed-3;//变速if(speed==4){speed=10;}}}}voidtimer0()interrupt1//中断函数{TH0=(65535-50000)/256;TL0=(65536-50000)%256;aa++;if(aa==speed){aa=0;flag=1;}}六、实验思考题请用汇编指令完成本实验内容,深刻理解汇编语言程序设计结构。在本实验中,I/O口作为输出口使用,如果把I/O口的某些口线作为输入口使用时,如何获得输入引脚状态?请举例说明。在画软件流图时,各种不同形式方框意义是否相同?请举例示之。请简要叙述中断服务程序功能并画出其流程图。在采用I/O口作为输出口时要考虑哪些因素?如果负载变化,如何设计单片机与负载之间的接口电路?5实验2交通灯实验一、实验目的进一步掌握ProteusISIS和uVision2单片机集成开发环境的使用;进一步掌握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法掌握单片机的I/O口编程使用。二、实验设备及器件硬件:PC机,HNIST-1型单片机实验系统,USB下载线一根、连接线若干软件:ProteusISIS单片机仿真环境,uVision2单片机集成开发环境三、实验内容编写一段程序,实现用单片机的I/O口控制12个发光二极管(四组,每组有红绿蓝三个发光二极管),使发光二极管按照一定的规则模拟交通灯功能。基于ProteusISIS仿真环境完成上述功能的仿真。基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。四、实验原理图3.2交通灯实验原理图用单片机的IO口控制4组红绿蓝共12个发光二极管,使发光二极管按照一定规则与次序发光与闪亮以实现模拟交通灯的功能。假设初始状态为:(南北通行状态)南北绿灯、东西红灯(25s);后转为过度状态:南北黄灯、东西红灯(5s);再转为东西通行状态:东西绿灯、南北红灯25(s)。再转为过渡状态:东西黄灯、南北红灯(5s),然后循环往复。硬件原理图如上图3.2所示。由于发光二极管的导通电压为1.7V,所以在电源与6二极管之间加一个电阻,目的是保护二极管;实验中利用定时计数器实现1S的定时,然后在此基础上实现所需要的定时时间。五、软件流程图与参考源程序软件设计思想:在编程时,我们一般把一个独立的功能设计成一个子程序或者说函数。对于不同的设计者而言,对软件功能的划分角度不同,对应的函数功能也存在差异。图3.3软件结构图参考源程序如下:#includereg52.h//头文件#defineuintunsignedint#defineucharunsignedchar//定义下方便使用sbitkong=P1^4;//位声明数码管锁存控制端ucharcodetable[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//数字0-9编码uinttt,temp=0;/************************************************延时函数**************************************************/voiddelay(uintx){开始南北绿灯东西红灯25南北黄灯东西红灯5东西绿灯南北红灯25东西黄灯南北红灯5结束定时器7uchari,k;for(i=0;ix;i++)for(k=0;k100;k++);}/**************************************************初始化函数***************************************************/voidinit(){temp=0;tt=0;TMOD=0x01;//定时器工作方式TH0=(65536-50000)/256;TL0=(65536-50000)%256;//装初值EA=1;//开总中断ET0=1;//开定时器中断TR0=1;//启动定时器中断}/*************************************************数码管显示函数*************************************************/voiddisplay(uintx1){uchari,c;uintcod[4];cod[3]=x1/1000;cod[2]=x1%1000/100;cod[1]=x1%1000%100/10;cod[0]=x1%10;//求个数码管的值c=0x01;for(i=0;i4;i++){P1=c;//数码管的显示选择P0=table[cod[i]];//送要显示的值kong=1;//打开锁存c=c1;//左移一位选择下一个数码管kong=0;//关闭锁存delay(10);}}/****************************************交通灯驱动函数8*****************************************/voidjiaotong(){//uintt=0;if(temp==0)temp=60;//给temp装值,也即是交通灯循环一次要的时间if(temp30){if(temp=35){display(temp-30);P2=0Xf5;//南北黄灯、东西红灯(5s)}else{display(temp-30);P2=0xdd;//南北绿灯、东西红灯(25s)}}else{if(temp=5){display(temp);P2=0xee;//东西黄灯、南北红灯(5s)}else{display(temp);P2=0xeb;//东西绿灯、南北红灯25(s)}}if(tt==20)//判断时间是否过了1s{tt=0;temp--;//倒计数}}/************************************************主函数************************************************/voidmain(){init();//初始化函数调用while(1)//主循环{9jiaotong();//交通灯函数调用}}//中断函数voidtimer0()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;//重新装初值tt++;}六、实验思考题如何实现扩充功能,实现救护车优先通过十字路口?请叙述硬件设计与软件设计原理。在利用单片机片内定时器实现精确定时时,是否会产生误差?如果存在误差请分析误差产生原因以及减小误差方法。10实验3数码管动态显示实验一、实验目的掌握数码管静态显示与动态显示原理以及数码管与单片机的接口原理。学会利用单片机的I/O口实现数码管的动态显示。二、实验仪器硬件:PC机、HNIST-1型单片机实验系统软件:ProteusISIS单片机仿真环境,uVision2单片机集成开发环境三、实验内容编写一段程序,采用P1口某些口线作为4位数码管的位控制端;采用P0口输出段码,实现4位数码管的测试(让4位数码管同时输出0~F);编写程序,让4位数码管循环显示1—2—3—4(即让第一位显示”1”,然后第一位熄灭,第二位显示”2”……)四、实验原理使用LED数码显示器时,要注意区分数码管两种不同的接法(共阴LED和共阳LED),为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段,因此为LED显示器提供的编码正好是一个字节。八段LED数码管显示器原理与结构如下图3.4所示。对于共阴接法,要使某位LED显示相应数码,则使LED的对应段点亮,则对应控制电平为高,如:要显示数字”0”,如果a~dp分别受P0.7~P0.0控制,则LED的a,b,c,,d,e,f需点亮,对应驱动电平为”1”,其他为”0”,则对应数码”0”的段码为”FCH”。共阴极共阳极图3.4八段LED数码管原理与结构图LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段码必须需要一个数据锁存器锁存,当送入字形码后,显示字形可一直保持
本文标题:单片机整套实验及程序(交通灯_跑马灯等)
链接地址:https://www.777doc.com/doc-226651 .html