单片机实现交通灯控制汇编代码
用单片机控制交通灯源程序代码及流程图

用单片机控制交通灯传统的交通灯控制电路一般由数字电路构成,电路复杂、体积大、成本高。
采用单片机控制交通灯不但可以解决上述问题,而且还具有时间显示功能,非常方便。
下面介绍一种用单片机控制交通灯的方法。
一、硬件硬件电路如附图。
AT89C2051的P1.7~P1.5和P1.3~P1.1直接驱动红、黄、绿灯,利用单片机的串口和二片74LS164串/并转换移位寄存器实现时间显示,七段数码管为共阴管,硬件电路极为简单。
二、软件交通灯有红、黄、绿三种。
红灯亮,停止通行;绿灯亮,允许通行;黄灯亮,作过渡。
红灯亮60秒,绿灯亮55秒,黄灯亮5秒。
每组灯的亮暗状态以2分钟为周期循环,故程序采用主、子程序方式,循环结构。
另外,为了简化电路,红、黄、绿灯采用低电平点亮。
源程序清单如下:ORG0000HSTART:MOVDRTR,#TABMOVSCON,#00HMOVP1,#6CH;点亮红、绿灯MOVR0,#0;R0清零LEFT:INCR0CJNER0,#55,LP0;R0<55,转LP0MOVP1,#6AH;R0=55,点亮红、黄灯LJMPLP1LP0:CJNER0,#60,LP1;R0<60,转LP1MOVP1,#0C6H;R0=60,点亮绿、红灯LJMPRIGHTLP1:LCALLDBDBLCALLDISPLJMPLEFT;20H为1,转LEFTRIGHT:DECR0CJNER0,#5,LP2;R0>0,转LP2MOVP1,#0A6H;R0=5,点亮黄、红灯LJMPLP3LP2:CJNER0,#0,LP3MOVP1,#6CH;R0=0,点亮红、绿灯LJMPLEFTLP3:LCALLDBDBLCALLDISPLJMPRIGHTDBDB:MOVA,R0MOVB,#10DIVABMOVR1,AMOVR2,BRETDISP:MOVA,R2MOVCA,@A+DPTRMOVSBUF,AJNBTI,$;查TI位CLRTIMOVA,R1MOVCA,@A+DPTRMOVSBUF,AJNBT1,$CLRTILCALLDEALYRETDELAY:MOVR3,#09HK1:MOVR4,#100K2:MOVR5,#250K3:DJNZR5,K3DJNZR4,K2KJNZR3,K1RETTAB:DB3FH,06H,5BHDB4FH,66HDB6DH,7DH,07HDB7FH,6FH三.实验电路及连线四.实验说明1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
usb单片机cs51交通灯程序汇编语言

