北邮数电实验报告猜数字文档格式.docx
- 文档编号:19975082
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:22
- 大小:4.61MB
北邮数电实验报告猜数字文档格式.docx
《北邮数电实验报告猜数字文档格式.docx》由会员分享,可在线阅读,更多相关《北邮数电实验报告猜数字文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
初始状态点阵全亮,然后从右下角开始,由右到左、由下到上逐点逐排依次熄灭,间隔时间为1s,共计64s。
3、猜数字:
可以通过4*4键盘进行4位数字输入进行猜数字,且每输入一位数字在数码管(DISP0~DISP3)上显示当前所输入的数字,按确定键(BTN2键)进行确认,此时要根据输入的这组数字给出几A几B,其中:
A前面的数字表示位置正确的数的个数,用DISP5显示B前的数字表示数字正确而位置不对的数的个数,用DISP4显示如正确答案为2134,而猜的人猜5314,则是1A2B,其中有一个4的位置对了,记为1A,而1和3这三个数字对了,而位置没对,因此记为2B,合起来就是1A2B接着猜的人再根据出题者的几A几B继续猜,直到猜中(即4A0B)为止。
4、若数字正确则显示猜数字成功,点阵显示“☺”笑脸;
若输入数字错误系统仍然处于猜数字状态,点阵显示“X”,并用蜂鸣器或led闪烁报警。
5、若到点阵全灭时(64s结束)仍未猜出正确数字,游戏失败,点阵显示“囧”。
6、设置游戏机开关。
提高要求:
1、若数字正确则显示猜数字成功,用蜂鸣器播放一段乐曲。
2、随机产生数字,并不在数码管上显示,进行猜数字游戏,用点阵进行128s计时,即点阵轮询熄灭两次,其他要求同基本功能3、4和5。
3、自拟其他功能。
二、系统设计
设计思路:
首先是状态机的设定,设定了5个状态,分别是idle、s1、s2、s3和over。
idle是空白的等待状态,s1是输入要猜的数字状态,在s2状态输入猜的数字,确定后进入s3状态,没猜对会检测还有没有时间,有时间会回到s2状态,没时间会留在over状态,猜对了也会留在over状态,在s2状态发现没时间后会进入over状态。
详情可见状态框图。
分频器选择了1Hz和1000Hz,1Hz是点阵倒计时的频率,1000Hz是点阵、矩阵键盘、数码管、按键的扫描频率。
点阵倒计时上选择对count_down(倒计时)进行求余和除法运算,求余可以对点阵的每一行进行每次灭一个灯的行为,除法可以确定点阵亮的行数。
在输入数字时进行与前面输入数字的比较,如果发现数字出现重复的情况则不输入数字,直到输入不同的数字为止。
状态框图:
st=1
st=1
tf=0&
tm=0
ms1=1
tm=1
done=1
ms2=1
总体框图:
没有
有
不对,显示X
对
三、仿真波形及波形分析
为了方便仿真,在程序中加入了分辨当前所在状态的信号ld_out,idle状态时,ld_out为1000,s1时ld_out为0100,s2时为0010,s3为0001。
复位游戏开始确认输入的数字确认猜的数字复位
idle状态s1状态s2状态s3状态idle状态
四、源程序
部分代码分析:
分频器:
variablecount3:
integer:
=0;
variablecount4:
begin
ifclk'
eventandclk='
1'
then
ifcount4=12499then
clk_scan<
=notclk_scan;
count4:
ifcount3=12499999then
clk_tm<
=notclk_tm;
count3:
elsecount3:
=count3+1;
endif;
elsecount3:
=count4+1;
endif;
endif;
count3为1Hz的频率,是点阵倒计时的频率;
count4为1kHz的频率,是点阵、按键、数码管、矩阵键盘的扫描频率。
状态转移:
begin
next_state<
=state;
ifres='
thennext_state<
=idle;
else
casestateis
whenidle=>
ifst='
=s1;
elsenext_state<
endif;
whens1=>
ifms1='
next_state<
=s2;
elsenext_state<
whens2=>
ifms2='
=s3;
elsiftm='
=over;
whens3=>
ifdone='
then
whenover=>
elsiftf='
0'
iftm='
next_state<
elsenext_state<
endif;
whenothers=>
next_state<
endcase;
idle是空白的等待状态,s1是输入要猜的数字状态,在s2状态输入猜的数字,确定后进入s3状态,没猜对会检测还有没有时间,有时间会回到s2状态,没时间会留在over状态,猜对了也会留在over状态,发现没时间后也会进入over状态
点阵显示:
ifclk_scan'
eventandclk_scan='
ifled=1then--jiong
caseled_rowis
when"
10111111"
=>
led_row<
="
01111111"
;
led_col<
11111111"
11011111"
10011001"
11101111"
10100101"
11110111"
11000011"
11111011"
10111101"
11111101"
11111110"
whenothers=>
endcase;
elsifled=2then--xiao
00111100"
01000010"
11011011"
10000001"
01011010"
elsifled=3then--x
00100100"
00011000"
elsifled=4then--kong
00000000"
else
这里都是在显示特殊情况,下面是倒计时的显示:
num_1是倒计时对8的取余,num_2是倒计时对8的除法运算。
对应每个num_1,有num_x对应不同的点阵行的亮灯情况,这样的话使得61秒的倒计时只需要分8种情况讨论,即每一行一种情况。
num_1<
=count_downrem8;
--quyu
num_2<
=count_down/8;
casenum_1is
when0=>
num_x<
when1=>
10000000"
when2=>
11000000"
when3=>
11100000"
when4=>
11110000"
when5=>
11111000"
when6=>
11111100"
when7=>
endcase;
casenum_2is
when0=>
caseled_rowis
-num_x;
when1=>
caseled_rowis
endcase;
when2=>
endcase;
when3=>
when4=>
when5=>
led_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮数电 实验 报告 数字