您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 交通灯实验报告——单片机
二、用51单片机设计交通灯、彩灯控制器一、可实现功能:1)通过51单片机,在面包板上模拟交通红绿灯。分为主干道和支干道,每条道上安装红、绿、黄三种颜色的灯,并用两位八段数码管显示主干道三种灯亮的时间,由程序控制自动循环,红灯40秒,绿灯35秒,黄灯5秒;2)用单片机的外部中断0的产生来控制六路彩灯,此处只设计了四种花型。二、电路原理图:三、源程序如下:#includereg51.h#includeintrins.hvoiddisplay(unsignedintdigital);voiddelay(unsignedinttime);voidcolour();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,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//主干道黄,支干道红#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;i0;i--)delay(1);state_2;for(i=5;i0;i--){delay(i);y1=~y1;}state_3;for(i=20;i0;i--)delay(i);state_4;for(i=5;i0;i--){delay(i);y2=~y2;}}while(flag==1)colour();}}//显示子程序,实现用两位数码管显示灯亮的时间voiddisplay(unsignedintdigital){unsignedintk;unsignedintge=digital%10,shi=digital/10;//将十位与个位分离for(k=0;k30000;k++){a=1;b=0;P0=shu[ge];P0=0;a=0;b=1;P0=shu[shi];P0=0;}}//实现彩灯控制voidcolour(){P1=0xff;P3=0x00;P2=0xff;while(1){unsignedintj;for(j=0;j41;j++)//循环程序演示四种花型{P2=led[j];delay(1);}delay(5);}}//中断函数voidkey_scan()interrupt0//关键字interrupt,这是C语言的中断函数表示法,,单片机有6个中断口,外部中断0的优先级最高,在程序里我们只用外部中断0{flag++;if(flag==2)flag=0;}//延时程序voiddelay(unsignedinttime)//参数time大小决定延时时间长短{unsignedintj,k;time=time*5;for(j=0;jtime;j++)for(k=0;k10000;k++);}四、源程序分析1、在电路设计时我用了共阴极八段数码管来显示时间:unsignedshu[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};数组中十个数分别表示0到9十个数;2、在设计彩灯时,我直接利用交通灯的主干道和支干道的六个灯设计彩灯:unsignedled[48]={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,0xdb,0xed,0xf6,0xed,0xdb,0xff,0xc0,0xff,0xc0,0xff,0xc0,0xff};数组中的48个数共演示了四种花型花型状态编码表如下:序号花型(一)花型(二)花型(三)花型(四)1011111011111110011011011210111100111110000110110131101110001110000001101104111011000011100001101101511110100000111001101101161111100000001111111111117111101000001011110000000811101100001100110011111191101110001110000000000001010111100111100110011111111011111011111011110000000121111111111111111111111111其中输出为零的位为灯亮。3、voiddisplay(unsignedintdigital){unsignedintk;unsignedintge=digital%10,shi=digital/10;//将十位与个位分离for(k=0;k30000;k++){a=1;b=0;P0=shu[ge];P0=0;a=0;b=1;P0=shu[shi];P0=0;}}显示子程序中将时间的十位与个位分离,用a、b来选择数码管将个位与十位分时输出。五、电路分析用单片机设计交通灯和彩灯时,用程序来控制,因此外围电路比较简单。只用一片C51芯片、一个限流电阻、两个电容、一个晶振、发光二极管红黄绿各两个。我用C51的P0口连接数码管的a、b、c、d、e、f、g,用P2口的第6、7位连接数码管的选择端,用于时间的分时输出。用P2口的0-5位控制六个灯的亮灭,当输出位为0时灯被点亮,P3口的第三位连接开关。单片机启动时,显示交通灯,开关第一次合上时,当单片机检测到有中断时,将交通灯转换为彩灯,第二次合上开关,当单片机检测到有中断时,又将彩灯转换为交通灯。六、参考文献往为青程国刚《单片机KeilCx51应用开发技术》陈小忠黄宁赵小侠《单片机接口技术实用子程序》
本文标题:交通灯实验报告——单片机
链接地址:https://www.777doc.com/doc-6447598 .html