ORG 0000HA_BIT EQU 20H ;用于存放南北十位数B_BIT EQU 21H ;用于存放南北十位数C_BIT EQU 22H ;用于存放东西十位数D_BIT EQU 23H ; 用于存放东西位数TEMP1 EQU 24H ;用于存放第一二南北状态要显示的时间TEMP2 EQU 25H ;用于存放第一二东西状态要显示的时间TEMP3 EQU 26H ;用于存放第三第四南北状态要显示的时间TEMP4 EQU 27H;用于存放第三第四南北状态要显示的时间LJMP MAINORG 0003H ;外部中断0入口LJMP INT0 ;跳转到外部0中断ORG 0013H ;外部中断1入口LJMP INT1 ;跳转到外部1中断INT0: MOV A,P1 ;外部0中断PUSH ACCMOV A,P2 ;中断保护PUSH ACCMOV P1,#0FFH ;清除先前状态MOV P2,#0FFHCLR P1.0CLR P1.4 ;南北通行,东西禁止通行CLR P1.6CLR P2.3JNB P3.2 ,$ ;判断是否还在中断状态POP ACCMOV P2,A ;返回中断前状态POP ACCMOV P1,ACCRETI ;中断返回INT1:MOV A,P1 ;外部1中断PUSH ACC ;中断保护MOV A,P2PUSH ACCMOV P1,#0FFH ;清除先前状态MOV P2,#0FFHCLR P1.2CLR P2.1CLR P1.3 ;东西通行,南北禁止通行CLR P1.5JNB P3.3 ,$ ;判断是否还在中断状态POP ACCMOV P2,A ;返回中断前状态POP ACCMOV P1,ARETI ;中断返回MAIN:ORG 0100H ;初始情况MOV P1,#0FFHMOV P2,#0FFH ;灭所有灯MOV TMOD,#55H ;计数方式方式1MOV IE,#85H ;开中断MOV TEMP1,#20 ;MOV TEMP2,#25MOV TEMP3,#25MOV TEMP4,#20STAR:MOV P1,#0FFHMOV P2,#0FFH ;灭所有灯MOV A,24H ;将显示时间送ACJNE A,#20,T40T ;判断时间,选初始值T20T: ;南北通行要显示的时间为20的计数器初始值CLR TF0 ;清TF0CLR TF1 ;清TF1MOV TH1 ,#0FFH ;送20秒时的初始值MOV TL1 ,#0FCH ;在些设计20秒6辆为多车MOV TH0 ,#0FFHMOV TL0 ,#0FCHLJMP TEMP20 ;跳到20秒T40T: ;南北通行要显示的时间为40的计数器初始值CLR TF0 ;清TF0CLR TF1 ;清TF1MOV TH1,#0FFH ;送40秒时的初始值MOV TL1 ,#0F8H ;在些设计40秒8辆为多车MOV TH0 ,#0FFHMOV TL0 ,#0F8HLJMP TEMP40 ;跳到40秒TEMP20: ;TEMP1=20情况SETB TR0 ;开始计数SETB TR1CLR P1.2CLR P2.1 ;南北通行,东西禁止通行CLR P1.3CLR P1.5MOV TEMP1,#20 ;南北要显示的时间,MOV TEMP2,#25 ;东西要显示的时间STLOP:ACALL DISPLAY1 ;调用显示DEC TEMP1 ;时间够一秒显示时间减1DEC TEMP2MOV A,TEMP1CJNE A,#0,NEXT ;若显示时间不为0保持现在状态LJMP STAR2 ;若显示时间为 0跳到第二状态NEXT: LJMP STLOPSTAR2: ;状态1SETB P1.2CLR P1.1 ;南北黄灯,东西禁止通行SETB P1.3CLR P1.4MOV TEMP1,#05 ;南北要显示的时间,MOV TEMP2,#05 ;东西要显示的时间,STLOP2:ACALL DISPLAY1 ;调用显示DEC TEMP1 ;时间够一秒显示时间减1DEC TEMP2MOV A,TEMP1CJNE A,#0,NEXT2 ;若显示时间不为0保持现在状态JB TF1 ,T40 ;判断南北是否多车JB TF0 ,T40 ;判断北南是否多车MOV TEMP1,#20 ;少车下次显示时间为20秒LJMP STAR3 ;跳到状态3T40:MOV TEMP1,#40 ; 多车下次显示时间为40秒LJMP STAR3 ;若显示时间为 0跳到第三状态NEXT2:LJMP STLOP2TEMP40:;TEM=40 程序SETB TR0 ; 开始计数SETB TR1CLR P1.2CLR P2.1 ;南北通行,东西禁止通行CLR P1.3CLR P1.5MOV TEMP1,#40 ;南北要显示的时间,MOV TEMP2,#45 ;东西要显示的时间STLOP11:ACALL DISPLAY1 ;调用显示DEC TEMP1 ;时间够一秒显示时间减1DEC TEMP2MOV A,TEMP1CJNE A,#0,NEXT11 ;若显示时间不为0保持现在状态LJMP STAR22 ;若显示时间为 0跳到第二状态NEXT11: LJMP STLOP11STAR22: ;状态1SETB P1.2CLR P1.1 ;南北黄灯,东西禁止通行SETB P1.3CLR P1.4MOV TEMP1,#05 ;南北要显示的时间,MOV TEMP2,#05 ;东西要显示的时间,STLOP22:ACALL DISPLAY1 ;调用显示DEC TEMP1 ;时间够一秒显示时间减1DEC TEMP2MOV A,TEMP1CJNE A,#0,NEXT22 ;若显示时间不为0保持现在状态JB TF1 ,T401 ; 判断是否多车JB TF0 ,T401MOV TEMP1,#20 ;少车下次显示时间为20秒LJMP STAR3T401:MOV TEMP1,#40 ;多车下次显示时间为40秒LJMP STAR3 ;若显示时间为 0跳到第三状态NEXT22:LJMP STLOP22STAR3:MOV A,26HCJNE A,#25,T40T1 ;判断时间,选初始值T20T1: ;南北通行要显示的时间为20的计数器初始值CLR TF0 ; 清溢出位CLR TF1MOV TH1 ,#0FFH ; 给初值MOV TL1 ,#0FCHMOV TH0 ,#0FFHMOV TL0 ,#0FCHLJMP TEMP320T40T1: ;南北通行要显示的时间为40的计数器初始值CLR TF0 ;CLR TF1MOV TH1,#0FFH ;给初值MOV TL1 ,#0F8HMOV TH0 ,#0FFHMOV TL0 ,#0F8HLJMP TEMP340TEMP320:;状态三SETB TR1 ;南北停止计数SETB TR0 ;东西开始计数SETB P1.1 ;东西通行,南北禁止通行CLR P1.0CLR P1.0SETB P1.5CLR P1.6SETB P2.1CLR P2.3MOV TEMP3,#25 ;南北要显示的时间,MOV TEMP4,#20 ;东西要显示的时间,STLOP33:ACALL DISPLAY ;调用显示DEC TEMP3 ;时间够一秒显示时间减1DEC TEMP4MOV A,TEMP4CJNE A,#0,NEXT33 ;若显示时间不为0保持现在状态LJMP STAR34 ;若显示时间为 0跳到第四状态NEXT33:LJMP STLOP33STAR34: ;状态四SETB P2.3CLR P2.2SETB P1.6 ;东西黄灯,南北禁止通行CLR P1.5MOV TEMP3,#05 ;南北要显示的时间,MOV TEMP4,#05 ;东西要显示的时间,STLOP34:ACALL DISPLAY ;调用显示DEC TEMP3 ;时间够一秒显示时间减1DEC TEMP4MOV A,TEMP4CJNE A,#0,NEXT34 ;若显示时间不为0保持现在状态JB TF1 ,T402JB TF0 ,T402MOV TEMP3,#25LJMP START402:MOV TEMP3,#45LJMP STARNEXT34: LJMP STLOP34TEMP340 :SETB TR1 ;南北停止计数SETB TR0 ;东西开始计数SETB P1.1 ;东西通行,南北禁止通行CLR P1.0SETB P1.1CLR P1.0CLR P1.6SETB P2.1CLR P2.3MOV TEMP3,#45 ;南北要显示的时间,MOV TEMP4,#40 ;东西要显示的时间,STLOP43:ACALL DISPLAY ;调用显示DEC TEMP3 ;时间够一秒显示时间减1DEC TEMP4MOV A,TEMP4CJNE A,#0,NEXT43 ;若显示时间不为0保持现在状态LJMP STAR44 ;若显示时间为 0跳到第四状态NEXT43:LJMP STLOP43STAR44: ;状态四SETB P2.3CLR P2.2SETB P1.6 ;东西黄灯,南北禁止通行CLR P1.5MOV TEMP3,#05 ;南北要显示的时间,MOV TEMP4,#05 ;东西要显示的时间,STLOP44:ACALL DISPLAY ;调用显示DEC TEMP3 ;时间够一秒显示时间减1DEC TEMP4MOV A,TEMP3CJNE A,#0,NEXT44 ;若显示时间不为0保持现在状态JB TF1 ,T403JB TF0 ,T403MOV TEMP3,#25LJMP START403:MOV TEMP3,#45LJMP STARNEXT44: LJMP STLOP44;显示DISPLAY1:MOV A,TEMP1 ;将南北要显示的数存放到AMOV B,#10 ;B=10DIV AB ;A除以B商存A,余数BMOV B_BIT,A ; 将A放到20HMOV A_BIT,B ;将B放到21HMOV A,TEMP2 ;将东西要显示的数存放到AMOV B,#10 ;B=10DIV AB ;A除以B商存A,余数B MOV C_BIT,A ;将A放到22HMOV D_BIT,B ;将B放到23HMOV DPTR ,#NUMT ;MOV R0,#2 ;R0=2DPL11: MOV R1,#250 ;R1=250DPLOP1:MOV A,A_BIT ;将南北要显示的10位数送A MOVC A,@A+DPTR ;查表MOV P0,A ;显示南北10位数CLR P2.7ACALL D1MS;延时1MSSETB P2.7 ;灭南北10位数MOV A,B_BIT ;将南北要显示的个位数送A MOVC A,@A+DPTR ;查表MOV P0,A ;显示南北个位数CLR P2.6ACALL D1MS ;延时1MSSETB P2.6 ;灭南北个位数MOV A,C_BIT ;将东西要显示的10位数送A MOVC A,@A+DPTR ;查表MOV P0,A ;显示东西10位数CLR P2.5ACALL D1MS ;延时1MSSETB P2.5 ;灭东西10位数MOV A,D_BIT ;将东西要显示的个位数送A MOVC A,@A+DPTR ;查表MOV P0,A ;显示东西东西位数CLR P2.4ACALL D1MS ;延时1MSSETB P2.4 ;灭东西个位数DJNZ R1,DPLOP ;循环扫描DJNZ R0,DPL1RET ;等待1秒返回;显示DISPLAY:MOV A,TEMP3 ;将南北要显示的数存放到A MOV B,#10 ;B=10DIV AB ;A除以B商存A,余数BMOV B_BIT,A ; 将A放到20HMOV A_BIT,B ;将B放到21HMOV A,TEMP4 ;将东西要显示的数存放到A MOV B,#10 ;B=10DIV AB ;A除以B商存A,余数BMOV C_BIT,A ;将A放到22HMOV D_BIT,B ;将B放到23HMOV DPTR ,#NUMT ;MOV R0,#2 ;R0=2DPL1: MOV R1,#250 ;R1=250DPLOP:MOV A,A_BIT ;将南北要显示的10位数送A MOVC A,@A+DPTR ;查表MOV P0,A ;显示南北10位数CLR P2.7ACALL D1MS;延时1MSSETB P2.7 ;灭南北10位数MOV A,B_BIT ;将南北要显示的个位数送A MOVC A,@A+DPTR ;查表MOV P0,A ;显示南北个位数CLR P2.6ACALL D1MS ;延时1MSSETB P2.6 ;灭南北个位数MOV A,C_BIT ;将东西要显示的10位数送A MOVC A,@A+DPTR ;查表MOV P0,A ;显示东西10位数CLR P2.5ACALL D1MS ;延时1MSSETB P2.5 ;灭东西10位数MOV A,D_BIT ;将东西要显示的个位数送A MOVC A,@A+DPTR ;查表MOV P0,A ;显示东西东西位数CLR P2.4ACALL D1MS ;延时1MSSETB P2.4 ;灭东西个位数DJNZ R1,DPLOP ;循环扫描DJNZ R0,DPL1RET ;等待1秒返回D1MS: MOV R7,#250 ;1MS延时程序DJNZ R7,$RET;1到10对应电路图数码管表NUMT: DB 7EH,48H,67H,6BH,59HDB 3BH,3FH,68H,7FH,7BH。
51单片机设计交通灯(汇编语言)

