C51单片机的交通灯控制系统Word文档格式.doc
- 文档编号:810674
- 上传时间:2023-04-29
- 格式:DOC
- 页数:13
- 大小:542KB
C51单片机的交通灯控制系统Word文档格式.doc
《C51单片机的交通灯控制系统Word文档格式.doc》由会员分享,可在线阅读,更多相关《C51单片机的交通灯控制系统Word文档格式.doc(13页珍藏版)》请在冰点文库上搜索。
在程序设计时,我会将其设置为下降沿触发方式。
3、数字显示电路设计:
选用共阴极两位数码管。
两位数码管A~G引脚各通过一个300Ω的限流保护电阻分别接P2.0~P2.6,位选1引脚和2引脚分别接P0.0口低两位,P0口低两位接5kΩ的上拉电阻使其可以输出高电平。
4、其他部分电路:
XTAL1端和XTAL2端之间接一个12MHz的晶振,再各接一个30pF的普通电容后接地;
RST复位端一端经10uF的电解电容接+5V电源,一端经一个10K的电阻接地。
4、系统电路总图:
四、程序设计:
1、定时器初值的计算:
由于要求定时时间相当精确,我用定时器T0进行定时。
根据公式可知若已知要求的定时时间为t,则定时器的初值为x(其中fosc=12MHz):
需要定时器的定时时间为50ms,根据公式计算得出X=15536,因此定时器初值的低位TL0=(0B0H),高位TH0=(3CH)。
2、程序流程图:
2.1主程序流程
主程序主要是对单片机进行初始化。
初始化首先要开放总中断、定时器T0中断以及外部中断0和外部中断1。
其次是设置中断优先级,把外中断0设置为高优先级,外中断1设置为低优先级。
再次是给定时器T0装顶初值,然后后是启动定时器,是使定时器开始定时。
最后是等待中断。
装定时器初值,启动定时器
循环动态显示
开始
开放总中断、定时器T0中断以及外部中断
设置中断优先级
2.2紧急情况中断处理流程
紧急情况中断处理包括两部分,第一部分是出现紧急情况可以手动使东西、南北方向红灯全亮,而且直到紧急状况解除后才能恢复正常通车。
这就要求紧急状况解除前不能退出外中断1处理程序,因此要在外中断1处理程序处设置一无限循环。
第二部分是紧急状况解除。
为了使外中断1处理程序退出无限循环,可用中断嵌套使机器转去执行外中断0处理程序,而外中断0处理程序修改了寄存器R2的值,中断返回后由于寄存器R2的值的改变使外中断1处理程序跳循环。
2.2.1外中断1处理程序(低优先级)
N
外中断1入口
数码管显示为0
置R2的值为0
R2的值为0?
中断返回
东西、南北方向红灯亮
Y
2.2.2外中断0处理程序(高优先级)
外中断0入口
使R2的值不为0
1.3定时器中断处理流程
3、程序源代码:
ORG0000H
AJMPSTART
ORG0003H;
AJMPSERV0
ORG000BH;
AJMPSERV1
ORG0013H;
定时器中断入口
AJMPSERV2
ORG0030H
START:
MOVIE,#87H
MOVIP,#01H;
设置中断优先级
MOVTMOD,#01H
MOVTCON,#05H
MOVTH0,#3CH
MOVTL0,#0B0H;
装定时器初值
MOVDPTR,#TAB;
装表首地址
MOVP1,#0F6H
MOVR0,#20
MOVR5,#00H
MOVR6,#00H
SETBTR0;
启动定时器
LOOP1:
MOVP0,#02H;
循环动态显示,由10秒开始倒计时
MOVA,R6
MOVCA,@A+DPTR
MOVP2,A
ACALLD10MS
MOVP0,#01H
MOVA,R5
AJMPLOOP1
SERV0:
MOVR2,#0FFH;
正常状态恢复程序,使R0的值不为0
RETI
SERV1:
DJNZR0,NEXT;
未到1秒,则转到NEXT
CJNER5,#01,DHE0
AJMPDHE3
DHE0:
CJNER5,#00H,DHE1
CJNER6,#00H,DHE2
MOVR6,#01H
MOVP1,#0F5H
AJMPOUT0
DHE1:
DECR5;
减1秒
AJMPOUT0
DHE2:
MOVR6,#00H
MOVR5,#09H
OUT0:
MOVR0,#20
DHE3:
MOVP0,#00H
MOVP2,#3FH;
显示为0
MOVA,P1
MOVR1,#05H
JNBACC.0,CHE0;
东西方向红灯亮,则转到CHE0
YELL0:
SETBP1.0
SETBP1.1;
东西方向绿灯灭
CLRP1.2
ACALLDMS
SETBP1.2
DJNZR1,YELL0;
东西方向黄灯闪烁5次
MOVP1,#0EEH;
东西方向红灯亮,南北方向绿灯亮
SJMPNEXT1
CHE0:
JNBACC.3,CHE1
YELL1:
SETBP1.3
SETBP1.4;
南北方向绿灯灭
CLRP1.5
SETBP1.5
DJNZR1,YELL1;
南北方向黄灯闪烁5次
CHE1:
MOVP1,#0F5H;
南北方向红灯亮,东西方向绿灯亮
NEXT1:
MOVR0,#20
MOVR6,#01H;
重置显示为10秒
NEXT:
MOVTH0,#3CH;
重装定时器初值
MOVTL0,#0B0H
SERV2:
MOVP0,#00H
MOVP2,#3FH;
MOVR2,#00H;
紧急状况服务程序,使R2的值为0
MOVP1,#0F6H
LOOP3:
CJNER2,#00H,OUT1;
R2的值为0,则无限循环,直到执行SERV0状
MOVR3,#02H;
态恢复程序,使R0的值不为0才返回
DJNZR3,LOOP3
OUT1:
RETI
DMS:
MOV32H,#4;
延时子程序,延时0.4秒
DL0:
MOV31H,#200
DL1:
MOV30H,#250
DL2:
DJNZ30H,DL2
DJNZ31H,DL1
DJNZ32H,DL0
RET
D10MS:
MOV33H,#50;
延时子程序,延时10毫秒
DL3:
MOV34H,#100
DL4:
DJNZ34H,DL4
DJNZ33H,DL3
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
五、仿真结果与分析
在PROTEUS软件仿真中的结果如下:
1、初始状态
2、东西路口的绿灯亮,南北路口的红灯亮
3、东西路口绿灯灭,黄灯闪烁
4、东西路口红灯亮,南北路口的绿灯亮
5、南北路口绿灯灭,黄灯闪烁
由以上仿真结果可以看出,电路图和源程序设计完全满足设计要求。
六、课程设计总结与体会
通过这次课程设计我巩固和加深课堂所学知识;
掌握一般软硬件的设计方法和查询、运用资料的能力;
掌握通过定时器进行定时的基本方法、中断控制的原理和方法以及LED控制的方法。
这次课程设计,我将课本上的理论知识和实际的应用有机的结合起来,提高分析和解决问题的实际能力,通过对汇编语言程序代码的设计、编写、修改以提高自己实际编程能力。
总的来说,这次课程设计的难度不算大,整个设计、调试任务都有我独立完成。
而在PROTEUS软件仿真中的结果可以看到我的设计完全符合要求。
在设计过程中我还认识到,遇到问题时应回到书本,查找实际问题所需的理论知识,将理论和实际结合起来。
这样,在解决问题的同时还能提高我对理论知识的理解。
-13-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 单片机 交通灯 控制系统