单片机课程设计报告.docx
《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
![单片机课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-2/2/eed52823-a0cf-4f1e-87f6-74a19fdb5cd2/eed52823-a0cf-4f1e-87f6-74a19fdb5cd21.gif)
单片机课程设计报告
单片机应用及其接口技术课程设计
交通灯模型的设计课程设计报告
交通灯模型的设计课程设计报告
一、课程设计题目:
交通灯模型的设计
二、实验目的:
(1)掌握P3.3输入、P1口输出。
(2)掌握串行口工作方式及编程方法,学习串行LED驱动的方法。
(3)加强对单片机和汇编语言的认识,充分掌握和理解设计各部分的工作原理、设计过程。
(4)用单片机模拟实现具体应用,使个人设计能够真正使用。
(5)把理论知识与实践相结合,充分发挥个人能力,并在实践中得到锻炼。
(6)提高利用已学知识分析和解决问题的能力。
(7)提高实践动手能力。
三、课程设计任务和基本要求:
1、设计任务
设计和真实交通等功能相同的交通灯模型,通过LED显示通过时间,并且可以通过按键设定东西、南北单向通行。
2、基本要求
运用定时器做一十字路口交通灯模型,并实现手动控制交通灯单向通行。
三、课程设计题目分析:
1、设计要点
(1)利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
用红、绿、黄发光二极管作信号灯。
如图上图所示。
设东西向为主干道,南北为支干道。
(2)处于常允许通行的状态,支干道有车来时才允许通行。
主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。
(3)干道均有车时,两者交替允许通行,主干道每次放行30秒,支干道每次放行25秒。
(4)绿灯亮到红灯亮的转换过程中,要亮3秒黄灯作为过渡。
2、工作原理
(1)
口做输出口,与12个发光二极管相连,实现定时点亮相应二极管。
使用
口的第二功能,串行口在工作方式0下作为同步移位寄存器使用,
用作输入输出端,
引脚上输出移位时钟信号,频率固定为
,驱动
显示通行倒计时。
、
做外部中断输入口,外接拨码开关实现手动控制交通灯单向通行。
使用定时器延时1s作倒计时逐秒递减使用,在8051时钟频率为12MHz的情况下,定时计数器最大可定时65.536ms。
故要使用软件计数和硬件定时相结合的方法:
。
用定时计数器0定时50ms,则必须让其工作在方式1下,其初始值为:
。
(2)P3.3口做输入口,外接一脉冲,每输入一个脉冲,P1口按十六进制加一。
(3)P1口做输出口,编写程序,使P1口接的8个发光二极管L1—L8按16进制加一方式点亮发光二极管。
(4)用MCS-51系统的定时器的计数功能,使其把计数结果利用串行口通过传入并出芯片74LS164驱动LED数码管显示出来。
四、课程设计的电路设计:
五、汇编语言程序设计:
1、程序流程图
2、汇编程序
利用延时程序实现倒计时功能程序:
ORG0000H
LJMPSTART
ORG0003H
LJMPK1
ORG0013H
LJMPK2
ORG0030H
//主程序
START:
SETBEA;通过中断启动紧急情况,设置外部中断
SETBEX0
SETBPX0
CLRIT0
SETBEX1
SETBPX1
CLRIT1
MOVP1,#00H;P1口置0,选择启动交通灯
SETBP1.2;东西绿灯亮
SETBP1.3;南北红灯亮
N2:
MOVR3,#30;倒计时30s
N1:
LCALLDISP;调用串口驱动LED程序
DECR3
LCALLDL1s;调用延时1s程序
CJNER3,#00,N1
CLRP1.2;东西绿灯灭
SETBP1.1;东西黄灯亮
MOVR3,#03H;黄灯亮3s
N3:
LCALLDL1s
DJNZR3,N3
MOVP1,#00H
SETBP1.0;东西红灯亮
SETBP1.5;南北绿灯亮
MOVR3,#25;倒计时25s
N4:
LCALLDISP;调用串口驱动LED程序
DECR3
LCALLDL1s
CJNER3,#00H,N4
CLRP1.5;南北绿灯灭
SETBP1.4;南北黄灯亮
MOVR3,#03H;黄灯亮3s
N5:
LCALLDL1s
DJNZR3,N5
MOVP1,#00H
LJMPSTART;交通灯循环点亮
//串口驱动LED程序
DISP:
MOVA,R3
MOVB,#10
DIVAB
MOVR5,A
MOVA,B
MOVB,R5
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
MOVR2,#0FFH
DJNZR2,$
MOVA,B
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
RET
//延时程序
DL512:
MOVR0,#0FFH;延时512us
LOOP1:
DJNZR0,LOOP1
RET
DL10ms:
MOVR1,#14H;延时10ms
LOOP2:
LCALLDL512
DJNZR1,LOOP2
RET
DL1s:
MOVR2,#50;延时1s
LOOP3:
LCALLDL10ms
DJNZR2,LOOP3
RET
TAB:
DB0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e0h
DB0feh,0f6h,0eeh,3eh,9ch,7ah,9eh,8eh
//中断程序
K1:
MOVP1,#00H;紧急情况1,南北通行
SETBP1.0
SETBP1.5
MOVA,#00
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
RETI
K2:
MOVP1,#00H;紧急情况2,东西通行
SETBP1.3
SETBP1.2
MOVA,#00
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
RETI
END
采用定时器方式实现延时控制的程序
ORG0000H
JMPMAIN
ORG0003H;定时器T0中断入口地址
LJMPBRT0
ORG0013H;定时器T1中断入口地址
LJMPBRT1
TIMEEQU30H
TIME15SEQU31H
TIME3SEQU32H
MAIN:
ANL20H,#00H
MOVTIME3S,#3
MOVTIME15S,#20
MOVTMOD,#11H;设置T0和T1工作于方式1下
MOVTH0,#3CH
MOVTL0,#0B0H;50ms定时初值的赋值
SETBEA;开中断
START:
LCALLKEYWORK
JB00H,FUN0
AJMPSTART
KEYWORK:
MOVP3,#0FFH;置P3口为输入状态
JNBP3.0,KEY0
RET
KEY0:
LCALLDL10MS
JBP3.0,OUT0
SETB00H
CLR01H
CLR02H
OUT0:
RET
FUN0:
MOVR4,#20
//15s南北向绿灯、东西向红灯点亮
MOVA,#0AFH
MOVP1,A
LCALLDISP;调用串口驱动LED程序
LCALLTIME_15S
//15s后,南北向的绿灯闪烁3次,东西向保持红灯点亮
MOVR3,#6
FLASH1:
CPLP1.6
LCALLDISP;调用串口驱动LED程序
LCALLDL05S
DJNZR3,FLASH1
//南北向黄灯亮,东西向保持红灯
MOVA,#0CFH
MOVP1,A
LCALLDISP;调用串口驱动LED程序
LCALLTIME_3S
//南北向红灯,东西向绿灯
MOVA,#77H
MOVP1,A
LCALLDISP;调用串口驱动LED程序
LCALLTIME_15S
//东西向绿灯闪烁,南北向红灯
MOVR3,#6
FLASH2:
CPLP1.3
LCALLDISP;调用串口驱动LED程序
LCALLDL05S
DJNZR3,FLASH2
//东西向黄灯亮,南北向仍然保持红灯
MOVA,#7BH
MOVP1,A
LCALLDISP;调用串口驱动LED程序
LCALLTIME_3S
LJMPSTART
//串口驱动LED程序
DISP:
MOVA,R3
MOVB,#10
DIVAB
MOVR5,A
MOVA,B
MOVB,R5
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
MOVR2,#0FFH
DJNZR2,$
MOVA,B
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVSBUF,A
TAB:
DB0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e0h
DB0feh,0f6h,0eeh,3eh,9ch,7ah,9eh,8eh
RET
//15s定时子程序
TIME_15S:
SETBET0
SETBTR0
MOVTIME,TIME15S
LOOP1:
MOVA,TIME
CJNEA,#00H,LOOP1
CLRTR0
RET
//3s定时子程序
TIME_3S:
MOVTIME,TIME3S
SETBET0
SETBTR0
LOOP2:
MOVA,TIME
CJNEA,#00,LOOP2
CLRTR0
RET
//5s定时子程序
DL05S:
MOVR5,#10
MOVTH1,#3CH
MOVTL1,#0B0H
SETBET1
SETBTR1
RET
//T0中断服务程序
BRT0:
PUSHACC
PUSHPSW
CLRTR0
MOVTH0,#3CH
MOVTL0,#0B0H
DJNZR4,OVER
MOVR4,#20
DECTIME
OVER:
SETBTR0
POPPSW
POPACC
RETI
//T1中断服务程序
BRT1:
PUSHACC
PUSHPSW
CLRTR1
MOVTH1,#3CH
MOVTL1,#0B0H
DECR5
SETBTR1
POPPSW
POPACC
RETI
DL10MS:
MOVR0,#14H
LOOP4:
MOVR1,#250
LOOP3:
DJNZR1,LOOP3
DJNZR0,LOOP4
RET
END
六、课程设计心得体会:
对于交通灯这个题目,由于以前做过类似相关的实验,觉得这个比较简单而且做出的东西也比较直观,在确定题目之后,联系课本以前做过的实验,初步完成了电路设计方案。
虽然感觉交通灯程序没什么难的,但是也许是起初想的太简单,设计时到了细节处,也出了不少问题,而且很难被检查出来。
起初我是采用定时器方式实现延时控制的,但是经过多次编译、调试、修改之后还是无法运行出正确的结果,由于课程设计的时间限制我就改用延时程序实现倒计时功能,得到了正确的结果。
通过这次课程设计,加强了我们动手、思考和解决问题的能力,使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。
在设计的过程中我发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
在以后学习中我会尽量改正。