仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
1. 设计一个智能十字路口交通灯控制器。
2.用单片机控制控制LED红、黄、绿指示灯,模拟指示十字路口通行状态。
3.控制东西、南北方向的十字路口交通信号灯。
4.东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。
5.东西方向红灯时间=南北方向绿灯时间+黄灯缓冲时间,反之亦然。
6.鼓励新创意,增加新功能。
第二章 系统设计方案2.1设计思路
1.采用AT89S52单片机作为主控芯片及外围控制芯片,设计十字路口交通灯控制器的硬件电路。
2.采用AT89S52单片机汇编语言,完成十字路口交通灯控制器的软件编程。
3.采用LED显示和中断定时电路,利用定时器T0产生每10ms一次的中断,每100次中断为1s。对两个方向分别显示红、绿、黄灯,以及相应的剩余时间(倒计时)。
4.用独立式按键实现特殊车辆(消防车、救护车、警车)通行的控制功能。
5.设置闯红灯报警功能
2.2方案设计
利用AT89S52单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,数码管显示剩余时间
。红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯,8个共阴极数码管显示剩余时间。
设计文档目录:
目录
第一章 绪论 1
1.1设计目的 1
1.2设计内容 1
第二章 系统设计方案 2
2.1设计思路 2
2.2方案设计 2
第三章 系统硬件电路设计 3
3.1 AT89S52单片机 3
3.1.1晶振电路设计 5
3.1.2复位电路设计 5
3.2显示部分电路设计 6
3.2.1数码管选择 6
3.2.2十字路口交通灯设计 6
3.3系统硬件总电路图 7
第四章 系统软件程序设计 8
4.1主程序设计 8
4.1.1总体流程图 8
4.2其他子程序设计 9
4.2.1循环流程控制思路 9
4.3单片机源程序设计 10
第五章 调试与仿真 15
5.1 Proteus软件系统仿真 15
5.2仿真结果 15
第六章 总结 19
参考文献 21
完整文档见本文尾部附件。
单片机源程序如下:部分源码,完整见附件
- ;***********************************************
- ;***********************************************
- ;*********内存、IO口分配************************
- SHANSHUO EQU 20H ;闪烁标志
- JISHU1 EQU 30H ;计数变量
- JISHU2 EQU 31H
- TIME_0 EQU 32H ;中断变量
- TIME_1 EQU 33H ;
- SHUCHU EQU P0 ;数码管段输出
- G_1 BIT P1.0 ;定义LED
- Y_1 BIT P1.1
- R_1 BIT P1.2
- G_2 BIT P1.3
- Y_2 BIT P1.4
- R_2 BIT P1.5
- WEI1 BIT P2.0 ;数码管片选
- WEI2 BIT P2.1
- WEI3 BIT P2.2
- WEI4 BIT P2.3
- K1 BIT P3.0 ;紧急按键
- ;********************************************
- ORG 0000H
- SJMP START
- ORG 000BH ;定时器0中断入口
- LJMP T0_0
- ORG 0030H
- START:
- MOV P1,#0 ;LED高电平有效,清零
- MOV P2,#0 ;数码管片选高电平有效,清零
- CLR SHANSHUO ;闪烁标志清零
- CLR JISHU1 ;计数变量清零
- CLR JISHU2 ;
- CLR TIME_0 ;中断变量清零
- CLR TIME_1 ;
- MOV TMOD,#01H ;定时器0方式1
- MOV TH0,#3CH ;装初值,50MS
- MOV TL0,#0B0H ;
- SETB EA ;开总中断
- SETB ET0 ;开定时器中断
- SETB TR0 ;启动定时器
- ;***************状态1*************************
- ZT1:
- MOV P1,#0 ;LED清零
- MOV JISHU1,#83 ;计数装初值
- MOV JISHU2,#80 ;
- MOV R6,JISHU1 ;
- MOV R7,JISHU2 ;
- SETB G_1 ;东西绿灯亮
- SETB R_2 ;南北红灯亮
- AA: CALL DISPLAY ;显示
- MOV A,R7 ;
- CJNE A,#0,AA ;判断时间是否已到
- ;*************状态2***************************
- ZT2:
- MOV P1,#0 ;LED清零
- MOV JISHU1,#3 ;计数器重装初值
- MOV JISHU2,#3 ;
- MOV R6,JISHU1 ;
- MOV R7,JISHU2 ;
- SETB Y_1 ;东西黄灯点亮
- SETB R_2 ;南北红灯继续亮
- BB: JNB SHANSHUO,CC ;判断闪烁标志位
- SETB Y_1 ;是一则点亮黄灯
- AJMP QW ;跳到显示
- CC: CLR Y_1 ;是零则熄灭黄灯,达到闪烁的效果
- QW: CALL DISPLAY ;显示
- MOV A,R6 ;
- CJNE A,#0,BB ;判断是否到了三秒
- CLR SHANSHUO ;清闪烁
- ;*************状态3***************************
- ZT3:
- MOV P1,#0 ;LED清零
- MOV JISHU1,#60 ;计数器重新装初值
- MOV JISHU2,#63 ;
- MOV R6,JISHU1 ;
- MOV R7,JISHU2 ;
- SETB R_1 ;东西红灯点亮
- SETB G_2 ;南北绿灯点亮
- EE: CALL DISPLAY ;显示
- MOV A,R6 ;
- CJNE A,#0,EE ;判断时间是否到了
- ;*************状态4***************************
- ZT4:
- MOV P1,#0 ;LED清零
- MOV JISHU1,#3 ;计数器重新装初值
- MOV JISHU2,#3 ;
- MOV R6,JISHU1 ;
- MOV R7,JISHU2 ;
- SETB R_1 ;东西红灯点亮
- SETB Y_2 ;南北黄灯点亮
- FF: JNB SHANSHUO,QR ;判断闪烁位是1/0
- SETB Y_2 ;1则点亮黄灯
- SJMP QE ;显示
- QR: CLR Y_2 ;0则熄灭黄灯
- QE: CALL DISPLAY ;显示
- MOV A,R6 ;
- CJNE A,#0,FF ;判断时间到没
- CLR SHANSHUO ;闪烁清零
- LJMP START ;跳 循环
- ;**************中断子程序*********************
- T0_0:
- CLR EA ;关总中断
- MOV TH0,#3CH ;重新装初值
- MOV TL0,#0B0H ;
- INC TIME_0 ;定时器变量加1
- INC TIME_1 ;
- MOV A,TIME_0 ;
- CJNE A,#0AH,NEXT ;判断是否到了500MS
- MOV TIME_0,#0 ;到则清变量
- CPL SHANSHUO ;给闪烁位取反
- JB K1,NEXT ; 按键K1处理,紧急处理
- MOV A,P1 ;读取当前LED显示
- MOV P1,#0 ;LED清零
- MOV P0,#0 ;P0口输出0
- MOV P2,#0 ;P2口输出0,不显示
- SETB R_1 ;点亮红色指示灯
- SETB R_2 ;点亮红色指示灯
- JNB K1,$ ;等待按键松开
- MOV P1,A ;P1口LED还原
- NEXT: MOV A,TIME_1 ;
- CJNE A,#20,QUIT ;判断是否到了1S,没到则退出
- MOV TIME_1,#0 ;到则清变量
- DEC R7 ;寄存器自减一
- DEC R6 ;寄存器自减一
- QUIT: SETB EA ;开总中断
- RETI ;中断返回
- ;**************显示子程序*********************
- DISPLAY:
- PUSH ACC ;进堆栈
- MOV A,R7 ;装载东西方向显示缓存值到寄存器A
- MOV B,#0AH ;寄存器B装载10
- DIV AB ;进制转换
- MOV DPTR,#TAB ;十位
- MOVC A,@A+DPTR ;查表,获得东西方向10位上的显示段码
- MOV SHUCHU,A ; 显示段码输出到显示端口
- SETB WEI1 ; 10位的数码管位选信号设置为1,点亮数码管
- CALL DELAY1MS ; 延时1ms
- CLR WEI1 ; 10位的数码管位选信号设置为0,熄灭数码管
- MOV A,B ;个位
- MOV DPTR,#TAB ;查表,获得东西方向个位上的显示段码
- MOVC A,@A+DPTR ;
- MOV SHUCHU,A ;显示段码输出到显示端口
- SETB WEI2 ;个位的数码管位选信号设置为1,点亮数码管
- CALL DELAY1MS ;延时1ms
- CLR WEI2 ;个位的数码管位选信号设置为0,熄灭数码管
- MOV A,R6 ;装载东西方向显示缓存值到寄存器A
- MOV B,#0AH ;寄存器B装载10
- DIV AB ;进制转换
- MOV DPTR,#TAB ;十位
- MOVC A,@A+DPTR ;查表,获得南北方向10位上的显示段码
- MOV SHUCHU,A ;显示段码输出到显示端口
- SETB WEI3 ;10位的数码管位选信号设置为1,点亮数码管
- CALL DELAY1MS ;延时1ms
- CLR WEI3 ;10位的数码管位选信号设置为0,熄灭数码管
- MOV A,B ;个位
- MOV DPTR,#TAB ;查表,获得东西方向个位上的显示段码
- MOVC A,@A+DPTR ;
- MOV SHUCHU,A ;显示段码输出到显示端口
- SETB WEI4 ;个位的数码管位选信号设置为1,点亮数码管
- CALL DELAY1MS ;延时1ms
- CLR WEI4 ;个位的数码管位选信号设置为0,熄灭数码管
- POP ACC ;退出堆栈
- RET ;返回
- ;**************** 延时 ***********************
- DELAY1MS: ;延时1ms子函数
- MOV R1,#01H
- MOV R2,#0FFH
- DD: DJNZ R2,DD
- DJNZ R1,DD
- RET
- ;****************共阳数码管字符表******************************
- TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- END
复制代码
十字路口交通灯.docx
(570.03 KB, 售价: 3 E币)
源码和Proteus源程序.zip
(139.59 KB, 售价: 3 E币)
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|
|