#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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)