点阵赛车游戏

上传人:积*** 文档编号:124204782 上传时间:2022-07-24 格式:DOC 页数:34 大小:1,005.50KB
收藏 版权申诉 举报 下载
点阵赛车游戏_第1页
第1页 / 共34页
点阵赛车游戏_第2页
第2页 / 共34页
点阵赛车游戏_第3页
第3页 / 共34页
资源描述:

《点阵赛车游戏》由会员分享,可在线阅读,更多相关《点阵赛车游戏(34页珍藏版)》请在装配图网上搜索。

1、 点阵赛车游戏实验报告 姓名 班级 学号一、规定和任务1.用88点阵进行5秒倒计时显示,如下图所示。 2. 当5秒倒计时结束后,点阵显示下图所示的赛道和赛车的初始位置,赛车游戏开始,并开始计时,用两个数码管显示时间。图中的红色表达赛道,黄色表达赛车的初始位置,箭头表达赛车行进的方向。规定:用BTN1BTN3三个按键分别控制赛车的左移、迈进、右移,最后使赛车在不碰撞赛道的状况下走完全程(即图2中的绿色位置),游戏结束,点阵显示“V”图案,数码管显示走完全程所耗费的时间。当游戏时间超过59秒,或者赛车在行进过程中碰撞赛道,游戏失败,点阵显示“X”图案。通过按键BTN0进行复位,控制点阵返回到初始状

2、态。提高规定:有多种游戏赛道可选,5秒倒计时显示后赛道随机浮现。赛车的初始位置随机浮现。在赛车行进过程中,赛道中随机浮现障碍物(用88点阵中的一种LED表达),通过BTN1BTN3三个按键的控制规避障碍物,走完全程。若赛车遇到障碍物和赛道,则游戏失败。二、 系统设计(涉及设计思路、总体框图、分块设计) 总体框图:三、 仿真波形及波形分析 Button0按下,点阵显示5 1秒后,点阵显示42后,点阵显示33秒后,显示24秒后,显示15秒后,数码管显示5 9两个向左按键,赛车碰壁,显示失败x又复位之后,又54321减下来又开始反复。四、 源程序LIBRARY IEEE;USE IEEE.STD_L

3、OGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY saiche IS PORT( CLOCK:IN STD_LOGIC; button0,button1,button2,button3:IN STD_LOGIC; -四个按键:复位键、右、上、左 ROW:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -控制车道的横向量 COL_RED:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-控制车道的红色列向量 COL_GREEN:OUT STD_L

4、OGIC_VECTOR(7 DOWNTO 0);-控制车道的绿色列向量 LIGHT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -段选输出 LIGHT_EN:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)-位选输出 );END saiche;ARCHITECTURE MLD OF saiche IS SIGNAL CLK1hz,CLK_5K,CLK_1K,CLK_2K,CLK_100hz,CLK_200hz:STD_LOGIC; -1hz,5khz,1Khz,2Khz,100hz,200hz时钟信号 SIGNAL N:INTEGER RANGE 0 T

5、O 6; -产生随机赛道时的判断数 SIGNAL NUM:INTEGER RANGE 0 TO 20; -0号赛道逐点扫描时点的序列 SIGNAL NUM1:INTEGER RANGE 0 TO 19; -1号赛道逐点扫描时点的序列 SIGNAL NUM2:INTEGER RANGE 0 TO 18; -2号赛道逐点扫描时点的序列 SIGNAL NUM3:INTEGER RANGE 0 TO 22; -3号赛道逐点扫描时点的序列 SIGNAL T_HIGH:INTEGER RANGE 0 TO 5; -倒计时高位 SIGNAL T_LOW:INTEGER RANGE 0 TO 9; -倒计时低

6、位 SIGNAL COUNT200:INTEGER RANGE 0 TO 250000; -各分频用的计数 SIGNAL COUNT2:INTEGER RANGE 0 TO 50000; SIGNAL COUNT3:INTEGER RANGE 0 TO 50000; SIGNAL COUNT:INTEGER RANGE 0 TO 50000000; SIGNAL COUNT1:INTEGER RANGE 0 TO 10000; SIGNAL COUNT_100hz:INTEGER RANGE 0 TO 500000; SIGNAL tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,t

