有关‘单片机控制的交通灯控制系统 ’的课程设计

2024-12-21 21:26:08
推荐回答(2个)
回答1:

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  E_W_LEFT_R BIT P0.0 ;;东西方向定义
  E_W_LEFT_G BIT P0.1
  E_W_R BIT P0.2
  E_W_G BIT P0.3
  E_W_P_R BIT P0.4
  E_W_P_G BIT P0.5
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  S_N_LEFT_R BIT P0.6 ;;南北方向定义
  S_N_LEFT_G BIT P0.7
  S_N_R BIT P2.3
  S_N_G BIT P2.2
  S_N_P_R BIT P2.1
  S_N_P_G BIT P2.0
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  BUFFER1 data 41h ;四方向数码管缓冲区定义
  BUFFER2 data 42h
  BUFFER3 data 43h
  BUFFER4 data 44h
  BUFFER5 data 45h
  BUFFER6 data 46h
  BUFFER7 data 47h
  BUFFER8 data 48h

  ;;;;;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;
  ORG 0000h
  LJMP MAIN
  ORG 000BH ;T0中断服务程序入口地址
  LJMP T0_INT

  ORG 0100H
  MAIN: MOV TMOD,#01H
  MOV TH0,#3CH ;定时器为50ms定时
  MOV TL0,#0B0H
  SETB ET0
  SETB EA
  SETB TR0
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  RESTART: MOV P0,#0A9H ;状态1LED显示
  MOV P2,#05H
  MOV R0,#00H
  MOV R3,#40 ;R3控制南北方向数码管显示
  MOV R2,#10 ;R2控制东西方向数码管显示
  STATE1: CJNE R0,#20,POOL1
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL1: CJNE R2,#00H,STATE1
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  MOV P0,#0A8H ;状态2LED显示
  MOV R0,#00H
  MOV R2,#04
  STATE2: CJNE R0,#20,POOL2
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL2: CJNE R2,#00H,STATE2
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  MOV P0,#0A6H ;状态3LED显示
  MOV R0,#00H
  MOV R2,#07
  STATE3: CJNE R0,#20,POOL3
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL3: CJNE R2,#00H,STATE3
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  MOV P0,#96H ;状态4LED显示
  MOV R0,#00H
  MOV R2,#15
  STATE4: CJNE R0,#20,POOL4
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL4: CJNE R2,#00H,STATE4
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  MOV P0,#82H ;状态5LED显示
  MOV R0,#00H
  MOV R2,#4
  STATE5: CJNE R0,#20,POOL5
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL5: CJNE R2,#00H,STATE5
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  MOV P0,#6AH ;状态6LED显示
  MOV P2,#05H
  MOV R0,#00H
  MOV R3,#10
  MOV R2,#40
  STATE6: CJNE R0,#20,POOL6
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL6: CJNE R3,#00H,STATE6
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  MOV P0,#2AH ;状态7LED显示
  MOV R0,#00H
  MOV R3,#4
  STATE7: CJNE R0,#20,POOL7
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL7: CJNE R3,#00H,STATE7
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  MOV P0,#0AAH ;状态8LED显示
  MOV P2,#09H
  MOV R0,#00H
  MOV R3,#7
  STATE8: CJNE R0,#20,POOL8
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL8: CJNE R3,#00H,STATE8
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  MOV P2,#0AH ;状态9LED显示
  MOV R0,#00H
  MOV R3,#15
  STATE9: CJNE R0,#20,POOL9
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL9: CJNE R3,#00H,STATE9
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  MOV P2,#00H ;状态10LED显示
  MOV R0,#00H
  MOV R3,#4
  STATE10: CJNE R0,#20,POOL10
  MOV R0,#00H ;R0 控制1s的循环控制
  DEC R3
  DEC R2
  LCALL JUST1
  LCALL JUST2
  LCALL DISP
  POOL10: CJNE R3,#00H,STATE10
  LJMP RESTART

  ;;;;;;;;;;;;;;;;;;中断服务程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  T0_INT: INC R0
  MOV TH0,#3CH
  MOV TL0,#0B0H
  RETI
  ;;;;;;;;;;;;;;;;;;调整子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  JUST1: MOV A,R3
  MOV B,#10 ;调整南北方向低位
  DIV AB
  MOV R7,A
  MOV A,B
  MOV DPTR,#TAB
  MOVC A,@A+DPTR
  MOV 42H,A
  MOV 46H,A

  MOV A,R7 ;调整南北方向高位
  MOV DPTR,#TAB
  MOVC A,@A+DPTR
  MOV 41H,A
  MOV 45H,A
  RET

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  JUST2: MOV A,R2
  MOV B,#10 ;调整东西方向低位
  DIV AB
  MOV R7,A
  MOV A,B
  MOV DPTR,#TAB
  MOVC A,@A+DPTR
  MOV 43H,A
  MOV 47H,A

  MOV A,R7 ;调整东西方向高位
  MOV DPTR,#TAB
  MOVC A,@A+DPTR
  MOV 44H,A
  MOV 48H,A
  RET

  ;;;;;;;;;;;;;;;;;;显示子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  DISP: PUSH ACC
  MOV SCON,#00H
  MOV R1,#41H
  MOV R6,#08
  POOL11: MOV A,@R1
  MOV SBUF,A ;开始串行输出
  JNB TI,$ ;输出完否
  CLR TI ;清TI标志,以备下次发送
  INC R1
  DJNZ R6,POOL11
  POP ACC
  RET

  ;;;;;;;;;;;;;;;;;;段码显示;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  TAB: DB 0C0H, 0CFH, 64H, 46H,4BH, 52H, 50H,0C7H, 40H, 42H

  END

  自己再稍加修改就会得到你满意的结果

回答2:

这是我自己做的!要的话给我QQ留言!程序我也有!