交通灯远程控制器的设计
- 格式:doc
- 大小:351.50 KB
- 文档页数:11
1 《单片机原理及应用》 课 程 设 计
题目: 模拟远程交通控制灯设计
班级: 07电子 姓名: 黄 婉 君
学号: 200702131071352
学院:中州大学信息工程学院_
二OO九年十二月十六 日 2
交通灯远程控制灯的设计 一、总体设计 1、任务 交通灯的任务要求为:模拟十字路口的交通灯的亮、灭及闪烁控制及时间显示。. 基本工作原理:根据交通灯的亮灭情况,可以分为四种状态,利用定时计数器每5毫秒产生一次中断,完成对 LED显示模块的刷新,红绿灯的切换。 通过串口对交通灯进行远程控制,实现pc机和单片机之间的通信程序编写,学习单片机和pc机之间的串口连接方法和编程技巧。 2、要求 设计并实现单片机交通灯控制系统,实现以下三种情况下的交通灯控制。 (1) 正常情况下双方向轮流点亮。 (2) 特殊情况时A道运行。 (3) 有紧急车辆通行时,A B道均为红灯。紧急情况优先级高于特殊情况。
R2220R3220R4220R5220D1红D2黄D3绿D4红D5黄D6绿R6220R7220XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51C122pFC222pFC310uFX112MR110kp0.0p0.1p0.2p0.3p0.4p0.5p0.0p0.1p0.2p0.3p0.4p0.5R8220R9
220R10
220
D7红D8黄D9绿
p0.0p0.1p0.2
R11220D10红D11黄D12绿R12220R13220
p0.3p0.4p0.5
XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51A02B018A13B117A24B216A35B315A46B414
A57B513
A68B612
A79B711
CE19AB/BA1
U2
74LS245
162738495
J1
CONN-D9F
3、说明
本任务实现用pc机作为控制机、单片机控制信号灯为从机的远程控制系统。主从机双方除了要有一定的通信格式,波特率外,还要约定一些握手应答信号,即通信协议。 通信协议如下: 3
二、硬件设计 1、 根据总体设计要求,确定系统功能接口,设计出系统的电路原理图。 2、 考虑到交通灯数量比较多,控制信号比较多,对单片机的I/O口进行扩展,使用通用I/O接口芯片8255A来对单片机I/O口进行扩展。若不考虑左行转弯,则南北方向只用红、绿、黄3只灯控制,东西方向也只用红、绿、黄3只灯控制,即共用6只灯。 3、 2个共阴极数码管自左至右以两位数的形式显示秒数。为了保证数码管的亮度,必须保证输入电流的大小,因此,选用3极管作为位驱动放大器。 4、按键模拟紧急情况和特殊情况的发生,当s1 、s2为高电平时(不按按键时)表示正常情况,当s1为低电平时表示紧急情况,s1信号接至INT0*引脚,s2为低电平时表示特殊情况, s2信号接至INT1*引脚(若为矩阵式键盘,可采用扫描方式识别按键)。 三、软件设计 1、画出各个函数流程图。 4 2、写出程序代码。 ORG 0000H LJMP MAIN ORG 0003H LJMP INT_0
A绿灯,B红灯 延时55秒 A绿灯闪烁3次 A黄灯,B红灯 延时2秒 A红灯,B绿灯 延时55秒 B绿灯闪烁3次 B黄灯,A红灯 延时2秒
关中断 保护现场 开中断 A绿灯,B红灯 延时5秒
恢复现场 开中断
关中断
中断0响应 保护现场 A红灯,B红灯 延时10秒 恢复现场 返 回
开 始 中断1响应 5 ORG 0013H
LJMP INT_1 ORG 0023H LJMP INT ORG 1000H MAIN: MOV SP,#60H MOV TMOD,#21H ;定时器1作为串口波特率发生器,定时器0用于5ms的延时程序 MOV TH1,#0F4H ;波特率为2400bit/s MOV TL1,#0F4H SETB TR1 MOV SCON,#50H ;允许串口接收数据 MOV PCON,#00H MOV IE,#95H ;允许串口、外部中断0、中断1中断 SETB IT0 ;外部中断为跳沿触发 SETB IT1 SETB PX0 ;外部中断0为高优先级中断
//正常情况下// A绿灯B红灯55S
MOV P1,#0F3H ;A绿灯B红灯 MOV R0,#55 ;R0放置需显示的时间 MOV 30H,#55 ;30H放A数码管显示的数字,初值为55 MOV 31H,#60 ;31H放B数码管显示的数字,初值为60 BB: MOV R1,#50 ;数码管数字显示一秒 ACALL AA ;调用显示子程序 DEC 30H ;一秒后显示下一个数字 DEC 31H DJNZ R0,BB A闪烁B红灯3秒 MOV 30H,#00 ;A数码管显示0,B数码管的初值为5秒 MOV 31H,#05H MOV R0,#3 CC: MOV P1,#0F3H ;A绿B红0.5S MOV R1,#25 ;0.5S显示延时 ACALL AA MOV P1,#0FBH ;A灭B红0.5S MOV R1,#25 ACALL AA DEC 31H ;一秒后数码管显示下一个数字 DJNZ R0,CC A黄灯B红灯2S MOV P1,#0EBH ;A黄B红 6
MOV R0,#2 ;2S计时 MOV 30H,#02H ;两个数码管显示的初值都为2 MOV 31H,#02H DD: MOV R1,#50 ;一秒的显示延时 ACALL AA DEC 30H ;显示下一个数字 DEC 31H DJNZ R0,DD A红灯B绿灯55S MOV P1,#0DEH MOV R0,#55 MOV 30H,#60 MOV 31H,#55 EE:MOV R1,#50 ACALL AA DEC 30H DEC 31H DJNZ R0,EE A红灯B闪烁3S MOV 30H,#05 MOV 31H,#00H MOV R0,#3 FF: MOV P1,#0DEH MOV R1,#25 ACALL AA MOV P1,#0DFH MOV R1,#25 ACALL AA DEC 30H DJNZ R0,FF A红灯B黄灯2S MOV P1,#0DDH MOV R0,#2 MOV 30H,#02H MOV 31H,#02H GG: MOV R1,#50 ACALL AA DEC 30H DEC 31H DJNZ R0,GG LJMP MAIN
//动态扫描显示子程序,持续时间为20MS// AA:MOV P2,#01H ;P2送位选码,选中第一个数码管 7
MOV A,30H ;将要显示的30H单元的两位数分开,十位送到A,个位送到B MOV B,#10 DIV AB MOV DPTR,#TAB ;DPTR指向段码的首地址 MOVC A,@A+DPTR ;将十位对应的段码送到A中 MOV P0,A ;显示十位,延时5MS LCALL DE_5MS MOV P2,#02H ;选中第二个数码管 MOV A,B ;将个位数送进A MOVC A,@A+DPTR ;将个位数对应的段码送进A MOV P0,A ;显示个位,延时5MS LCALL DE_5MS MOV P2,#04H ;选中第三个数码管 MOV A,31H ;将31H单元的两位数分离,个位送B,十位送A MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P0,A LCALL DE_5MS MOV P2,#08H MOV A,B MOVC A,@A+DPTR MOV P0,A LCALL DE_5MS DJNZ R1,AA RET //5MS延时子程序// DE_5MS: CLR TF0 MOV TH0,#0ECH ;重装初值 MOV TL0,#78H SETB TR0 ;启动定时器 WAIT:JNB TF0,WAIT CLR TR0 RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H DB 0F8H,80H,90H
//串口中断// INT: CLR EA ;关中断 JNB RI,HH ;等待接收数据 CLR RI PUSH ACC ;保护现场 PUSH P0