7、mp7,tmp8:std_logic;-消抖时用的临时信号 SIGNAL CNT,CNT1:INTEGER RANGE 0 TO 1000; SIGNAL FAIL,SUCCESS,TIME_UP:STD_LOGIC; -FAILS赛车遇到车道的失败信号,SUCCESS赛车到终点的成功信号 -TIME_UP 60s时间到的失败信号 SIGNAL START :INTEGER RANGE 0 TO 6; -START=1 54321计时到的启动信号 SIGNAL TIMES :INTEGER RANGE 0 TO 7; -点阵显示状态鉴别信号 SIGNAL SEL:STD_LOGIC_VECTO

8、R(2 DOWNTO 0); SIGNAL RST,DIRECTION_LEFT,DIRECTION_RIGHT,DIRECTION_UP: STD_LOGIC; - 由四个按键通过消抖解决后,产生的四个控制信号 TYPE DIAN IS ARRAY(INTEGER RANGE ) OF INTEGER RANGE 0 TO 7; SIGNAL SX,SY ,SX1,SY1:INTEGER RANGE 0 TO 7; -SX,SY赛车坐标,SX1,SY1障碍坐标 CONSTANT WY:DIAN(0 TO 18):=(0,0,0,1,2,3,3,3,4,4,4,5,6,7,7,7,4,5,6)

9、; -0号赛道红绿色车道纵坐标,后三个是绿色车道纵坐标 CONSTANT WX:DIAN(0 TO 18):=(0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,7,7,7); -0号赛道红绿色车道的横坐标,后三个是绿色车道横坐标 CONSTANT WY1:DIAN(0 TO 17):=(1,0,1,0,1,2,1,2,4,5,6,7,7,6,5,5,3,4); -1号赛道红绿色车道纵坐标,后两个是绿色车道纵坐标 CONSTANT WX1:DIAN(0 TO 17):=(0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,7,7); -1号赛道红绿色车道的横坐标,后两

10、个是绿色车道横坐标 CONSTANT WY2:DIAN(0 TO 16):=(1,2,1,1,2,3,4,5,4,5,6,6,5,6,7,7,6); -2号赛道红绿色车道纵坐标,后一种是绿色车道纵坐标 CONSTANT WX2:DIAN(0 TO 16):=(0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,7); -2号赛道红绿色车道的横坐标,后一种是绿色车道横坐标 CONSTANT WY3:DIAN(0 TO 20):=(1,1,1,1,0,0,0,0,6,6,6,6,6,6,6,6,1,2,3,4,5); -3号赛道红绿色车道的横坐标,后五个是绿色车道横坐标 CONSTAN

11、T WX3:DIAN(0 TO 20):=(0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,7,7,7,7,7); -0号赛道红绿色车道的横坐标,后五个是绿色车道横坐标 SIGNAL STATE:INTEGER RANGE 0 TO 1; TYPE FIGURE IS ARRAY(INTEGER RANGE ) OF INTEGER RANGE 0 TO 9; SIGNAL SHOW:FIGURE(9 DOWNTO 0); -数码显示 BEGIN p1:PROCESS(CLOCK) -分频部分 BEGIN IF CLOCKEVENT AND CLOCK=1 THEN COUNT

12、=COUNT+1; COUNT1=COUNT1+1; COUNT_100hz=COUNT_100hz+1; COUNT200=COUNT200+1; COUNT2=COUNT2+1; COUNT3=COUNT3+1; IF COUNT=24999999 THEN -1HZ分频 CLK1hz24999999 AND COUNT=49999999 THEN CLK1hz=0; ELSIF COUNT=50000000 THEN COUNT=0; END IF; IF COUNT2=9998 THEN CLK_1K9998 AND COUNT2=19997 THEN CLK_1K=0; ELSIF

