交通灯设计文档格式.docx
- 文档编号:20537428
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:9
- 大小:64.03KB
交通灯设计文档格式.docx
《交通灯设计文档格式.docx》由会员分享,可在线阅读,更多相关《交通灯设计文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
2设计要求
1.了解交通灯的工作原理。
2.学习交通灯与单片机的接口电路设计和编程。
3.要求实现十字路口一组红、绿、黄灯的工作情况。
具体做法是通过数码管显示其对应的时间,采用点亮发光二极管模拟交通灯的实际情况。
4.南北方向、东西方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。
3实验原理
1硬件电路原理
主体电路:
交通灯自动控制模块。
这部分电路主要由80C51单片机的I/O端口、定时计数器、外部中断扩展等组成。
本实验只模拟了十字路口一组交通灯的工作情况,具体实现步骤如下:
设计时,用P1口作为输出。
程序的初始化是南北方向的红灯亮,东西方向绿灯亮;
然后南北方向红灯亮,东西方向绿灯闪三秒;
接着是南北方向红灯亮,东西方向黄灯亮三秒;
南北方向经过30秒后,南北方向绿灯亮,东西方向的红灯亮;
然后南北方向绿灯闪三秒,东西方向红灯亮;
接着是南北方向黄灯亮三秒,东西方向红灯亮,在持续30秒;
一个周期是红灯亮30秒,绿灯亮24秒,绿灯闪3秒,黄灯亮3秒,一共是60秒。
2软件设计原理
(1)单片机中断系统基本结构
中断是一项重要的计算机技术,是处理正常工作与紧急状态的好办法,是实现人机实时交互的重要途径,在单片机应用系统中,中断技术得到了广泛应用。
当CPU查询到系统有中断请求时,如果系统处于中断允许状态,CPU将停止当前的工作,响应中断请求,转向中断服务,中断服务完成后,返回原程序继续执行当前任务,这叫单片机中断。
能让CPU产生中断的信号源叫中断源。
8051单片机有NT0、INT1、T0、T1、TI、RI六个中断源,但只有EX0、ET0、EX1、ET1、ES五个向量;
INT0、INT1:
外部中断源,由P3.2和P3.2引脚输入。
T0、T1:
定时/计数器中断,当定时/计数器产生溢出时,置位中断请求标志TF请求中断处理。
RI、TI:
串行中断,RI是接收,TI为发送。
单片机串行口接收到一个字符后RI置1,发送完一个字符TI置1。
值得注意的是,RI、TI在响应中断后,必须由用指令将其复位。
本实验设计用到的是定时器0中断,中断地址是000BH。
(2)中断响应
CPU在执行程序的过程中,在每个机器周期的S5P2对中断标志位按中断优先级进行查询,一旦查询到有中断请求,CPU只要不在执行同级或高级的中断服务程序和当前指令(RETI指令或访问IE、IP的指令除外)执行完毕两种情况,则响应中断。
4实验流程图
1实现方法
在设计中利用定时计数器0中断的方法来控制灯的亮的时间。
延时时间用软件方法延时实现闪烁。
利用P1口的P1.0-P1.5分别代表,南北方向红、黄、绿,东西方向红、黄、绿。
2流程图
实验流程图
5实验代码及分析
实验代码:
ORG0000H
AJMPMAIN
ORG000BH;
定时计数器0中断
AJMPTINT
ORG0030H
MAIN:
MOVDPTR,#TAB;
送段码地址
MOVSP,#50H;
堆栈送50H,堆栈一般在内部RAM的30H-7FH单元中开辟
MOVTMOD,#06H;
计数器0,工作方式2
MOVIE,#82H;
总中断开,定时器0中断开
MOVTH0,#0FEH ;
定时器计数初值置为0FEH,外部选2Hz脉冲实现一秒计数功能
MOVTL0,#0FEH ;
用定时计数器工作在2方式下,自动重装计数初值
SETBTR0 ;
开启定时计数器0
MOVA,#00H ;
累加器送00H,用于送数据给SBUF显示段码
MOVR0,#29 ;
R0送29,用于显示红灯倒计时
MOVR1,#23 ;
R1送23,用于显示绿灯倒计时
MOVR6,#00H ;
R6送00H,用于判断程序转移
MOVP1,#1EH ;
P1送初值1EH,P1.0-P1.5分别代表,南北方向红、黄、绿,东西方向红、黄、绿
LOOP:
AJMPLOOP;
等待定时器0中断
TINT:
CJNER6,#00H,L1;
R6不等于00H,跳到L1
南北方向红灯亮,东西方向绿灯亮
CJNER0,#6,ZD1 ;
不等于6东西方向绿灯还未到24秒,跳到ZD1,返回中断,R0从29减到6时,已计数24秒
MOVR1,#2 ;
R1送2,显示东西方向绿灯闪烁倒计时
INCR6 ;
R6自加
AJMPZD1 ;
跳到ZD1
L1:
CJNER6,#01H,L2 ;
R6不等于01H,跳到L2
CPLP1.5 ;
东西方向绿灯闪烁,用软件延时,红灯状态不变
ACALLDEL ;
调用延时子程序
P1.5再取反,实现闪烁
CJNER0,#3,ZD1 ;
R0不等于3绿灯闪烁还未到3秒,跳到ZD1,返回中断
MOVR1,#2 ;
R1送2,显示东西方向黄灯亮倒计时数据
INCR6 ;
AJMPZD1 ;
L2:
CJNER6,#02H,L3 ;
R6不等于02H,跳到L3
CLRP1.4 ;
东西方向黄灯亮
SETBP1.5 ;
东西方向绿灯停止闪烁,灭
CJNER0,#0,ZD1 ;
R0不等于0黄灯亮还未到3秒,跳到ZD1,返回中断
MOVR0,#23 ;
R0送23,用于显示南北方向绿灯倒计时
MOVR1,#29 ;
R1送29,用于显示东西方向红灯倒计时
L3:
CJNER6,#03H,L4 ;
R6不等于03H,跳到L4
MOVP1,#33H ;
东西方向红灯亮,南北方向绿灯亮
CJNER1,#6,ZD1 ;
不等于6南北方向绿灯还未到24秒,跳到ZD1,返回中断,R1从29减到6时,已计数24秒
MOVR0,#2 ;
R1送2,显示南北方向绿灯闪烁倒计时
INCR6 ;
AJMPZD1 ;
L4:
CJNER6,#04H,L5 ;
R6不等于04H,跳到L5
CPLP1.2 ;
南北方向绿灯闪烁,用软件延时,红灯状态不变
ACALLDEL ;
CPLP1.2 ;
P1.2再取反,实现闪烁
CJNER1,#3,ZD1 ;
R1不等于3南北方向绿灯闪烁还未到3秒,跳到ZD1,返回中断
MOVR0,#2 ;
R0送2,显示南北方向黄灯亮倒计时数据
INCR6 ;
AJMPZD1 ;
L5:
CJNER6,#05H,ZD1 ;
R6不等于05H,跳到ZD1,返回中断
CLRP1.1 ;
南北方向黄灯亮
SETBP1.2 ;
CJNER1,#0,ZD1 ;
MOVR0,#29 ;
R0送29,用于显示南北方向红灯倒计时
MOVR1,#23 ;
R1送23,用于显示东西方向绿灯倒计时
MOVR6,#00H ;
R6送00H,使程序实现循环
ZD1:
ACALLDISPLAY ;
调用显示子程序
DECR0 ;
R0自减
DECR1 ;
R1自减
RETI ;
返回中断
DISPLAY:
MOVA,R0 ;
显示南北方向倒计时,要显示的数送累加器,进行除法操作
MOVB,#10 ;
被除数为10
DIVAB ;
A除以B,商给A,余数给B
MOVR3,A ;
A中数据送给R3
MOVA,B ;
B中数据送给A
MOVCA,@A+DPTR ;
送段码数据
MOVSBUF,A ;
显示数据
S1:
JBCTI,S2 ;
检查TI,判断是否送完,为送完等待
AJMPS1
S2:
MOVA,R3 ;
商送A
显示余数
MOVSBUF,A ;
往SBUF送数据,用于显示
S3:
JBCTI,S4 ;
AJMPS3
S4:
MOVA,R1 ;
显示东西方向倒计时,要显示的数送累加器,进行除法操作
MOVB,#10 ;
MOVR3,A ;
MOVA,B ;
余数送A
MOVCA,@A+DPTR ;
MOVSBUF,A ;
S5:
JBCTI,S6 ;
AJMPS5
S6:
MOVA,R3 ;
MOVCA,@A+DPTR ;
S7:
JBCTI,RE ;
AJMPS7
RE:
RET ;
子程序返回
DEL:
MOVR5,#10 ;
软件延时子程序
D1:
MOVR4,#50
D2:
MOVR7,#250
DJNZR7,$
DJNZR4,D2
DJNZR5,D1
RET ;
TAB:
DB03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H ;
段码表
END
6小结
本次实验是单片机课程中比较重要的一个实验,该实验用到了很多有关中断,子程序调用,软件延时等多种编程方法。
开始设计实验时,没有思路,经过老师讲解,我找到了思路,但在编程过程中出现了很多问题,有的指令没记住,有的中断不会用,最主要的是代码太长特别容易出错误。
有一段代码,我在调试时,一直进入死循环,一直没找到,最后在老师的帮助下,找到了错误的原因,原来我在子程序中,用到了主程序中的寄存器忘了压栈。
就因为这个小问题,我整整调了两天。
以后再编程过程中一定要细心,在程序调用时,一定要注意堆栈的使用。
参考文献
李广弟,朱月秀,冷祖祁.《单片机基础》.北京航空航天大学出版社.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 设计