单片机控制交通灯程序代码_单片机控制交通灯程序
单片机控制交通灯程序代码由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机控制交通灯程序”。
毕业设计
程序源代码
ORG 0000H
;主程序的入口地址
LJMP MAIN
;跳转到主程序的开始处
ORG 0003H
;外部中断0的中断程序入口地址
ORG 000BH
;定时器0的中断程序入口地址
LJMP T0_INT
;跳转到中断服务程序处
ORG 0013H
;外部中断1的中断程序入口地址
MAIN : MOV SP,#50H
MOV IE,#8EH
;CPU开中断,允许T0中断,T1中断和外部中断1中断
MOV TMOD,#51H
;设置T1为计数方式,T0为定时方式,且都工作于模式1
MOV TH1,#00H
;T1计数器清零
MOV TL1,#00H
SETB TR1
;启动T1计时器
SETB EX1
;允许INT1中断
SETB IT1
;选择边沿触发方式
MOV DPTR ,#0003H
MOV A, #80H
;给8255赋初值,8255工作于方式0
MOVX @DPTR, A AGAIN: JB P3.1,N0
;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转
MOV A,P1
JB P1.7,RED
;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间
MOV R0,#00H
;R0清零
MOV R0,A
;存入东西方向绿灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN RED:
MOV A,P1
ANL A,#7FH
;P1.7置0
MOV R7,#00H
;R7清零
MOV R7,A
;存入东西方向红灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
毕业设计
;------------N0:
SETB TR0
;启动T0计时器
MOV 76H,R7
;红灯时间存入76H N00:
MOV A,76H
;东西方向禁止,南北方向通行
MOV R3,A
MOV DPTR,#0000H;置8255A口,东西方向红灯亮,南北方向绿灯亮
MOV A,#0DDH
MOVX @DPTR, A N01:
JB P2.0,B0 N02:
SETB P3.0
CJNE R3,#00H,N01;比较R3中的值是否为0,不为0转到当前指令处执行;------黄灯闪烁5秒程序------N1:
SETB P3.0
MOV R3,#05H
MOV DPTR,#0000H;置8255A口,东西,南北方向黄灯亮
MOV A,#0D4H
MOVX @DPTR,A N11:
MOV R4,#00H N12:
CJNE R4,#7DH,$
;黄灯持续亮0.5秒
N13:
MOV DPTR,#0000H
;置8255A口,南北方向黄灯灭
MOV A,#0DDH
MOVX @DPTR,A N14:
MOV R4,#00H
CJNE R4,#7DH,$
;黄灯持续灭0.5秒
CJNE R3,#00H,N1
;闪烁时间达5秒则退出;-----------------------------N2:
MOV R7,#00H
MOV A,R0
;东西通行,南北禁止
MOV R3,A
MOV DPTR,#0000H;置8255A口,东西方向绿灯亮,南北方向红灯亮
MOV A,#0EBH
MOVX @DPTR,A N21:
JB P2.0,T03
N22:
CJNE R3,#00H,N21;------黄灯闪烁5秒程序------N3:
MOV R3,#05H
MOV DPTR,#0000H
;置8255A口,东西,南北方向黄灯亮
毕业设计
MOV A,#0E2H
MOVX @DPTR,A N31:
MOV R4,#00H
CJNE R4,#7DH,$
;黄灯持续亮0.5秒
N32:
MOV DPTR,#0000H;置8255A口,南北方向黄灯灭
MOV A,#0EBH
MOVX @DPTR,A N33:
MOV R4,#00H
CJNE R4,#7DH,$
;黄灯持续灭0.5秒
CJNE R3,#00H,N3
;闪烁时间达5秒则退出
SJMP N00;------闯红灯报警程序------B0:
MOV R2,#03H
;报警持续时间3秒 B01:
MOV A,R3
JZ N1
;若倒计时完毕,不再报警
CLR P3.0
;报警
CJNE R2,#00H,B01
;判断3秒是否结束
SJMP N02;------1秒延时子程序-------N7:
RETI T0_INT:MOV TL0,#9AH
;给定时器T0送定时10ms的初值
MOV TH0,#0F1H
INC R4
INC R5
CJNE R5,#0FAH,T01;判断延时是否够一秒,不够则调用显示子程序
MOV R5,#00H
;R5清零
DEC R3
;倒计时初值减一
DEC R2
;报警初值减一 T01:
ACALL DISP
;调用显示子程序
RETI
;中断返回;------显示子程序------DISP: JNB P2.4,T02 DISP1: MOV B,#0AH
MOV A,R3
;R3中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B DIS:
MOV A,79H
;显示十位
毕业设计
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY DS2:
MOV A,7AH
;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
RET;------东西方向车流量检测程序------T03:
MOV A,R3
SUBB A,#00H
;若绿灯倒计时完毕,不再检测车流量
JZ
N3
JB P2.0,T03
INC R7
CJNE R7,#64H,E1
MOV R7,#00H
;中断到100次则清零 E1:
SJMP N22;------东西方向车流量显示程序------T02:
MOV B,#0AH MOV
A,R7
;R7中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B DIS3: MOV A,79H
;显示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
毕业设计
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY DS4:
MOV A,7AH
;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
LJMP N7;------延时4MS子程序----------DELAY: MOV R1,#0AH LOOP: MOV R6,#64H
NOP LOOP1: DJNZ R6,LOOP1
DJNZ R1,LOOP
RET
;------字符表------TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END