13、COUNT2=19998 THEN COUNT2=0; END IF; IF COUNT3=24999 THEN -1KHZ分频 CLK_2K24999 AND COUNT3=49999 THEN CLK_2K=0; ELSIF COUNT3=50000 THEN COUNT3=0; END IF; IF COUNT1=4999 THEN -5KHZ分频 CLK_5K4999 AND COUNT1=9999 THEN CLK_5K=0; ELSIF COUNT1=10000 THEN COUNT1=0; END IF; IF COUNT_100hz=249999 THEN -100HZ分频 C

14、LK_100hz249999 AND COUNT_100hz=499999 THEN CLK_100hz=0; ELSIF COUNT_100hz=500000 THEN COUNT_100hz=0; END IF; IF COUNT200=124999 THEN -200HZ分频 CLK_200hz124999 AND COUNT200=249999 THEN CLK_200hz=0; ELSIF COUNT200=250000 THEN COUNT200=0; END IF; END IF;END PROCESS;P2: PROCESS(CLK_100hz,button0,button1,

15、button2,button3,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7,tmp8) -消抖部分 BEGIN IF(CLK_100hzevent AND CLK_100hz=0)THEN tmp2=tmp1; tmp1=button0; tmp4=tmp3; tmp3=button1; tmp6=tmp5; tmp5=button2; tmp8=tmp7; tmp7=button3; END IF; RST = CLK_100hz AND tmp1 AND (NOT tmp2); DIRECTION_RIGHT =CLK_100hz AND tmp3 AND (NO

16、T tmp4); DIRECTION_UP =CLK_100hz AND tmp5 AND (NOT tmp6); DIRECTION_LEFT =CLK_100hz AND tmp7 AND (NOT tmp8); END PROCESS;p0:PROCESS(CLK_1K) -产生随机数BEGIN IF CLK_1KEVENT AND CLK_1K=1 THEN if TIMES=0 THEN N=N; ELSE IF N=6 THEN N=0; ELSE N=N+1; END IF; END IF; END IF;END PROCESS;p3: PROCESS(CLK_2K)BEGINI

17、F CLK_2Kevent AND CLK_2K=1 THEN IF NUM=20 THEN NUM=0; ELSE NUM=NUM+1; END IF; IF NUM1=19 THEN NUM1=0; ELSE NUM1=NUM1+1; END IF; IF NUM2=18 THEN NUM2=0; ELSE NUM2=NUM2+1; END IF; IF NUM3=22 THEN NUM3=0; ELSE NUM3=NUM3+1; END IF; END IF ; END PROCESS; p4:PROCESS(CLK_5K) BEGINif CLK_5KEVENT AND CLK_5K=

18、1 then IF SEL=111 THEN SEL=000; ELSE SEL=SEL+1; END IF; END IF;END PROCESS; p5: PROCESS(CLK1hz,START,T_HIGH,T_LOW,SUCCESS,FAIL)-数码管显示判断部分 BEGIN IF START=5 THEN -54321游戏开始,START为瞬时值 T_HIGH=5;T_LOW=9; TIME_UP=0; CNT1=0; ELSIF CLK1hzEVENT AND CLK1hz=1 THEN IF SUCCESS=1THEN -成功的话则显示成功所用时间 if CNT1=0 then

19、 T_LOW=9-T_LOW; T_HIGH=5-T_HIGH ; CNT1=CNT1+1; ELSE T_LOW=T_LOW; T_HIGH=T_HIGH ; T_LOW=T_LOW; END IF; ELSIF FAIL=1 THEN - 失败则显示失败时刻值 T_LOW=T_LOW; T_HIGH=T_HIGH ; ELSIF SUCCESS=0 AND FAIL=0 THEN - 正常则倒计时 If T_LOW=0 AND T_HIGH=0 THEN TIME_UP=1; -时间到60S返回TIME_UP信号 ELSIF T_LOW=0 AND T_HIGH/=0 THEN T_LOW

20、=9; T_HIGH=T_HIGH-1; ELSE T_LOW=T_LOW-1; END IF; END IF; END IF; END PROCESS; P6:PROCESS(CLK_5K,T_HIGH,T_LOW,START) - 数码管显示部分 BEGIN IF START/=5 AND START/=6 THEN LIGHT=0000000; ELSIF CLK_5KEVENT AND CLK_5K=1 THEN IF(STATE=1)THEN STATE=0; ELSE STATELIGHT_ENLIGHT_ENLIGHT_EN=111111; END CASE; SHOW(0)=T

