表2-1
表中的“×”代表是红灯亮(也代表逻辑上的0),“√”是代表绿灯亮(也代表逻辑上的1),依上表,就可以向相应的端口送逻辑值。 2.2. 交通灯显示时间的理论分析与计算
东西和南北方向的放行时间的长短是依据路口的各个方向平时的车流量来设定,并且S1、S2、S3、S4各个状态保持的时间之有严格的对应关系,其公式如下示。
16
T-S1+T-S2=T-S3 T-S2=T-S4 T-S1=T-S3
我们可以依据上述的标准来改变车辆的放行时间。按照一般的规则,一个十字路口可分为主干道和次干道,主干道的放行时间大于次干道的放行时间,我们设定值时也应以此为参考 2.3. 电路模块 2.3.1.
(1)
LED数码管显示模块
静态显示方式:静态显示方式是指当显示器显示某一字符时,发光二极管的位选始终被选中。在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制。由于单片机本身提供的I/O口有限,实际使用中,通常通过扩展I/O口的形式解决输出口数量不足的问题。
静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。随着显示器位数的增加,需要的I/O口线也将增加。
(2)动态显示方式:动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个
17
数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,可以既保证亮度,又保证显示。若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)。 数码管显示子程序:
DISP: MOV A,R2 MOV B,#10 DIV AB MOV 60H,A MOV 61H,B MOV A,R3 MOV B,#10 DIV AB MOV 62H,A MOV 63H,B MOV 40H,#04H MOV R5,#0FEH MOV R0,#60H LLP: MOV A,@R0
18
MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,R5 MOV P2,A LCALL DELAY1
MOV P2, RL A MOV R5,A INC R0 DJNZ 40H,LLP RET
DELAY1: ; MOV R4,#12 DL2: MOV R7,#12 DJNZ R7,$ DJNZ R4,DL2 RET
TABLE:DB 3FH,24H,5dH,75H,66H DB 73H,7bH,25H,7fH,77H END
#0FFH ;令显示器熄灭,以免产生残影延时子程序 19
2.3.2. LED红绿灯显示模块
本实验有四种状态:
状态1, 东西绿灯亮,南北红灯亮,此时P1.0口—P1.7口的高低电平为#0BBH。 子程序:
ST1: MOV P1,#0EBH ;第一个状态,主干道亮绿灯、支干道亮红灯; CJNE R1,#0FFH,TZ1 MOV R1,#00H DEC 20H DEC 23H TZ1: MOV R2,20H MOV R3,23H
LCALL DISP ;调用显示子程序。 MOV A,20H CJNE A,#00H,ST1 MOV 20H,#25
状态2, 东西黄灯亮,南北红灯亮,此时P1.0口—P1.7口的高低电平为#0BDH。 子程序:
ST2: MOV P1,#0EDH ;第二个状态,主干道亮黄灯、支干道亮红灯;
20