题目:智能交通灯控制系统班级:p09电气四班姓名:刘强0903110429一、任务:设计并制作一个城市交道口交通灯控制糸统二、要求:根据下图交道口模型,装上交通灯。
交道口模型如图所示。
交通灯控制规则如下:1)每个街口有左拐、右拐、直行及行人四种指示灯。
每个灯有红、绿两种颜色。
自行车与汽车共用左拐、右拐和直行灯。
2)共有四种通行方式:①车辆南北直行、各路右拐,南北向行人通行。
南北向通行时间为1分钟,各路右拐比直行滞后10秒钟开放。
②南北向左拐、各路右拐,行人禁行。
通行时间为1分钟。
③东西向直行、各路右拐,东西向行人通行。
东西向通行时间为1分钟,各路右拐比直行滞后10秒钟开放。
④东西向左拐、各路右拐。
行人禁行。
通行时间为1分钟。
3)在通行结束前10秒钟,绿灯闪烁直至结束。
1, 基本部分:按照上述控制要求,用发光二极管代替交通灯,用PROTEUS绘制电路图,并仿真调试实现之。
2, 发挥部分:1.有倒计时时间显示。
2若交道口出现紧急情况,交警可将糸统设置成手动:全路口车辆禁行、行人通行。
紧急情况结束后再转成自动状态。
3当有119、120等特种车辆通过时,糸统自动转为特种车放行,其它车辆禁止状态。
特种车辆通过15秒钟后,糸统自动恢复,用模型车演示。
4其它自选措施。
智能交通灯控制系统1.系统功能的确定功能一:可以实现红绿灯的转换以及控制路口的基本功能。
功能二:有倒计时功能和最后十秒绿灯闪烁的功能。
功能三:出现紧急情况时,警察可以手动控制特殊状态,并维持交通。
功能四:119或120等特种车经过时,可转换成为特种车道行驶状态,并在情况消除后15秒,恢复原状。
2.方案论证2.1方案一:如下图所示,为proteus仿真图。
其中,P1,P0端口的8位分别来控制东西,南北方向的红绿灯。
且运用了4个74LS164的8位移位寄存器(串行输入,并行输出)来控制4个LED的数码显示,通过AT89C51单片机的P3.0,P3.1两个扩展端口来接4个并行连接的74LS164的DIN和CLK两个端口来显示倒计时的功能,这会产生乱码使得显示杂乱,而主程序以顺序执行为主,其中穿插着对P3.7的端口高低电平的测试和跳转语句来实现功能三,并且功能一、二在主程序中实现,没有功能四的的实现程序。
51单片机用C语言实现交通灯_红绿灯_源程序

