最近学校在教汇编,正巧单片机实验,用51单片机做一个交通灯,用来过单片机实验考试,效果还不错,这个其实i功能比较简单,用C语言的画应该分分钟搞定,但是汇编着实是难,proteus画图加敲代码弄了整整一晚上,都要吐血了,效果图如下:(由于proteus软件比较卡,为了能快速看到效果程序里定时时间不是1秒,如果你用到记得更改会正常的1s间隔倒计时)
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- ;位选引脚
- RED_H BIT P1.0
- RED_L BIT P1.1
- GRE_H BIT P1.2
- GRE_L BIT P1.3
- YEL_H BIT P1.4
- YEL_L BIT P1.5
- ;灯
- RED1 BIT P2.0
- GREED1 BIT P2.1
- YELLOW1 BIT P2.2
- RED2 BIT P2.3
- GREED2 BIT P2.4
- YELLOW2 BIT P2.5
- ORG 0000H
- AJMP MAIN
- ORG 000BH
- AJMP TIME
- ORG 0050H
- ;****************** ******************
- MAIN:
- MOV P0,#0FFH
- MOV P1,#0FFH
- MOV P2,#0FFH
- MOV R0,#0 ; 0垂直红,1垂直黄,2垂直绿
- MOV R1,#10 ;定时器计数10次 1S
- MOV R2,#60 ; 红60s
- MOV R3,#5 ; 黄灯5s
- MOV R5,#60 ; 绿灯
- MOV R4,#0
- MOV A, #0
- MOV DPTR,#TABLE
- ANL TMOD,#00FH
- ORL TMOD,#010H
- MOV TH0,#038H
- MOV TL0,#000H
- SETB EA
- SETB ET0
- SETB TR0
- LOOP:
- CJNE R0,#1,OTHER
- MOV P2,#0X00;
- SETB YELLOW2
- SETB YELLOW1
- MOV P1,#0X00 ; 黄灯5s
- SETB YEL_H
- MOV B,#10
- MOV A,R3
- DIV AB
- MOVC A,@A+DPTR
- MOV P0,A
- ACALL DELAY
- CPL YEL_H
- SETB YEL_L
- MOV A,B
- MOVC A,@A+DPTR
- MOV P0,A
- ACALL DELAY
- AJMP LOOP
- OTHER:JC OTHER2
- MOV P2,#0X00;
- SETB GREED1
- SETB RED2
- MOV P1,#0X00; ; 绿灯60s
- SETB GRE_H
- MOV B,#10
- MOV A,R5
- DIV AB
- MOVC A,@A+DPTR
- MOV P0,A
- ACALL DELAY
- CPL GRE_H
- SETB GRE_L
- MOV A,B
- MOVC A,@A+DPTR
- MOV P0,A
- ACALL DELAY
- AJMP LOOP
- OTHER2:
- MOV P1,#0X00; ; 红灯60s
- MOV P2,#0X00;
- SETB RED1
- SETB GREED2
- SETB RED_H
- MOV B,#10
- MOV A,R2
- DIV AB
- MOVC A,@A+DPTR
- MOV P0,A
- ACALL DELAY
-
- CPL RED_H
- SETB RED_L
- MOV A,B
- MOVC A,@A+DPTR
- MOV P0,A
- ACALL DELAY
- AJMP LOOP
- TIME:
- DJNZ R1,NEXT
- MOV R1,#5
- CJNE R0,#1,THER1
- DJNZ R3,NEXT ; 黄灯
- MOV R3,#5
- INC R0
- CJNE R0,#3,NEXT
- MOV R0,#0
- AJMP NEXT
- THER1: JC THER2
- DJNZ R5,NEXT
- MOV R5,#60
- INC R0
- CJNE R0,#3,NEXT
- MOV R0,#0
- AJMP NEXT
- THER2: DJNZ R2,NEXT
- MOV R2,#60
- INC R0
- CJNE R0,#3,NEXT
- MOV R0,#0
- NEXT:
- MOV TH0,#038H
- MOV TL0,#000H
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
交通灯.rar
(65.74 KB, 下载次数: 158)
|