资源描述:
《交通灯实验报告——单片机.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、二、用51单片机设计交通灯、彩灯控制器一、可实现功能:1)通过51单片机,在面包板上模拟交通红绿灯。分为主干道和支干道,每条道上安装红、绿、黄三种颜色的灯,并用两位八段数码管显示主干道三种灯亮的时间,由程序控制自动循环,红灯40秒,绿灯35秒,黄灯5秒;2)用单片机的外部中断0的产生来控制六路彩灯,此处只设计了四种花型。二、电路原理图:三、源程序如下:#include"reg51.h"#includevoiddisplay(unsignedintdigital);voiddelay(unsignedinttime);voi
2、dcolour();unsignedshu[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};Unsignedled[41]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xdf,0xcf,0xc7,0xc3,0xc1,0xc0,0xc1,0xc3,0xc7,0xcf,0xdf,0xff,0xf3,0xe1,0xc0,0xe1,0xf3,0xff,0xde,0xcc,0xc0,0xcc,0xdf,0xff,
3、0xdb,0xed,0xf6,0xed,0xdb,0xff,0xc0,0xff,0xc0,0xff,0xc0,0xff};sbita=P2^6;sbitb=P2^7;sbitG=P2^0;sbitY=P2^1;sbitR=P2^2;sbitg=P2^3;sbity=P2^4;sbitr=P2^5;intflag=0;//全局变量,当它为1时显示彩灯,当它为0时,显示交通灯#definestate_1G=0;Y=1;R=1;g=1;y=1;r=0//主干道绿,支干道红#definestate_2G=1;Y=0;R=1;g=1;y=1;r=0//主
4、干道黄,支干道红#definestate_3G=1;Y=1;R=0;g=0;y=1;r=1//主干道红,支干道绿#definestate_4G=1;Y=1;R=0;g=1;y=0;r=1//主干道红,支干道红voidmain(void){unsignedinti;EA=1;//首先开启总中断EX0=1;//开启外部中断0IT0=1;//设置触发方式为下降沿触发while(1){while(flag==0){state_1;for(i=35;i>0;i--)delay(1);state_2;for(i=5;i>0;i--){delay(i);y1
5、=~y1;}state_3;for(i=20;i>0;i--)delay(i);state_4;for(i=5;i>0;i--){delay(i);y2=~y2;}}while(flag==1)colour();}}//显示子程序,实现用两位数码管显示灯亮的时间voiddisplay(unsignedintdigital){unsignedintk;unsignedintge=digital%10,shi=digital/10;//将十位与个位分离for(k=0;k<30000;k++){a=1;b=0;P0=shu[ge];P0=0;a=0;
6、b=1;P0=shu[shi];P0=0;}}//实现彩灯控制voidcolour(){P1=0xff;P3=0x00;P2=0xff;while(1){unsignedintj;for(j=0;j<41;j++)//循环程序演示四种花型{P2=led[j];delay(1);}delay(5);}}//中断函数voidkey_scan()interrupt0//关键字"interrupt",这是C语言的中断函数表示法,,单片机有6个中断口,外部中断0的优先级最高,在程序里我们只用外部中断0{flag++;if(flag==2)flag=0;}
7、//延时程序voiddelay(unsignedinttime)//参数time大小决定延时时间长短{unsignedintj,k;time=time*5;for(j=0;j