7月20日,最后一门考试考完之后,在家休息两天,修好电脑,就开始了计划好的单片机深入学习计划。
鉴于本人小白有一定的基础,因此并没有从入门开始,而是从这学期的单片机课程设计入手。当时因为时间问题,计划的功能并没有全部实现,只是简单的实现了课程设计的最基本的要求。因此,我打算先将已经完成的从汇编换成C语言,然后再完成自己之前设计的功能。
设计题目:急救车与交通灯
一、设计内容
设计一个交通灯控制系统,一般情况下正常显示(数码管显示和发光二极管指示),有急救车到达时,两个方向四个交通信号灯全红,以便让急救车通过。急救车通过时的交通灯显示情况由外部开关控制。夜间道路无车辆时,四个方向的交通灯黄灯闪烁。画出硬件连接电路图,说明各个控制信号的作用。
二、工作原理
通过延时和外中断控制交通灯的亮灭和工作状态
三、电路图
四、源程序
ORG 0000H
LJMP MAIN
;ORG 0003H
;LJMP ALLRED
ORG 000BH
LJMP TOSUB
ORG 0200H
SECOND DATA 30H
RGY DATA 37H
TIME DATA 38H
DTIME1 DATA 39H
DTIME2 DATA 3AH
DTIME3 DATA 3BH
MAIN: MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H;赋上定时50ms的初值;
MOV R5,#25
MOV R4,#20
;MOV P0,#0FFH
MOV SECOND,#25
SETB EA
SETB ET0
SETB TR0
MOV P1,#10000100B
MOV DPTR,#TAB
;ALLRED:MOV P1,#10010000;急救车模式,全红
DISP: MOV A,SECOND
MOV B,#10
DIV AB
MOV 20H,A
MOV 21H,B
MOV A,20H
MOVC A,@A+DPTR
MOV P2,A ;送出十位数字
CLR P0.3
LCALL DELAY
SETB P0.3
MOV A,21H
MOVC A,@A+DPTR
MOV P2,A ;个位
CLR P0.2
LCALL DELAY
SETB P0.2
JB P3.2,NI
SJMP ALARM
NI: JB P3.7,DISP
SJMP NIGHT
SJMP DISP
ALARM: CLR TR0
MOV RGY,P1
MOV P1,#10010000B;急救车模式,全红
MOV R6,#0FFH
LOOP: LCALL DELAY
DJNZ R6,LOOP
SETB TR0
MOV P1,RGY
SJMP DISP
TOSUB: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R4,REI
MOV R4,#20
DJNZ SECOND,REI
CJNE R5,#25,CWE
MOV R5,#5
MOV SECOND,#5
JNB P1.2,WE
CLR P1.4
SETB P1.3
CLR P1.2
RETI
WE: CLR P1.7
SETB P1.6
CLR P1.5
RETI
CWE: MOV R5,#25
MOV SECOND,#25
JNB P1.3,WE2
MOV P1,#00110000B
RETI
WE2: MOV P1,#10000100B
RETI
REI: RETI
NIGHT: MOV TIME,#4;夜间模式
LOOPL: MOV P1,#01001000B
LCALL DELAY1
MOV P1,#00H
LCALL DELAY1
DJNZ TIME,LOOPL
LJMP MAIN
DELAY: MOV R7,#100
DJNZ R7,$
RETI
DELAY1: MOV DTIME1,#6
LOOP3: MOV DTIME2,#200
LOOP1: MOV DTIME3,#200
LOOP2: DJNZ DTIME3,LOOP2
DJNZ DTIME2,LOOP1
DJNZ DTIME1,LOOP3
RETI
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
以上是我之前的完成的课程设计的电路图和源程序
接下来是我之前设计的功能:
以上!
下一期就上部分改造后的代码。