交通灯设计-单片机(汇编)_第1页
交通灯设计-单片机(汇编)_第2页
交通灯设计-单片机(汇编)_第3页
交通灯设计-单片机(汇编)_第4页
交通灯设计-单片机(汇编)_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太原理工大学现代科技学院单片机原理与接口技术课程设计设计名称交通灯控制器专业班级信息13-1班学号2013100000姓名 指导教师武娟萍太原理工大学现代科技学院专业班级信息13-1班学生姓名00课程名称“单片机原理与应用技术”课程设计设计名称交通灯控制器设计周数1.5周指导教师武娟萍设计任务主要设计参数设计一个以单片机为核心的交通灯控制器设计参数要求:系统包括人行道直行、左转、右转以及基本交通灯功能。交叉道路上的车辆交替通行时间为25S,黄灯亮5S且每秒闪亮1次。(2)系统除基本交通灯功能外,还具备倒计时、时间设置、紧迫环境处置以及根据具体环境手动节制等功能。设计内容设计要求通过查阅手册和有关文献资料,掌握独立分析和解决实际问题的能力。通过实际电路方案的设计分析比较、设计计算、元件选取、仿真、安装调试等环节,掌握实用电路的分析方法和工程设计方法。熟悉常用仪器设备的使用方法,掌握实验调试方法,提高动手能力。主要参考资料单片机原理与接口技术,李晓林等,电子工业出版社,2015。学生提交归档文件课程设计说明书1份课程设计任务书注:1.课程设计完成后,学生提交的归档文件应按照:封面—任务书—说明书—图纸的顺序进行装订上交(大张图纸不必装订)2.可根据实际内容需要续表,但应保持原格式不变。指导教师签名:日期:2016.06.30目录TOC\o"1-4"\h\u8824交通灯控制器 页共40页附录1:汇编源程序 ORG0000H LJMPMAIN;转入主程序 ORG0003H ;外中断0,p3.2 LJMPTZ1 ;调时跳转 ORG000BH ;定时计数器0 LJMPTZ2 ;内部计时中断 ORG0013H ;外中断1,p3.3 LJMPTZ3 ;各类功能处理(如救护车通过) ORG1000H ;程序存放地址MAIN: MOVTMOD,#01H ;设置定时计数器0工作方式1,定时功能。 MOVTL0,#0F0H ;初值填入,12Mhz,计时10ms MOVTH0,#0D8H SETBEA ;开总中断 SETBET0 ;开放T0中断 SETBTR0 ;启动T0计时 SETBEX0 ;外中断0开启中断允许 SETBEX1 ;外中断1开启中断允许 SETBIT0 ;外中断0边沿触发 CLR IT1 ;外中断1低电平触发 SETBPT0 ;外中断1为高优先级 MOV50H,#00H;智能环境初始变量(南北) MOV51H,#00H;智能环境初始变量(东西);;;;;;;;;;智能环境一级情况初始赋值;;;;;;;;;; MOV60H,#35 MOV61H,#20 MOV63H,#15 MOV64H,#10;;;;;;;;;;;;一级赋值结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;智能环境二级情况初始赋值;;;;;;;;;; MOV65H,#45 MOV66H,#25 MOV67H,#10 MOV68H,#5;;;;;;;;;;;二级赋值结束;;;;;;;;;;;;;;;;;;;;;; MOV40H,#25 ;南北绿灯直通行时间 MOV41H,#15 ;南北向左转绿灯时间 MOV42H,#25 ;东西绿灯直通行时间 MOV43H,#15 ;东西左转向绿灯时间START: MOV30H,40H ;南北绿灯直通行时间 MOV31H,41H ;南北向左转绿灯时间 MOV32H,42H;东西绿灯直通行时间 MOV33H,43H ;东西左转向绿灯时间 MOVR0,30H ;南北向绿灯时间写入 MOVA,30H ;计算东西向红灯时间 ADD A,#10 ;两次黄灯等待时间共10S ADDA,31H ;加上南北左转向绿灯时间 MOVR2,A ;东西方向红灯写入 MOVR7,#25 ;延时使用 MOVR6,#15 ;黄灯闪烁使用 MOVR5,#10 ;黄灯闪烁使用LOOP1: SETBP3.4 ;P3.4置1,第二功能要求 MOVP1,#0FFH ;交通灯全灭 SETBP3.0 ;P3.0置1以便检查输入 MOVP1,#01H ;南北绿灯亮;其余红灯亮 LCALLXIANSHI ;调用显示程序 DJNZR7,LOOP1 ;1S显示结束 MOVR7,#25 ;重新赋值循环变量 DECR2 ;东西方向时间减一 DJNZR0,LOOP1 ;南北时间减一,并做循环变量 MOVR0,#3 ;南北方向黄灯显示LOOP2: MOVP1,#0FFH ;交通灯灭 MOVP1,#03H ;东西向红灯,南北直通灭LOOP11: CLRP1.0 ;南北黄灯灭 LCALLXIANSHI ;调用显示程序相当于延时40ms DJNZR5,LOOP11 ;南北黄灯灭400msLOOP22: SETBP1.0 ;南北黄灯亮 LCALLXIANSHI ;调用显示程序相当于延时40ms DJNZR6,LOOP22 ;南北黄灯亮600ms DECR2 ;东西向时间减一 MOVR5,#10 ;重置循环变量 MOVR6,#15 DJNZR0,LOOP2 ;南北向黄灯时间减一,并做循环变量 MOVR0,#2 ;全部红灯2SLOOP5: MOVP1,#00H ;四路红灯亮起 LCALLXIANSHI ;调用显示程序第二作用延时40ms DJNZR7,LOOP5 ;1s显示 MOVR7,#25 ;重新赋值循环变量 DECR2 ;东西方向时间减一 DJNZR0,LOOP5 ;南北方向时间减一并且做循环变量 MOVR0,31H ;南北左转时间写入LOOP3: MOVP1,#0FFH ;交通灯灭 MOVP1,#04H ;南北向左转向绿灯亮,其他红灯 LCALLXIANSHI ;调用显示第二作用延时40ms DJNZR7,LOOP3 ;1S显示 MOVR7,#25 ;秒循环并重新赋值 DEC R2 ;东西时间减一 DJNZR0,LOOP3 ;南北时间减一并循环 MOVR0,#3 ;黄灯3sLOOP4: MOVP1,#0FFH ;交通灯灭 MOVP1,#0CH ;东西向红灯,南北左转灭LOOP12: CLRP1.2 ;南北左转黄灯灭 LCALLXIANSHI ;调用显示程序相当于延时40ms DJNZR5,LOOP12 ;南北左转黄灯灭400msLOOP23: SETBP1.2 ;南北左转黄灯亮 LCALLXIANSHI ;调用显示程序相当于延时40ms DJNZR6,LOOP23 ;南北左转黄灯亮600ms DECR2 ;东西向时间减一 MOVR5,#10 ;重置循环变量 MOVR6,#15 DJNZR0,LOOP4 ;南北向黄灯时间减一,并做循环变量 MOVR0,#2 ;全部红灯2S LOOP6: MOVP1,#00H ;四路红灯亮起 LCALLXIANSHI ;调用显示程序 DJNZR7,LOOP6 ;1s显示 MOVR7,#25 ;重新赋值循环变量 DECR2 ;东西方向时间减一 DJNZR0,LOOP6 ;南北方向时间减一并且做循环变量 MOVR2,32H ;东西向绿灯时间写入 MOVA,32H ;南北向红灯时间计算 ADDA,#10 ;东西向两次黄灯等待时间加入 ADDA,33H ;东西向左转时间加入 MOVR0,A ;南北红灯时间写入LOP1: SETBP3.4 ;P3.4置1,第二功能要求 MOVP1,#0FFH ;交通灯全灭 SETBP3.0 ;P3.0置1以便检查输入 MOVP1,#10H ;东西绿灯亮;其余红灯亮 LCALLXIANSHI ;调用显示程序 DJNZR7,LOP1 ;1S显示结束 MOVR7,#25 ;重新赋值循环变量 DECR0 ;南北方向时间减一 DJNZR2,LOP1 ;东西方向时间减一,并做循环变量 MOVR2,#3 ;东西方向黄灯显示LOP2: MOVP1,#0FFH ;交通灯灭 MOVP1,#30H ;南北向红灯,东西直通向灭LOOP13: CLRP1.4 ;东西黄灯灭 LCALLXIANSHI ;调用显示程序相当于延时40ms DJNZR5,LOOP13 ;东西黄灯灭400msLOOP24: SETBP1.4 ;东西黄灯亮 LCALLXIANSHI ;调用显示程序相当于延时40ms DJNZR6,LOOP24 ;东西黄灯亮600ms DECR0 ;南北向时间减一 MOVR5,#10 ;重置循环变量 MOVR6,#15 DJNZR2,LOP2 ;东西向黄灯时间减一,并做循环变量 MOVR2,#2 ;全部红灯2SLOP5: MOVP1,#00H ;四路红灯亮起 LCALLXIANSHI ;调用显示程序 DJNZR7,LOP5 ;1s显示 MOVR7,#25 ;重新赋值循环变量 DECR0 ;南北方向时间减一 DJNZR2,LOP5 ;东西方向时间减一并且做循环变量 MOVR2,33H ;东西左转绿灯时间写入LOP3: MOVP1,#0FFH ;交通灯灭 MOVP1,#40H ;东西向左转向绿灯亮,其他红灯 LCALLXIANSHI ;调用显示 DJNZR7,LOP3 ;延时1s MOVR7,#25 ;秒循环并重新赋值 DEC R0 ;南北时间减一 DJNZR2,LOP3 ;东西时间减一并循环 MOVR2,#3 ;黄灯3sLOP4: MOVP1,#0FFH ;交通灯灭 MOVP1,#0C0H ;南北向红灯,东西左转灭LOOP14: CLRP1.6 ;东西左转黄灯灭 LCALLXIANSHI ;调用显示程序相当于延时40ms DJNZR5,LOOP14 ;东西左转黄灯灭400msLOOP25: SETBP1.6 ;东西左转黄灯亮 LCALLXIANSHI ;调用显示程序相当于延时40ms DJNZR6,LOOP25 ;东西左转黄灯亮600ms DECR0 ;南北向时间减一 MOVR5,#10 ;重置循环变量 MOVR6,#15 DJNZR2,LOP4 ;南北向黄灯时间减一,并做循环变量 MOVR2,#2 ;全部红灯2S LOP6: MOVP1,#00H ;四路红灯亮起 LCALLXIANSHI ;调用显示程序 DJNZR7,LOP6 ;1s显示 MOVR7,#25 ;重新赋值循环变量 DECR0 ;东西方向时间减一 DJNZR2,LOP6 ;南北方向时间减一并且做循环变量 LJMPSTART ;一轮循环结束,返回再次循环;;;;;;;;;;;;;;;;调整时间服务程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;注意:调整后的时间在第二轮计时才会显示,第一轮仍按照原定时间;TZ1: MOVR1,#00 ;调整寄存器赋初值 MOVR3,#00TZ11: LCALLXIANSHI1 ;调用显示程序 LCALLXIANSHI1 ;连同下面调时共延时5X40ms LCALLXIANSHI1 LCALLXIANSHI1 JNBP3.0,FANHUI1;P3.0为调整结束按钮 JB P0.6,T2 ;若调整南北直通时间则跳转 JBP0.7,T3 ;若调整南北左转时间则跳转 JB P2.6,T4 ;若调整东西直通时间则跳转 JB P2.7,T5 ;若调整东西左转时间则跳转 LJMPTZ11 ;均无效时转回延时继续检测T2: MOVR1,40H ;南北直通调整时间写入 LCALLXIANSHI1 ;调用显示并且延时40ms JBP3.6,T11 ;若调整+无效则跳转 INCR1 ;南北直通时间加1 CJNER1,#60,T21 ;南北直通最多限制时间60S MOVR1,#00H ;若R1>=60则赋值为0重新加载 AJMPT21 ;南北向加法调整时间结束,转入赋值T11: JBP3.7,T21 ;调整-无效则跳转 DEC R1 ;南北向直通时间减1 CJNER1,#00H,T21;最大调整时间60S MOVR1,#60 ;若超出则重新赋值T21: MOV40H,R1 ;调整后的时间写入 LJMPTZ11 ;南北向调整完毕返回重新检测FANHUI1:LJMPFANHUI ;因为JNB跳转范围限制,在此补加一次跳转T3: MOVR1,41H ;南北左转调整时间写入 LCALLXIANSHI1 ;调用显示并且延时40ms JBP3.6,T12 ;若调整+无效则跳转 INCR1 ;南北左转时间加1 CJNER1,#30,T22 ;南北左转最多限制时间30S MOVR1,#00H ;若R1>=30则赋值为0重新加载 AJMPT22 ;南北向左转加法调整时间结束,转入赋值T12: JBP3.7,T22 ;调整-无效则跳转 DEC R1 ;南北左转向时间减1 CJNER1,#00H,T22;最大调整时间30S MOVR1,#30 ;若超出则重新赋值T22: MOV41H,R1 ;调整后的时间写入 LJMPTZ11 ;南北左转向调整完毕返回重新检测T4: MOVR3,42H ;东西向直通时间写入 LCALLXIANSHI1 ;调用显示程序第二功能延时40ms JBP3.6,T13 ;若加法输入无效则跳转 INCR3 ;东西直通时间加1 CJNER3,#60,T23 ;东西直通最大时间60S MOVR3,#00H ;超过60s则重新赋值 AJMPT23 ;加法调整完毕,调入赋值T13: JBP3.7,T21 ;若减法输入按钮无效,则跳转 DEC R3 ;东西直通时间减1 CJNER3,#00H,T23;最大时间60S MOVR3,#60 ;若减到界限则重新赋值T23: MOV42H,R3 ;将调整结果写入 LJMPTZ11 ;东西直通调整完毕,返回重新检测T5: MOVR3,43H ;东西左转调整初值转入 LCALLXIANSHI1 ;调用显示程序,第二功能延时40MS JBP3.6,T14 ;若加法输入端无效则跳转 INCR3 ;东西左转时间+1 CJNER3,#30,T24 ;最大调整时间30S MOVR3,#00H ;超出重新赋值 AJMPT24 ;加法调整完毕转入赋值T14: JBP3.7,T22 ;若减法无效则跳转 DEC R3 ;东西左转时间减1 CJNER3,#00H,T24;最大调整时间30S MOVR3,#30 ;若溢出则重新赋值T24: MOV43H,R3 ;将调整时间写入 LJMPTZ11 ;东西左转调整完毕跳转重新检测FANHUI: RETI ;子程序结束,返回 ;;;;;;;;;;;;;;;;各类情况调整;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1.东南西北+转向全部为红灯——救护车模式;;;;;;;;;;;;;;2.东南西北+转向黄灯闪烁__临晨模式;;;;;;;;;;;;;;;;;;3.只允许南北向通行功能;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4.只允许东西向通行功能;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5.只允许南北左转通行功能;;;;;;;;;;;;;;;;;;;;;;;;;;;6.只允许东西左转通行功能;;;;;;;;;;;;;;;;;;;;;;;;;;;7.交通灯全灭手动指挥模式;;;;;;;;;;;;;;;;;;;;;;;;;;;8.智能交通灯调控模式;;;;;;;;;;;;;;;;;;;;;TZ3: JNBP3.5,H1 ;若P3.5有效则启动黄灯闪烁模式 JNB P3.1,H2 ;若P3.1有效则进入全灭手动指挥模式 JBP0.6,H3 ;若P0.6有效则进入单独南北向通行模式 JB P0.7,H4 ;若P0.7有效则进入单独南北向左转通行模式 JBP2.6,H5 ;若P2.6有效则进入单独东西向通行模式 JBP2.7,H6 ;若P2.7有效则进入单独东西向左转通行模式 JNBP3.6,H07 ;智能模式南北向车多开启 JNBP3.7,H08 ;智能模式东西向车多开启 MOVP1,#00H ;交通灯全部为红灯 MOVP0,#30H ;显示倒计时00 MOVP2,#30H ; JBP3.3,H013 ;若工作模式再次有效则退出 LJMPTZ3 ;返回重新检测H07: LJMPH7 ;辅助JNB扩展传送最大偏移量H08:LJMPH8 ;辅助JNB扩展传送最大偏移量H013: LJMPH13 ;辅助JB扩展传送最大偏移量H2: MOVP0,#00H ;交通灯计时器全灭 MOV P2,#00H ; MOV P1,#0FFH ;交通灯全灭 LJMPTZ3 ;返回重新检测H3: MOVP0,#00H ;交通灯计时器全灭 MOV P2,#00H ; MOV P1,#01H ;南北向直通绿灯亮,其余为红灯 LJMPTZ3 ;返回重新检测H4: MOVP0,#00H ;交通灯计时器全灭 MOV P2,#00H ; MOV P1,#04H ;南北左转向绿灯亮,其余红灯 LJMPTZ3 ;返回重新检测H5: MOVP0,#00H ;交通灯计时器全灭 MOV P2,#00H ; MOV P1,#10H ;东西向直通绿灯亮,其余红灯 LJMPTZ3 ;返回继续检测H6: MOVP0,#00H ;交通灯计时器全灭 MOV P2,#00H ; MOV P1,#40H ;东西向左转绿灯亮,其余红灯 LJMPTZ3 ;返回重新检测H1: SETBP3.4 MOVR3,#50 ;寄存器赋值,黄灯闪烁使用 MOVR4,#50 ; MOVP0,#00H ;交通计时器灭 MOVP2,#00H ; MOVP1,#0AAH ;各路黄灯亮H11: JNBP3.4,H21 ;等待延时10ms SJMPH11 ;H21: SETBP3.4 ; DJNZR3,H11 ;等待延时一共500ms MOVP1,#0FFH ;各路黄灯灭H12: JNBP3.4,H22 ;等待延时10ms SJMPH12 ;H22: SETBP3.4 ; DJNZR4,H12 ;等待延时一共500ms LJMPTZ3 ;闪烁1S完毕返回重新检测;;;;;;;;;;;;;;;;;南北向智能环境控制;;;;;;;;;;;;;;;;;;;;;;;;;H7: MOVA,50H ;将当前智能环境写入累加器 JBACC.1,H41 ;检测当前级别为2则跳转H41H42: INC50H ;智能级别加1 INCA ; JBACC.0,H31 ;检测当前级别为1则跳转H31 JBACC.1,H32 ;检测当前级别为2则跳转H32 LJMPTZ3 ;返回重新检测H31: MOV40H,60H ;智能一级级别写入 MOV41H,61H MOV 42H,63H MOV43H,64H MOVR1,#1 ;调用显示显示当前级别 MOVR3,#0Y1: LCALLXIANSHI1 DJNZR7,Y1 ;延时1S,相当于1S防抖 MOVR7,#25 LJMPTZ3 ;返回重新检测H32: MOV40H,65H ;智能二级级别写入 MOV41H,66H MOV 42H,67H MOV43H,68H MOVR1,#2 ;调用显示显示当前级别 MOVR3,#0Y2: LCALLXIANSHI1 DJNZR7,Y2 ;延时1S,相当于1S防抖 MOVR7,#25 LJMPTZ3 ;返回重新检测H41: MOV50H,#00H ;当然最大级别为2,若超出则从1级开始 LJMPH42 ;返回执行当前级别;;;;;;;;;;;;;;;;;东西向智能环境控制;;;;;;;;;;;;;;;;;;;;;;;;;H8: MOVA,50H ;将当前智能环境写入累加器 JBACC.1,H43 ;检测当前级别为2则跳转H43H44: INC50H ;智能级别加1 INCA JBACC.0,H33 ;检测当前级别为1则跳转H33 JBACC.1,H34 ;检测当前级别为2则跳转H34 LJMPTZ3 ;返回重新检测H33: MOV40H,63H ;智能一级级别写入 MOV41H,64H MOV 42H,60H MOV43H,61H MOVR1,#0 ;调用显示显示当前级别 MOVR3,#1Y3: LCALLXIANSHI1 DJNZR7,Y3 MOVR7,#25 ;延时1S,相当于1S防抖 LJMPTZ3 ;返回重新检测H34: MOV40H,67H ;智能二级级别写入 MOV41H,68H MOV 42H,65H MOV43H,66H MOVR1,#0 ;调用显示显示当前级别 MOVR3,#2Y4: LCALLXIANSHI1 DJNZR7,Y4 ;延时1S,相当于1S防抖 MOVR7,#25 LJMPTZ3 ;返回重新检测H43: MOV50H,#00H LJMPH44H13: RETI ;返回中断;;;;;;;;;;;;;;;T0中断服务程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;完成10MS延时服务;;;;;;;;;;;;;;;;;;TZ2: MOVTL0,#0F0H ;计数器重新赋值初值 MOVTH0,#0D8H ; CLRP3.4 ;P3.4口清零 RETI ;延时程序返回;;;;;;;;;;;;;;;;显示调用程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;交通灯正常工作调用;;;;;;;;;;;;;;;;;;;;;;XIANSHI: MOVA,R0;南北方向时间显示 MOVB,#10 DIVAB ;A放十位,B放个位 ADDA,#10H ;十位位选码 MOVP0,A;输出显示CK0: JNBP3.4,CK1;等待T0溢出10ms SJMPCK0CK1: SETBP3.4 ;P3.4重新置1检测溢出 MOVA,B ;显示个位 ADDA,#20H ;个位位选码 MOVP0,A ;输出显示CK2: JNBP3.4,CK3;等待T0溢出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论