暑假单片机学习之路之一

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

以上是我之前的完成的课程设计的电路图和源程序
接下来是我之前设计的功能:

主程序的流程图

两个中断的流程图

以上!

下一期就上部分改造后的代码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值