c o d eu n s i g n e dc h a rt a b [ ] = { 0 x 3 f , 0 x 0 6 , 0 x 5 b , 0 x 4 f , 0 x 6 6 , 0 x 6 d , 0 x 7 d , 0 x 0 7 , 0 x 7 f , 0 x 6 f } ; / / 共阴数码管 0 9 u n s i g n e dc h a rD i s _ S h i w e i ; / / 定义十位 u n s i g n e dc h a rD i s _ G e w e i ;/ / 定 g n e di n tc n t ) { w h i l e ( c n t ) ; } m a i n ( ) { T M O D| = 0 x 0 1 ; / / 定时器设置 1 0 m si n1 2 Mc r y s t a l 定时器 0 ,工作方式 1 ,1 6 位定时器 T H 0 = 0 x d 8 ; / / 6 5 5 3 5 1 0 0 0 0 = 5 5 5 3 5 = D 8 F 0 (十六进制) T L 0 = 0 x f 0 ; I E =0 x 8 2 ;/ / 中断控制,E A = 1 开总中断,E T 0 = 1 :定时器 0 中断允许 T R 0 = 1 ; / / 开定时器 0 中断 P 1 = 0 x f c ; / / 红灯亮,根据红黄绿接灯的顺序。 r e d= 1 ; w h i l e ( 1 ) { P 0 = D i s _ S h i w e i ; / / 显示十位,这里实现用 8 位数码管,即左 1 位 P 2 = 0 ; d e l a y ( 3 0 0 ) ; / / 短暂延时 P 0 = D i s _ G e w e i ;/ / 显示个位,左数,2 位 P 2 = 1 ;
基于单片机设计的交通灯c程序

#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x0};uchar code table1[7]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf};uint table2[5]={5,15,20,0,15};sbit dula=P1^0;sbit wela=P1^1;sbit beer=P3^7;sbit k1=P1^5;sbit k2=P1^2;sbit k3=P1^4;sbit k4=P1^6;sbit A1=P2^0;sbit A2=P2^1;sbit A3=P2^2;sbit A4=P2^3;uintcount,count1,count2,j,tz=79,kn2,t10=15,tc=15,tf=15,tb,te,t4,t5,n=4,k=1,kn,tt,ti=20,t11=20,t12=35 ,t13=40,t14=55,t15=60,t16=75;void init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void delayms(uint x){uint y,z;for(y=x;y>0;y--)for(z=110;z>0;z--);}void display(uint td,uchar ta){uint num;P0=0xff;wela=1;wela=0;if(td==0)P0=table[ta];elseP0=ta ;dula=1;dula=0;if(num==7)num=0;P0=table1[num];num++;wela=1;wela=0;}void ts(){uchar shi,ge;ET0=0;shi=ti/10;ge=ti%10;if(k2==0){delayms(5);if(k2==0){kn2++;if(kn2==2) kn2=0;}while(!k2);}if(kn2==1){if(j==1) wela=1;else{display(0,shi);display(0,ge);display(0,shi);display(0,ge);display(1,0xff);display(1,0x0);display(1,0x0);}if(k3==0||k4==0){delayms(5);if(k3==0){table2[1]++;table2[4]++;table2[2]++;ti++;t10++;t11++;t12=t12+2;t13=t13+2;t14=t14+3;t15=t 15+3;t16=t16+4;tz=tz+4,tc++,tf++;}if(k4==0){table2[1]--;table2[2]--;table2[4]--;ti--;t10--;t11--;t12=t12-2;t13=t13-2;t14=t14-3;t15=t15-3;t1 6=t16-4;tz=tz-4;}while(!k3);while(!k4);tb=0;te=0;tt=0;n=4;k=1;}}ET0=1;}void incident(){ET0=0;if(k1==0){delayms(5);if(k1==0){kn++;if(kn==2){beer=1;kn=0;}}while(!k1);}if(kn==1){beer=0;if(j==1) wela=1;else{display(0,10);display(0,10);display(0,10);display(0,10);display(1,0xff);display(1,0x0);display(1,0x0);}}ET0=1;}void main(){uchar shia,gea,shib,geb;uint i;init();while(1){ts();incident();if(count1==10){count1=0;j++;if(j==2) j=0;}if(count2==5){count2=0;i++;if(i==4) i=0;}if(i==0) A1=0;else A1=1;if(i==1) A2=0;else A2=1;if(i==2) A3=0;else A3=1;if(i==3) A4=0;else A4=1;if(count==20){count=0;tt++; tb++; te++;if(tt>tz) tt=0;if(n==3||n==5) n=0;if(t4==tb) tb=0;t4=table2[n];tc=t4-tb ;if(tc==1) n++;if(k==3) k=0;if(t5==te) te=0;t5=table2[k];tf=t5-te ;if(tf==1) k++;}if(kn2==0&&kn==0){shia=tc/10;display (0,shia);gea=tc%10;display (0,gea);shib=tf/10;display (0,shib);geb=tf%10;display (0,geb);if (tt<t10)/*a方向-1绿*/{if(tt>=(t10-5)&&tt<=t10&&j==0)display(1,0x9);/*红*/else display(1,0x39);/*红*/display(1,0x0);/*黄*/display(1,0x6);/*绿*/}else if (tt>=t10&&tt<t11)/*黄*/{display(1,0x9);if(j==0) display(1,0x6);else display(1,0x0);display(1,0x30);}else if (tt>=t11&&tt<t12)/*b方向-1绿*/{if (tt>=(t12-5)&&tt<t12&&j==0) display(1,0xe);else display(1,0xf);display(1,0x0);display(1,0x30);}else if (tt>=t12&&tt<t13)/*黄*/{display(1,0xe);if(j==0) display(1,0x30);else display(1,0x0);display(1,0x1);}else if (tt>=t13&&tt<t14)/*a方向-2绿*/{if(tt>=(t14-5)&&tt<t14&&j==0) display(1,0x36);else display(1,0x3e);display(1,0x0);display(1,0x1);}else if (tt>=t14&&tt<t15)/*黄*/{display(1,0x36);if(j==0) display(1,0x1);else display(1,0x0);display(1,0x8);}else if (tt>=t15&&tt<t16)/*b方向-2绿*/{if(tt>=(t16-5)&&tt<t16&&j==0) display(1,0x31);else display(1,0x37);display(1,0x0);display(1,0x8);}else /*黄*/{display(1,0x31);if(j==0) display(1,0x8);else display(1,0x0);display(1,0x6);}}}}void time0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;count1++;count2++;}。
8086系统 8255并行 交通灯控制程序(汇编程序代码+详细注释内容)

DATAS SEGMENT;此处输入数据段代码CONADD EQU 21BH ;控制寄存器端口地址BADD EQU 219H ;B口地址CADD EQU 21AH ;C口地址DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码;ORG 2000H ;定义起始地址XOR CH,CHXOR AH,AHMOV AL,80H ;1 00 0 0 0 0 0B方式0,输出MOV DX,CONADD ;写控制字OUT DX,ALMOV AL,01101111B ;东西方向全红(接高四位)MOV DX,BADD ;DX保存Bd口地址OUT DX,ALMOV AL,11011011B ;南北方向全红MOV DX,CADDOUT DX,ALCALL DELAY1 ;延时S: MOV AL,1101111BMOV DX,BADD ;东西方向绿灯亮,起始状态OUT DX,ALMOV AL,10011011B ;南北方向红灯亮MOV DX,CADDOUT DX,ALCALL DELAY2 ;长延时MOV CX,0005H ;黄灯闪5次Y1: MOV AL,10111111BMOV DX,BADDOUT DX,ALMOV AL,01011011BMOV DX,CADDOUT DX,AL ;黄灯亮CALL DELAY3MOV AL,11111111BMOV DX,BADDOUT DX,ALMOV AL,11011011BMOV DX,CADDOUT DX,AL ;黄灯灭CALL DELAY3LOOP Y1MOV AL,01101111BMOV DX,BADDOUT DX,ALMOV AL,11110110BMOV DX,CADD ;东西红灯,南北绿灯OUT DX,ALCALL DELAY2 ;长延时MOV CX,0005H ;黄灯闪5次Y2: MOV AL,01101111BMOV DX,BADDOUT DX,ALMOV AL,11101101BMOV DX,CADDOUT DX,ALCALL DELAY2MOV AL,01101111BMOV DX,BADDOUT DX,ALMOV AL,11111111BMOV DX,CADDOUT DX,ALCALL DELAY2LOOP Y2MOV AH,1;待定,有键按下退出INT 16HJZ SMOV AH,4CHINT 21H;回到起始状态,不断循环DELAY1 PROC NEAR ;短延时子过程PUSH CX ;CX入栈保护(保护外循环次数)MOV CX,08000H ;置LOOP次数T:LOOP T ;跳转至本身,延时作用POP CX ;CX出栈RET ;返回DELAY1 ENDPDELAY2 PROC NEAR ;长延时子过程PUSH AX ;AX(AL)入栈保护PUSH CX ;CX入栈保护MOV CX,0010H ;置LOOP次数K:CALL DELAY1 ;调用短延时LOOP K ;循环一次,CX减1POP CX ;数据出栈,先进后出POP AXRET ;返回DELAY2 ENDPDELAY3 PROC NEAR ;长延时子过程PUSH AX ;AX(AL)入栈保护PUSH CX ;CX入栈保护MOV CX,0010H ;置LOOP次数Q:CALL DELAY1 ;调用短延时LOOP Q ;循环一次,CX减1POP CX ;数据出栈,先进后出POP AXRET ;返回DELAY3 ENDPCODES ENDSEND START。
单片机实现交通灯控制汇编代码

交通灯控制一、课程设计的内容在实验平台上选择两组指示灯,每组分为红,黄,绿代表交通灯。
要求:1. 模拟十字交通路口的实际情况,设计十字路口交通灯自动变换系统。
2. 设计十字路口交通灯手动变换系统,并这两套系统可切换使用。
3. 在实现以上内容的基础上增加允许急救车优先通过的要求。
有急救车到达时,两方向交通信号为全红,以便让急救车通过。
二.设计思路及电路图在单片机实验箱上P0口和P2口不能做I/O接口。
但是为了实现交通灯的状态变化,我要用到I/O接口来对按键进行查询和显示发光二极管的状态,P1口控制四段数码管的显示。
所以我扩展I/O接口,用74LS377的输入端接P0口,其输出线1Q~8Q接8个发光二极管,WR作为锁存控制接74LS377的时钟端,扩展片选信号CS1接在74LS377的使能端G。
我用查询方式来查询按键来转换手动,自动,救护车到来的状态的变化,则把四个按键K4~K7与P3.2~P3.5相接,当按键置高电平时,程序就会转换到相应状态执行相应的模块状态。
在自动状态时,开始4个路口的红灯全亮(东西方向为之路,南北方向为主路)之后,南北路口的绿灯亮,东西口的红灯亮,延时显示并查询开关状态是否发生变化,当两个数码管(一个代表东西方向,一个代表南北方向)从0~3显示,当显示3后交通灯显示下一个状态,一直循环重复过程,直到查询到有按键发生变化。
当P3.3高电平时,自动转换为手动,(同理P3.3低电平时手动转换为自动。
)此时拨动按键使P3.2或P3.5置于高点位,就会转到主路或支路相应状态的交通灯显示,数码管显示0。
P3.4控制救护车来时的状态,当其高电位两个红灯全亮并蜂鸣器响起。
实验电路图:显示电路:三、程序:主程序流程图:输出口初始化化送灯的状态到锁存器,灯自动循环亮调用延时显示 并查询按键状态手动状态JB P3.3JNB P3.3开始JB P3.4P3.4 jnb之前状态JBP3.5 JB P3.2东西绿灯亮 南北红灯亮南北绿灯亮东西红灯亮救护车 东西南北红灯亮并警报显示子程序流程图:DISPL Y子程序流程图:ORG 4000HSTART: MOV DPTR,#0F100HMOV A,#11011110B ;东西南北红灯亮MOVX @DPTR,ALCALL DL1S ; 显示时间,并查询按键状态 LCALL XIANSHILOP1: MOV DPTR,#0F100HMOV A,#11011011B ;南北绿灯亮,东西红灯亮MOVX @DPTR,ALCALL DL1S ;显示时间,并查询按键状态LCALL XIANSHIMOV R0,#2LOP2: MOV DPTR,#0F100HMOV A, #11011001B ; 南北黄灯闪烁2次MOVX @DPTR,ALCALL DL1S ;显示时间,并查询按键状态 LCALL XIANSHILOPD: MOV DPTR,#0F100HMOV A,#11011011BMOVX @DPTR,ALCALL DL1SLCALL XIANSHIDJNZ R0,LOP2LOP3: MOV DPTR,#0F100HMOV A,#01111110B ;东西绿灯亮,南北红灯亮MOVX @DPTR,ALCALL DL1S ;显示时间,并查询按键状态LCALL XIANSHIMOV R0,#2LOP4: MOV DPTR,#0F100HMOV A,#00111110B ; 东西黄灯闪烁2次MOVX @DPTR,ALCALL DL1SLCALL XIANSHILOPE: MOV DPTR,#0F100HMOV A,#01111110B ;显示时间,并查询按键态 MOVX @DPTR,ALCALL DL1SLCALL XIANSHIDJNZ R0,LOP4 ;R0不为0,转L0P4AJMP STARTPK:MOV DPTR,#0F100H ;手动状态两个黄灯亮作为标志MOV A,#10111101BMOVX @DPTR,AJNB P3.3,START ;P3.3低电平转自动JB P3.2,ZHUL ;P3.2高电平转主路状态JB P3.5,ZILU ;P3.2高电平转之路状态JB P3.4,JHC ;P3.4高电平转救护车状态 CLR EA ;关救护车的蜂鸣器LCALL XIANSHI1 ;不显示时间,显示0AJMP PKZHUL:MOV DPTR,#0F100HMOV A,#11011011B ;南北绿灯亮,东西红灯亮MOVX @DPTR,ALCALL XIANSHI1 ;显示0AJMP PKZILU: MOV DPTR,#0F100HMOV A,#01111110B ;东西绿灯亮,南北红灯亮MOVX @DPTR,ALCALL XIANSHI1 ;显示0AJMP PKJHC: MOV TMOD,#01HMOV TH0,#0FCH ;蜂鸣器响起MOV TL0,#05BHSETB TR0SETB EACPL P1.7MOV DPTR,#0F100HMOV A, #11011110B ;东西,南北,红灯亮 MOVX @DPTR,ALCALL XIANSHI1 ;显示0;子程序DL1S: JB P3.3,PK ;查询按键状态JB P3.4,JHCRET;显示子程序XIANSHI:MOV A,#0 ;显示0MOV DPTR,#TB ;查表ANL A,0FHMOVC A,@A+DPTRMOV R1,AMOV P1,#11111111BCALL DISPLYLCALL DL1S1 ;调用延时 MOV A,#1 ;显示1 MOV DPTR,#TBANL A,0FHMOVC A,@A+DPTRMOV R1,AMOV P1,#11111111BCALL DISPLYLCALL DL1S1MOV A,#2 ;显示2MOV DPTR,#TBANL A,0FHMOVC A,@A+DPTRMOV R1,AMOV P1,#11111111BCALL DISPLYLCALL DL1S1MOV A,#3 ;显示3 MOV DPTR,#TBANL A,0FHMOVC A,@A+DPTRMOV R1,AMOV P1,#11111111BCALL DISPLYLCALL DL1S1RETXIANSHI1: MOV A,#0MOV DPTR,#TBANL A,0FH ;显示0的子程序 MOVC A,@A+DPTRMOV R1,AMOV P1,#11111111BCALL DISPLYLCALL DL1S1DISPLY:MOV R7,#8 ;MOV A,R1;MOV A,#8EHT: RLC A ;串形输入SETB P1.1 ;时钟置高MOV P1.0,C ;数据送sdaCLR P1.1 ;时钟置低位DJNZ R7,TMOV P1,#10110111B ;1RETDL1S1: MOV R6,#4DELAYY: MOV R5,#250DELAYE: MOV R3,#250 ;延时子程序DELAYF: DJNZ R3,DELAYFDJNZ R5,DELAYEDJNZ R6,DELAYYRETTB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6 H,0A1H,86H,8EHEND1 / 1。
单片机控制交通灯程序代码

程序源代码ORG 0000H ;主程序的入口地址LJMP MAIN ;跳转到主程序的开始处ORG 0003H ;外部中断0的中断程序入口地址ORG 000BH ;定时器0的中断程序入口地址LJMP T0_INT ;跳转到中断服务程序处ORG 0013H ;外部中断1的中断程序入口地址MAIN : MOV SP,#50HMOV IE,#8EH ;CPU开中断,允许T0中断,T1中断和外部中断1中断MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1MOV TH1,#00H ;T1计数器清零MOV TL1,#00HSETB TR1 ;启动T1计时器SETB EX1 ;允许INT1中断SETB IT1 ;选择边沿触发方式MOV DPTR ,#0003HMOV A, #80H ;给8255赋初值,8255工作于方式0MOVX @DPTR, AAGAIN: JB P3.1,N0 ;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转MOV A,P1JB P1.7,RED ;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间MOV R0,#00H ;R0清零MOV R0,A ;存入东西方向绿灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAINRED: MOV A,P1ANL A,#7FH ;P1.7置0MOV R7,#00H ;R7清零MOV R7,A ;存入东西方向红灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAIN唐波:基于单片机的交通灯控制器的研究与设计;-------------------------------------------N0: SETB TR0 ;启动T0计时器MOV 76H,R7 ;红灯时间存入76HN00: MOV A,76H ;东西方向禁止,南北方向通行MOV R3,AMOV DPTR,#0000H ;置8255A口,东西方向红灯亮,南北方向绿灯亮MOV A,#0DDHMOVX @DPTR, AN01: JB P2.0,B0N02: SETB P3.0CJNE R3,#00H,N01 ;比较R3中的值是否为0,不为0转到当前指令处执行;------黄灯闪烁5秒程序------N1: SETB P3.0MOV R3,#05HMOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮MOV A,#0D4HMOVX @DPTR,AN11: MOV R4,#00HN12: CJNE R4,#7DH,$ ;黄灯持续亮0.5秒N13: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭MOV A,#0DDHMOVX @DPTR,AN14: MOV R4,#00HCJNE R4,#7DH,$ ;黄灯持续灭0.5秒CJNE R3,#00H,N1 ;闪烁时间达5秒则退出;------------------------------------------------------------N2: MOV R7,#00HMOV A,R0 ;东西通行,南北禁止MOV R3,AMOV DPTR,#0000H ; 置8255A口,东西方向绿灯亮,南北方向红灯亮MOV A,#0EBHMOVX @DPTR,AN21: JB P2.0,T03N22: CJNE R3,#00H,N21;------黄灯闪烁5秒程序------N3: MOV R3,#05HMOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮第2 页共27 页毕业设计MOV A,#0E2HMOVX @DPTR,AN31: MOV R4,#00HCJNE R4,#7DH,$ ;黄灯持续亮0.5秒N32: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭MOV A,#0EBHMOVX @DPTR,AN33: MOV R4,#00HCJNE R4,#7DH,$ ;黄灯持续灭0.5秒CJNE R3,#00H,N3 ;闪烁时间达5秒则退出SJMP N00;------闯红灯报警程序------B0: MOV R2,#03H ;报警持续时间3秒B01: MOV A,R3JZ N1 ;若倒计时完毕,不再报警CLR P3.0 ;报警CJNE R2,#00H,B01 ;判断3秒是否结束SJMP N02;------1秒延时子程序-------N7: RETIT0_INT:MOV TL0,#9AH ;给定时器T0送定时10ms的初值MOV TH0,#0F1HINC R4INC R5CJNE R5,#0FAH,T01 ;判断延时是否够一秒,不够则调用显示子程序MOV R5,#00H ;R5清零DEC R3 ;倒计时初值减一DEC R2 ;报警初值减一T01: ACALL DISP ;调用显示子程序RETI ;中断返回;------显示子程序------DISP: JNB P2.4,T02DISP1: MOV B,#0AHMOV A,R3 ;R3中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,BDIS: MOV A,79H ;显示十位第3 页共27页唐波:基于单片机的交通灯控制器的研究与设计MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0F7HMOVX @DPTR,ALCALL DELAYDS2: MOV A,7AH ;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ARET;------东西方向车流量检测程序------T03: MOV A,R3SUBB A,#00H ;若绿灯倒计时完毕,不再检测车流量JZ N3JB P2.0,T03INC R7CJNE R7,#64H,E1MOV R7,#00H ;中断到100次则清零E1: SJMP N22;------东西方向车流量显示程序------T02: MOV B,#0AHMOV A,R7 ;R7中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,BDIS3: MOV A,79H ;显示十位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001H第4 页共27 页毕业设计MOV A,#0F7HMOVX @DPTR,ALCALL DELAYDS4: MOV A,7AH ;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ALJMP N7;------延时4MS子程序----------DELAY: MOV R1,#0AHLOOP: MOV R6,#64HNOPLOOP1: DJNZ R6,LOOP1DJNZ R1,LOOPRET;------字符表------TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END第5 页共27页。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交通灯控制
一、课程设计的内容
在实验平台上选择两组指示灯,每组分为红,黄,绿代表交通灯。
要求:
1. 模拟十字交通路口的实际情况,设计十字路口交通灯自动
变换系统。
2. 设计十字路口交通灯手动变换系统,并这两套系统可切换
使用。
3. 在实现以上内容的基础上增加允许急救车优先通过的要
求。
有急救车到达时,两方向交通信号为全红,以便让急救车通
过。
二.设计思路及电路图
在单片机实验箱上P0口和P2口不能做I/O接口。
但是为了实现交通灯的状态变化,我要用到I/O接口来对按键进行查询
和显示发光二极管的状态,P1口控制四段数码管的显示。
所以我
扩展I/O接口,用74LS377的输入端接P0口,其输出线1Q~8Q
接8个发光二极管,WR作为锁存控制接74LS377的时钟端,扩
展片选信号CS1接在74LS377的使能端G。
我用查询方式来查询
按键来转换手动,自动,救护车到来的状态的变化,则把四个按
键K4~K7与P3.2~P3.5相接,当按键置高电平时,程序就会转换
到相应状态执行相应的模块状态。
在自动状态时,开始4个路口的红灯全亮(东西方向为之
路,南北方向为主路)之后,南北路口的绿灯亮,东西口的红灯亮,延时显示并查询开关状态是否发生变化,当两个数码管(一个代表东西方向,一个代表南北方向)从0~3显示,当显示3后交通灯显示下一个状态,一直循环重复过程,直到查询到有按键发生变化。
当P3.3高电平时,自动转换为手动,(同理P3.3低电平时手动转换为自动。
)此时拨动按键使P3.2或P3.5置于高点位,就会转到主路或支路相应状态的交通灯显示,数码管显示0。
P3.4控制救护车来时的状态,当其高电位两个红灯全亮并蜂鸣器响起。
实验电路图:
显示电路:
三、程序:
主程序流程图:
输出口初始化化
送灯的状态到锁存器,灯自动循环亮
调用延时显示 并查询按键状态
手动状态
JB P3.3
JNB P3.3
开始
JB P3.4
P3.4 jnb
之前状态
JBP3.5 JB P3.2
东西绿灯亮 南北红灯亮
南北绿灯亮东西红灯亮
救护车 东西南北红灯亮并警报
显示子程序流程图:DISPL Y子程序流程图:
ORG 4000H
START: MOV DPTR,#0F100H
MOV A,#11011110B ;东西南北红灯亮
MOVX @DPTR,A
LCALL DL1S ; 显示时间,并查询按键状态 LCALL XIANSHI
LOP1: MOV DPTR,#0F100H
MOV A,#11011011B ;南北绿灯亮,东西红灯亮
MOVX @DPTR,A
LCALL DL1S ;显示时间,并查询按键状态
LCALL XIANSHI
MOV R0,#2
LOP2: MOV DPTR,#0F100H
MOV A, #11011001B ; 南北黄灯闪烁2次
MOVX @DPTR,A
LCALL DL1S ;显示时间,并查询按键状态 LCALL XIANSHI
LOPD: MOV DPTR,#0F100H
MOV A,#11011011B
MOVX @DPTR,A
LCALL DL1S
LCALL XIANSHI
DJNZ R0,LOP2
LOP3: MOV DPTR,#0F100H
MOV A,#01111110B ;东西绿灯亮,南北红灯亮
MOVX @DPTR,A
LCALL DL1S ;显示时间,并查询按键状态
LCALL XIANSHI
MOV R0,#2
LOP4: MOV DPTR,#0F100H
MOV A,#00111110B ; 东西黄灯闪烁2次
MOVX @DPTR,A
LCALL DL1S
LCALL XIANSHI
LOPE: MOV DPTR,#0F100H
MOV A,#01111110B ;显示时间,并查询按键态 MOVX @DPTR,A
LCALL DL1S
LCALL XIANSHI
DJNZ R0,LOP4 ;R0不为0,转L0P4
AJMP START
PK:
MOV DPTR,#0F100H ;手动状态两个黄灯亮作为标志
MOV A,#10111101B
MOVX @DPTR,A
JNB P3.3,START ;P3.3低电平转自动
JB P3.2,ZHUL ;P3.2高电平转主路状态
JB P3.5,ZILU ;P3.2高电平转之路状态
JB P3.4,JHC ;P3.4高电平转救护车状态 CLR EA ;关救护车的蜂鸣器
LCALL XIANSHI1 ;不显示时间,显示0
AJMP PK
ZHUL:
MOV DPTR,#0F100H
MOV A,#11011011B ;南北绿灯亮,东西红灯亮
MOVX @DPTR,A
LCALL XIANSHI1 ;显示0
AJMP PK
ZILU: MOV DPTR,#0F100H
MOV A,#01111110B ;东西绿灯亮,南北红灯亮
MOVX @DPTR,A
LCALL XIANSHI1 ;显示0
AJMP PK
JHC: MOV TMOD,#01H
MOV TH0,#0FCH ;蜂鸣器响起
MOV TL0,#05BH
SETB TR0
SETB EA
CPL P1.7
MOV DPTR,#0F100H
MOV A, #11011110B ;东西,南北,红灯亮 MOVX @DPTR,A
LCALL XIANSHI1 ;显示0
;子程序
DL1S: JB P3.3,PK ;查询按键状态
JB P3.4,JHC
RET
;显示子程序
XIANSHI:MOV A,#0 ;显示0
MOV DPTR,#TB ;查表
ANL A,0FH
MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1 ;调用延时 MOV A,#1 ;显示1 MOV DPTR,#TB
ANL A,0FH
MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1
MOV A,#2 ;显示2
MOV DPTR,#TB
ANL A,0FH
MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1
MOV A,#3 ;显示3 MOV DPTR,#TB
ANL A,0FH
MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1
RET
XIANSHI1: MOV A,#0
MOV DPTR,#TB
ANL A,0FH ;显示0的子程序 MOVC A,@A+DPTR
MOV R1,A
MOV P1,#11111111B
CALL DISPLY
LCALL DL1S1
DISPLY:MOV R7,#8 ;
MOV A,R1
;MOV A,#8EH
T: RLC A ;串形输入
SETB P1.1 ;时钟置高
MOV P1.0,C ;数据送sda
CLR P1.1 ;时钟置低位
DJNZ R7,T
MOV P1,#10110111B ;1
RET
DL1S1: MOV R6,#4
DELAYY: MOV R5,#250
DELAYE: MOV R3,#250 ;延时子程序
DELAYF: DJNZ R3,DELAYF
DJNZ R5,DELAYE
DJNZ R6,DELAYY
RET
TB:DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6 H,0A1H,86H,8EH
END
1 / 1。