1、5、 若到点阵全灭时(64s结束)仍未猜出正确数字,游戏失败,点阵显示“囧”。6、 设置游戏机开关。【实验所用仪器及元器件】 1.计算机 2.数字系统与逻辑设计实验开发板【实验软件】Quartus 【资源利用】二、 程序设计1、 程序流程图是2、 逻辑框图键盘模块3、 MDS图rs=1三、程序分析1、 引脚注释clk时钟st游戏开始scan_out3.0键盘的行扫描输出信号key_row3.0键盘的列输入信号ms1输入确认键ms2猜数字rs 复位bee_out蜂鸣器输出ld_out状态指示灯seg_out 数码管显示cat_out数码管排列显示led_row_out点阵行显示led_col_o
2、ut点阵列显示2、 键盘数字data0=1111110;-0 data10110000-1 data21101101-2 data31111001-3 data40110011-4 data51011011-5 data61011111-6 data71110000-7 data81111111-8 data91111011-93、 状态设置程序设置程序状态当st=1时,游戏开始当ms=1时,确认输入数字,可以猜数字当ms=1时,将输入猜测的数字与原始数字做对比,计算A,B当rs=1时,程序复位清零P1:PROCESS(st,ms1,ms2,rs,tm,done,state,clk_tm) V
3、ARIABLE count_anyway:INTEGER RANGE 0 TO 2:=0; BEGIN next_state=state; IF rs=1 THEN next_state IF st=s1;-游戏开始 ELSE next_state IF ms1= THEN确认输入数字 next_state=s2; ELSE next_state IF ms2= THEN -开始猜数字=s3; ELSIF tm= THEN=over; WHEN s3 = IF done= THEN 判断完成,数字对比结束 END IF; WHEN over =-游戏开始,初始化 ELSIF tf=0 THEN
4、 IF tm= next_state ELSE next_statenext_state-其他,程序置0 END CASE; END IF; END PROCESS p1;4、 分频器将50MHz的时钟频率分成1KHzP2:PROCESS(clk) -fenping VARIABLE count3:INTEGER: VARIABLE count4: IF clkevent AND clk= IF count4=24999 THEN clk_scan=NOT clk_scan; count4: IF count3=24999999 THEN clk_tm=NOT clk_tm; count3:
5、ELSE count3:=count3+1; ELSE count3:=count4+1; END IF; END PROCESS p2;5、 点阵计数64s倒计时,在点阵显示,判断当tf=1时,led赋值为2,显示2号点阵,即为笑脸,游戏通过,当计时结束,count_clear=1,led赋值4,tm,赋值0,显示为空,当bee=1时,蜂鸣器响,提示猜测错误P3:PROCESS(clk_tm,count_clear,tf,bee) -count down IF tf= led=2; ELSIF count_clear= count_down led=4; tm= ELSIF bee=3; E
6、LSIF state=s2 THEN IF clk_tmevent AND clk_tm= IF count_down=64 THEN tm count_down=1; ELSE count_down CASE cat IS WHEN 111110 = cat011111seg END CASE; WHEN s1 =x1;=x2;=x3;=x4; WHEN s2 =seg_a;=seg_b;=y1;=y2;=y3;=y4; WHEN s3 = WHEN over = WHEN OTHERS =NULL; END CASE; cat_out=cat; seg_out=seg; END PROCE
7、SS p4;7、 键盘扫描P5:PROCESS(clk_scan) -scan CASE scan IS WHEN 1110 scan011110111101 scan_out seg_a=data1; WHEN 2 =data2; WHEN 3 =data3; WHEN 4 =data4; CASE num_b IS seg_b END PROCESS p6;9、 输入判断当state=idle时,初始化;当state=s1时,从键盘输入初始数字,并将键盘数字分别赋值给x1,x2,x3,x4,即为要猜数字;当state=s2时,蜂鸣器初始化,键盘输入猜测数字,并将键盘数字赋值给y1,y2,y
8、3,y4,即为猜测数字;当state=s3时,判断:将x1分别于y1,y2,y3,y4对比,若x1=y1,则A加1,若x1=x2或x3或x4,则B加1,将x2分别于y1,y2,y3,y4对比,若x2=y2,则A加1,若x1=x1或x3或x4,则B加1,将x3分别于y1,y2,y3,y4对比,若x3=y3,则A加1,若x1=x1或x2或x4,则B加1,将x4分别于y1,y2,y3,y4对比,若x4=y4,则A加1,若x1=x1或x2或x3,则B加1,p7:PROCESS(clk_scan) -key in VARIABLE count1:INTEGER RANGE 0 TO 3: VARIABL
9、E count2: VARIABLE count5:INTEGER RANGE 0 TO 4: VARIABLE count6: VARIABLE count11:INTEGER : BEGIN x1 x2 x3 x4 y1 y2 y3 y4 num_a num_b tf key1 key2 count1: count2: count5: count6: done count_clear bee NULL; END CASE;=data7;=data5;=data6;=data8;=data9; CASE count1 IS WHEN 0 = IF key1 /= x4 THEN x1 IF key1 /= x1 THEN x2 IF key1 /= x2 THEN x3 IF key1 /= x3 THEN x4 bee CASE count2 IS IF key2 /= y4 THEN y1=key2; IF key2 /= y1 THEN y2 IF key2 /= y2 THEN y3 IF key2 /= y3 THEN y4
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1