21、_LOW;SHOW(1)LIGHTLIGHTLIGHTLIGHTLIGHTLIGHTLIGHTLIGHTLIGHTLIGHTLIGHT=0000000; END CASE; END IF; END PROCESS;p7:PROCESS(RST,CLK_200hz,START,DIRECTION_LEFT,DIRECTION_RIGHT,DIRECTION_UP,SX,SY ) -控制赛车部分 BEGIN IF RST=1 THEN SX=0;SY=2; ELSIF CLK_200hzevent AND CLK_200hz=1 THEN -DIRECTION_LEFT,DIRECTION_RIG

22、HT,DIRECTION_UP脉宽5ms -因此用CLK_200hz时钟检测,避免过多检测到信号或没有检测到方向信号 SX1=2;SY1=3; IF TIMES=0 THEN IF DIRECTION_LEFT=1 then -赛车向左移一格 SY=SY-1; ELSIF (DIRECTION_RIGHT=1) then -赛车向右移一格 SY=SY+1; ELSIF (DIRECTION_UP=1) then -赛车向上移一格 SX -0号赛道判断部分 IF( (SY=0 and SX=0)or (SY=0 and SX=1)or (SY=0 and SX=2)or (SY=1 and SX

23、=3)or (SY=3 and SX=3)or (SY=2 and SX=4)or (SY=3 and SX=5)or (SY=3 and SX=6)or (SY=3 and SX=7)or (SY=4 and SX=0)or (SY=4 and SX=1)or (SY=4 and SX=2)or (SY=5 and SX=3)or (SY=6 and SX=4)or (SY=7 and SX=5)or (SY=7 and SX=6)or (SY=7 and SX=7) then FAIL=1; ELSIF (SY=4 and SX=7)or (SY=5 and SX=7)or (SY=6 a

24、nd SX=7) then SUCCESS=1; ELSE SUCCESS=0;FAIL -1号赛道判断部分 IF( (SY=1 and SX=0)or (SY=0 and SX=1)or (SY=1 and SX=2)or (SY=0 and SX=3)or (SY=1 and SX=4)or (SY=2 and SX=5)or (SY=1 and SX=6)or (SY=3 and SX=3)or (SY=2 and SX=7)or (SY=4 and SX=0)or (SY=5 and SX=1)or (SY=6 and SX=2)or (SY=7 and SX=3)or (SY=7 a

25、nd SX=4)or (SY=6 and SX=5)or (SY=5 and SX=6)or (SY=5 and SX=7) then FAIL=1; ELSIF (SY=3 and SX=7)or (SY=4 and SX=7) then SUCCESS=1; ELSE SUCCESS=0;FAIL -2号赛道判断部分 IF( (SY=1 and SX=0)or (SY=2 and SX=1)or (SY=1 and SX=2)or (SY=1 and SX=3)or (SY=2 and SX=4)or (SY=3 and SX=5)or (SY=4 and SX=6)or (SY=3 an

26、d SX=3)or (SY=5 and SX=7)or (SY=4 and SX=0)or (SY=5 and SX=1)or (SY=6 and SX=2)or (SY=6 and SX=3)or (SY=5 and SX=4)or (SY=6 and SX=5)or (SY=7 and SX=6)or (SY=7 and SX=7) then FAIL=1; ELSIF (SY=6 and SX=7) then SUCCESS=1; ELSE SUCCESS=0;FAIL -3号赛道判断部分 IF( (SY=1 and SX=0)or (SY=1 and SX=1)or (SY=1 and

27、 SX=2)or (SY=1 and SX=3)or (SY=0 and SX=4)or (SY=0 and SX=5)or (SY=0 and SX=6)or (SY=0 and SX=7)or (SY=6 and SX=0)or (SY=6 and SX=1)or (SY=6 and SX=2)or (SY=6 and SX=3)or (SY=3 and SX=3)or (SY=6 and SX=4)or (SY=6 and SX=5)or (SY=6 and SX=6)or (SY=6 and SX=7) then FAIL=1; ELSIF (SY=4 and SX=7)or (SY=

28、5 and SX=7)or (SY=1 and SX=7)or (SY=2 and SX=7)or(SY=3 and SX=7)then SUCCESS=1; ELSE SUCCESS=0;FAIL SUCCESS=0;FAIL=0; END CASE; END IF ; END IF; end process; PROCESS(SEL,RST,SUCCESS,FAIL,N,NUM,NUM1,NUM2,NUM3,SX,SY,SX1,SY1,CLK1hz,START,TIMES,TIME_UP)BEGIN IF RST=1 THEN TIMES=5; START=0; ELSIF START=6

29、 THEN IF SUCCESS=1 THEN TIMES=7; ELSIF TIME_UP=1 OR FAIL=1 THEN TIMES=6; END IF; ELSIF CLK1hzEVENT AND CLK1hz=1 then IF TIMES=0 THEN TIMES=0; ELSE TIMES=TIMES-1; END IF; if START=6 then START=6; else START case SEL is -显示成功字符“V” When 000= ROW=01111111;COL_RED=00000000;COL_GREEN ROW=10111111;COL_RED=

30、01000100;COL_GREEN ROW=11011111;COL_RED=01000100;COL_GREEN ROW=11101111;COL_RED=01000100;COL_GREEN ROW=11110111;COL_RED=00101000;COL_GREEN ROW=11111011;COL_RED=00010000;COL_GREEN ROW=11111101;COL_RED=00000000;COL_GREEN ROW=11111110;COL_RED=00000000;COL_GREEN ROW=11111111;COL_RED=00000000;COL_GREEN c

31、ase SEL is -显示失败字符“X” When 000= ROW=01111111;COL_RED=10000001;COL_GREEN ROW=10111111;COL_RED=01000010;COL_GREEN ROW=11011111;COL_RED=00100100;COL_GREEN ROW=11101111;COL_RED=00011000;COL_GREEN ROW=11110111;COL_RED=00011000;COL_GREEN ROW=11111011;COL_RED=00100100;COL_GREEN ROW=11111101;COL_RED=0100001

32、0;COL_GREEN ROW=11111110;COL_RED=10000001;COL_GREEN ROW=11111111;COL_RED=00000000;COL_GREEN CASE SEL IS -显示字符“5” When 000= ROW=01111111;COL_RED=00111100;COL_GREEN ROW=10111111;COL_RED=00000100;COL_GREEN ROW=11011111;COL_RED=00000100;COL_GREEN ROW=11101111;COL_RED=00111100;COL_GREEN ROW=11110111;COL_

33、RED=00100000;COL_GREEN ROW=11111011;COL_RED=00100000;COL_GREEN ROW=11111101;COL_RED=00100000;COL_GREEN ROW=11111110;COL_RED=00111100;COL_GREEN ROW=11111111;COL_RED=00000000;COL_GREEN CASE SEL IS -4 When 000= ROW=01111111;COL_RED=00100100;COL_GREEN ROW=10111111;COL_RED=00100100;COL_GREEN ROW=11011111

34、;COL_RED=00100100;COL_GREEN ROW=11101111;COL_RED=00111100;COL_GREEN ROW=11110111;COL_RED=00100000;COL_GREEN ROW=11111011;COL_RED=00100000;COL_GREEN ROW=11111101;COL_RED=00100000;COL_GREEN ROW=11111110;COL_RED=00000000;COL_GREEN ROW=11111111;COL_RED=00000000;COL_GREEN CASE SEL IS -3 When 000= ROW=01111111;COL_RED=00111100;COL_GREEN ROW=10111111;COL_RED=00100000;COL_GREEN ROW=11011111;COL_RED=00100000;COL_GREEN ROW=11101111;COL_RED=00111100;COL_GREEN ROW=11110111;COL_RED=00100000;COL_GREEN ROW=11111011;COL_RED=00100000;COL_GREEN=00000000;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!