交通信号灯的程序设计

交通信号灯的程序设计,第1张

#include<stdio.h>

#include<ctype.h>

#include<graphics.h>

#include<stdlib.h>

#include<math.h>

#include<conio.h>

#define X 800 //图形区域宽度

#define Y 600 //图形区域高度

#define WD 100 //单向车道宽度

#define LR 100 //车道长度

#define R 10 //红绿灯半径

void drawroad()

void pSound()

void baoshi()

void main(){

initgraph(X,Y)

setbkcolor(LIGHTGRAY)

cleardevice()

drawroad()

getch()

closegraph()

}

void drawroad(){

int midx=X/2,midy=Y/2,i

setlinecolor(YELLOW)

setlinestyle(PS_DASH,2)

moveto(midx-WD/2,midy-WD-100)

lineto(midx-WD/2,0)

moveto(midx+WD/2,midy-WD-100)

lineto(midx+WD/2,0)

moveto(midx-WD/2,midy+WD+100)

lineto(midx-WD/2,Y)

moveto(midx+WD/2,midy+WD+100)

lineto(midx+WD/2,Y)

moveto(midx-WD-100,midy-WD/2)

lineto(0,midy-WD/2)

moveto(midx-WD-100,midy+WD/2)

lineto(0,midy+WD/2)

moveto(midx+WD+100,midy-WD/2)

lineto(X,midy-WD/2)

moveto(midx+WD+100,midy+WD/2)

lineto(X,midy+WD/2)

setlinestyle(PS_SOLID,3)

moveto(midx-WD,midy-WD-100)

lineto(midx-WD,0)

moveto(midx+WD,midy-WD-100)

lineto(midx+WD,0)

moveto(midx-WD,midy-WD-100)

linerel(2*WD,0)

for(i=0i<25i++)

line(midx-WD+(i-2)*10,midy-WD-100+10,midx-WD+(i-2)*10,midy-WD-100+40)

moveto(midx-WD,midy+WD+100)

lineto(midx-WD,Y)

moveto(midx+WD,midy+WD+100)

lineto(midx+WD,Y)

moveto(midx-WD,midy+WD+100)

linerel(2*WD,0)

for(i=0i<25i++)

line(midx-WD+(i-2)*10,midy+WD+100-10,midx-WD+(i-2)*10,midy+WD+100-40)

moveto(midx-WD-100,midy-WD)

lineto(0,midy-WD)

moveto(midx-WD-100,midy+WD)

lineto(0,midy+WD)

moveto(midx-WD-100,midy-WD)

linerel(0,2*WD)

for(i=0i<25i++)

line(midx-WD-100+10,midy-WD+(i-2)*10,midx-WD-100+40,midy-WD+(i-2)*10)

moveto(midx+WD+100,midy-WD)

lineto(X,midy-WD)

moveto(midx+WD+100,midy+WD)

lineto(X,midy+WD)

moveto(midx+WD+100,midy-WD)

linerel(0,2*WD)

for(i=0i<25i++)

line(midx+WD+100-10,midy-WD+(i-2)*10,midx+WD+100-40,midy-WD+(i-2)*10)

setfillstyle(BS_HATCHED,HS_BDIAGONAL)

fil

简单I/O实验(交通灯控制)

一.实验要求

以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理。

二.实验目的

1.学习在单片机系统中扩展简单I/O接口的方法。

2.学习数据输出程序的设计方法。

3.学习模拟交通灯控制的方法。

4.学习双色灯的使用。

三.实验电路及连线

四.实验说明

1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。

2.双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。

五.实验程序框图

程序框图:

源代码:

ORG 0000H

LJMP START

ORG 0040H

START:

MOV SP,#60H

LCALL STATUS0 初始状态(都是红灯)

CIRCLE: LCALL STATUS1 南北绿灯,东西红灯

LCALL STATUS2 南北绿灯闪转黄灯,东西红灯

LCALL STATUS3 南北红灯,东西绿灯

LCALL STATUS4 南北红灯,东西绿灯闪转黄灯

LJMP CIRCLE

STATUS0: 南北红灯,东西红灯

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

MOV R2,#10 延时1秒

LCALL DELAY

RET

STATUS1: 南北绿灯,东西红灯

MOV DPTR,#08300H

MOV A,#5AH 南北绿灯,东西红灯

MOVX @DPTR,A

MOV R2,#50 延时5秒

LCALL DELAY

RET

STATUS2: 南北绿灯闪转黄灯,东西红灯

MOV DPTR,#8300H

MOV R3,#03H 绿灯闪3次

FLASH: MOV A,#5FH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

MOV A,#5AH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

DJNZ R3,FLASH

MOV A,#0AH 南北黄灯,东西红灯

MOVX @DPTR,A

MOV R2,#10 延时1秒

LCALL DELAY

RET

STATUS3: 南北红灯,东西绿灯

MOV DPTR,#8300H

MOV A,#0A5H

MOVX @DPTR,A

MOV R2,#50 延时5秒

LCALL DELAY

RET

STATUS4: 南北红灯,东西绿灯闪转黄灯

MOV DPTR,#8300H

MOV R3,#03H 绿灯闪3次

FLASH1: MOV A,#0AFH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

MOV A,#0A5H

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

DJNZ R3,FLASH1

MOV A,#05H 南北红灯,东西黄灯

MOVX @DPTR,A

MOV R2,#10 延时1秒

LCALL DELAY

NOP

RET

DELAY: 延时子程序

PUSH 2

PUSH 1

PUSH 0

DELAY1: MOV 1,#00H

DELAY2: MOV 0,#0B2H

DJNZ 0,$

DJNZ 1,DELAY2 延时 100 mS

DJNZ 2,DELAY1

POP 0

POP 1

POP 2

RET

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11361565.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存