文档库 最新最全的文档下载
当前位置:文档库 › 数电实验--简易贪食蛇游戏机

数电实验--简易贪食蛇游戏机

数电实验--简易贪食蛇游戏机
数电实验--简易贪食蛇游戏机

简易贪食蛇游戏机

一.设计课题的任务要求

基本任务:

用一个 8×8 点阵做为基本显示屏,4 个连续移动的的发光点表示一条蛇,用任意

出现的一个亮点表示老鼠,用4 个排成一条线的发光点表示“墙”,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,则游戏结束。

1. 老鼠出现的地方是随机的,在某个地点出现的时间是5 秒钟,如果5 秒钟之内没

有被吃掉,它就会在其它地方出现;

2. 用数码管显示得分情况和游戏的剩余时间,每吃掉一只老鼠就加一分;

二.系统设计

1.设计思路

当复位键置为1时,8*8点阵也初始化为全不亮,每来一个时钟脉冲就对8*8点阵进行一次扫描,并依次点亮四个蛇身点、一个老鼠点、四个墙点,由于扫描频率远远超出人眼所能分辨的范围,故人眼看来蛇身是连续的。在数码管上显示得分与倒计时情况。

用四个按键分别控制蛇的运动方向“上下左右”,每次按键时通过和蛇原来的运动方向进行比较来控制蛇接下来的运动方向。当蛇撞墙、出界、游戏时间到时游戏结束,点阵全亮。每当蛇吃到一个老鼠时则自动加一分并重设老鼠位置。老鼠存活5秒钟时重设老鼠位置。用M序列发生器实现老鼠位置的随机变化。

2.总体框架图:

记分器倒计时器

复位开关方向输入按键

3.逻辑划分框图

4.

5.控制方向dir 设置为两位二进制变量:“00”表示“上”,“01”表示“下”,“10”表示“左”,

“11”表示“右”。当前蛇头方向direction设置为十进制整数变量,0表示上,1表示下,2表示左,3表示右。注意:当输入的方向dir与当前蛇头方向direction相反时,蛇头按照当前方向direction移动

6.分块电路设计

⑴点阵显示模块

此模块采用频率为1Mhz的时钟clk3。

每来一个时钟就对整个8*8点阵全部扫描一次,当某个点的行为低电平,列为高电平时被点亮。由于蛇身有4个移动的点,墙有4个固定的点以及一个老鼠的亮点,那么一共有9个点需要在8*8点阵上显示。所以我将时钟用point分成9个周期,每个周期扫描一个点。clk3频率很高,虽然是逐点扫描,但由于视觉暂留我们看到的是9个点同时亮。

当复位信号clear置为1时,点阵全不亮。当结束信号over置为1时,点阵全亮。

⑵数码管显示模块

当一个数码管要稳定显示需要频率不小于300hz,总共4个数码管,采用500khz的时钟clk2.

用cat信号对数码管进行片选,用seven信号储存7个管脚的电平。共有4个数字需要显示,用数组shownum储存分数与游戏时间。用state变量将时钟clk2分成4个周期,每个周期显示state对应的shounum(state)。复位信号clear置为1时,数码管全不亮。

⑶控制器

倒记时和老鼠5秒换位置要分频出1赫兹的一个clk1。并且1赫兹的频率十分适合蛇的移动,所以我将clk1信号作为了蛇移动的触发信号。

复位信号clear=1将蛇的位置、方向、老鼠位置、墙的位置、游戏时间、分数等初始化。

①蛇身的移动。用4个点表示蛇,从蛇尾开始,依次等于前一个蛇身点坐标。

②蛇头的移动

按照状态转移图编写程序。实际编写时我将对出界情况的判断加了进去。

给定dir时,若出界,游戏结束。若否,当蛇头方向direction不和输入值dir正好

相反时,蛇头步进,将dir的值赋给蛇头当前方向direction;当蛇头方向direction

和输入值dir正好相反时,若蛇头出界,游戏结束,若不出界,蛇头按照原来的

direction方向步进。

③重设老鼠位置

设置一个重设老鼠标志setrat。当老鼠存活时间满5s或蛇吃到老鼠时,将setrat

标志置为1,否则为0.当setrat=1时,用M序列发生器随机重设老鼠位置。当重

设后的老鼠和墙的位置重合时,修改老鼠位置。

⑷分频器和外界输入方向寄存器

EPM1270T144C5数电实验开发板的时钟clk频率为50Mhz。控制器需要一个频率为1hz的时钟clk1,数码管显示需要一个频率为500khz的时钟clk2,点阵显示需要一个频率为1Mhz的时钟clk3.由于游戏结束时只有数码管需要保持显示结束时的时间和分数,所以当over置为1时,clk1和clk3的分频器停止,只有clk2的分频器继续工作。

外界输入的方向用key表示,key值为“1000”、“0100”、“0010”、“0001”时分别表示上、下、左、右。将输入的方向值赋给dir。dir设置为两位二进制变量:“00”

表示“上”,“01”表示“下”,“10”表示“左”,“11”表示“右”。

三.仿真波形及波形分析

为方便仿真,将时钟clk改为1Mhz,将clk3改为100khz,将点阵显示、数码管显示的时钟频率都改为clk,将控制模块显示的时钟改为clk3。

1.点阵显示仿真:

仿真结果如下:

如图所示,当clear=1时,点阵的行都为高电平,列都为低电平,点阵全不亮。从clear置为0后clk的第一个上升沿开始,点阵扫描显示蛇、鼠、墙。先显示前四个蛇点(蛇点初始位置:行为0,1,2,3;列为1),然后显示鼠,接着显示四个墙点(行为3,4,5,6;列为4)。然后重新扫描蛇、鼠、墙。

如上图,over=1时,点阵行都变成低电平,列都变成高电平,点阵全亮。

2.数码管显示仿真

仿真结果如下:

如图,clear=1时数码管全不亮。clear置为0后,数码管轮流开始显示shounum数组中的元素。当cat=011111和101111时,分别显示得分的十位和个位。由于得分为0,所以这两个数码管的管脚电平为1111110,即都显示为0. 此时时间为59,当cat=111101时显示游戏时间的十位,所以该数码管的seven值为1011011,即显示为5.当cat=111110时,显示游戏时间的个位9,该数码管的seven值为1111011,即显示为9。从图中可以看出,当游戏时间为58时,显示游戏时间的个位的cat=111110的数码管对应的seven值变为1111110,即显示为8.

3.控制器仿真

从图中可以看到,clear置为1时,蛇的位置被初始化。时间初始化为59。clear=0后,每个clk3的上升沿,蛇头移动一步,蛇身分别跟着前一个点移动。当游戏进行了5秒时,蛇头到达点阵最上边,这时由于对方向输入键key的设置,蛇开始向右走。当倒计时为49s时,蛇头到达点阵最右边。此时蛇继续向右走,出界,over置为1,游戏结束。

从图中可以看出,老鼠每5秒重置一次位置。

四.源程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity tanshishe is

port(

clk,clear:in std_logic; --时钟、复位/开始开关

key:in std_logic_vector(3 downto 0); --方向控制键

seven:out std_logic_vector(6 downto 0); --七位数码管的7根二极管

cat:out std_logic_vector(5 downto 0); --控制数码管显示

row,col:out std_logic_vector(7 downto 0)); --点阵行、列坐标

end tanshishe;

architecture game of tanshishe is

signal setrat,over:std_logic; -- 重设老鼠、游戏结束信号

signal ratr,ratc,rat:integer range 0 to 7; --老鼠行、列坐标

signal t: std_logic_vector(2 downto 0);

signal rattime:integer range 0 to 4; --老鼠出现时间

type dots is array (integer range <>) of integer range 0 to 7;

signal snaker,snakec:dots(3 downto 0); --蛇行、列坐标

constant wallr:dots(3 downto 0):=(6,5,4,3);--墙的行坐标(常数)

constant wallc:dots(3 downto 0):=(4,4,4,4);--墙的列坐标(常数)

signal clk1,clk2,clk3: std_logic;--clk1:1秒clk2:500hz时钟

signal tmp1:integer range 0 to 49999999; --分频1

signal tmp2:integer range 0 to 99; --分频2

signal tmp3:integer range 0 to 49; --分频3

signal dir:std_logic_vector(1 downto 0); --保存下一时刻方向

signal direction:integer range 0 to 3; --当前蛇方向:0->上,1->下,2->左,3->右signal point:integer range 0 to 8; --当前点阵上显示的点

type figure is array (integer range <>) of integer range 0 to 9;

signal shownum:figure(3 downto 0); --显示时间分数

begin

p1:process(clk,over,clear) --分频同时保存下一时刻蛇的移动方向

begin

if clear='1' then

dir<="00";tmp1<=0;tmp2<=0;

elsif clk'event and clk='1' then

if (tmp2=99) then

tmp2<=0;clk2<='1';

else

tmp2<=tmp2+1;

clk2<='0';

end if;

if (tmp1=49999999) then

else

tmp1<=tmp1+1;

clk1<='0';

end if;

if (tmp3=49) then

tmp3<=0;clk3<='1';

else

tmp3<=tmp3+1;

clk3<='0';

end if;

case key is

when "1000"=> dir<="00";

when "0100"=> dir<="01";

when "0010"=> dir<="10";

when "0001"=> dir<="11";

when others=> null;

end case;

end if;

end process;

p2:process(clear,clk3,over) --点阵显示模块

begin

if clear='1' then

row<="11111111";

col<="00000000";

point<=0;

else

if (over='1')then--游戏结束

col<="11111111";

row<="00000000";

else

if clk3'event and clk3='1' then

col<="00000000";

row<="11111111";

if point=8 then

point<=0;

else point<=point+1;

end if;

case point is

when 0|1|2|3=> row(snaker(point))<='0';

col(snakec(point))<='1';

when 4=> row(ratr)<='0';

when 5|6|7|8=> row(wallr(point-5))<='0';

col(wallc(point-5))<='1';

when others=>col<="00000000";row<="11111111";

end case;

end if;

end if;

end if;

end process;

p3:process(clear,clk1,shownum(0),dir) --控制模块

variable ratr1,ratc1:integer range 0 to 7;

begin

if clear='1' then --复位

snaker<=(3,2,1,0);

snakec<=(1,1,1,1);

direction<=0;

over<='0';

shownum(3)<=0;

shownum(2)<=0;

shownum(1)<=5;

shownum(0)<=9;

setrat<='1';

else

if clk1'event and clk1='1' then

if rattime=4 then rattime<=0; --老鼠出现时间

else rattime<=rattime+1;

end if;

if shownum(0)=0 then --剩余时间

shownum(0)<=9;

shownum(1)<=shownum(1)-1;

else

shownum(0)<=shownum(0)-1;

end if;

for i in 0 to 2 loop --the snake moves --蛇的步进

snaker(i)<=snaker(i+1);

snakec(i)<=snakec(i+1);

end loop;

case dir is

when "00"=> if snaker(3)=7 then--向上出界游戏结束

over<='1';

elsif direction/=1 then--蛇头向上步进(蛇头方向不和输入值相反时)

snaker(3)<=snaker(3)+1;

direction<=0;

else

if snaker(3)=0 then--若蛇头向下出界,游戏结束

over<='1';

else

snaker(3)<=snaker(3)-1;--蛇头向下未出界

snakec(3)<=snakec(3);

end if;

end if;

when "01"=> if snaker(3)=0 then--若蛇头向下出界,游戏结束

over<='1';

elsif direction/=0 then--蛇头方向不和输入值相反,向下步进

snaker(3)<=snaker(3)-1;

snakec(3)<=snakec(3);

direction<=1;

elsif snaker(3)=7 then--若蛇头向上出界游戏结束

over<='1';

else

snaker(3)<=snaker(3)+1;--蛇头向上未出界,向上步进

snakec(3)<=snakec(3);

end if;

when "10"=> if snakec(3)=0 then--左

over<='1';

elsif direction/=3 then

snakec(3)<=snakec(3)-1;

snaker(3)<=snaker(3);

direction<=2;

elsif snakec(3)=7 then

over<='1';

else

snakec(3)<=snakec(3)+1;

snaker(3)<=snaker(3);

end if;

when "11"=> if snakec(3)=7 then--右

over<='1';

elsif direction/=2 then

snakec(3)<=snakec(3)+1;

snaker(3)<=snaker(3);

direction<=3;

elsif snakec(3)=0 then

over<='1';

else

snakec(3)<=snakec(3)-1;

end if;

end case;

if setrat='1' then --重设老鼠位置

ratr1:=rat;

ratc1:=rat+2;

for i in 0 to 3 loop

if ratr1=wallr(i) and ratc1=wallc(i) then

ratr1:=ratr1+1;

ratc1:=ratc1+1;

exit;

end if;

end loop;

ratr<=ratr1;

ratc<=ratc1;

rattime<=0;

setrat<='0';

end if;

if (shownum(1)=0 and shownum(0)=0) then --游戏时间到

over<='1';

else

if rattime=4 then setrat<='1'; --重设老鼠位置

end if;

if snaker(3)=ratr and snakec(3)=ratc then --吃到老鼠

setrat<='1';

if shownum(2)=9 then--加一分

shownum(2)<=0;

shownum(3)<=shownum(3)+1;

else

shownum(2)<=shownum(2)+1;

end if;

else

for i in 0 to 3 loop

if snaker(3)=wallr(i) and snakec(3)=wallc(i) then --蛇撞墙

over<='1';

exit;

end if;

end loop;

end if;

end if;

end if;

end if;

end process;

p4:process(clear,clk2) --在数码管上显示得分和剩余时间variable state:integer range 0 to 3:=0;

begin

if clear='1' then cat<="111111";

elsif clk2'event and clk2='1' then

state:=state+1;

case state is

when 3=>cat<="011111";

when 2=>cat<="101111";

when 1=>cat<="111101";

when 0=>cat<="111110";

end case;

case shownum(state) is

when 0=>seven<="1111110";

when 1=>seven<="0110000";

when 2=>seven<="1101101";

when 3=>seven<="1111001";

when 4=>seven<="0110011";

when 5=>seven<="1011011";

when 6=>seven<="1011111";

when 7=>seven<="1110000";

when 8=>seven<="1111111";

when 9=>seven<="1111011";

when others=>seven<="0000000";

end case;

end if;

end process;

p5:process(clk1,t) --Mxulie

begin

if t="000" then t<="001";

elsif clk1'event and clk1='1' then

t(0)<=t(0) xor t(2);

t(1)<=t(0);

t(2)<=t(1);

end if;

case t is

when"000"=>rat<=0;

when"001"=>rat<=1;

when"010"=>rat<=2;

when"011"=>rat<=3;

when"100"=>rat<=4;

when"101"=>rat<=5;

when"110"=>rat<=6;

when"111"=>rat<=7;

end case;

end process;

end game;

五、功能说明

用一个 8×8 点阵做为基本显示屏,4 个连续移动的的发光点表示一条蛇,用任意

出现的一个亮点表示老鼠,用4 个排成一条线的发光点表示“墙”,用四个按键控制蛇的运动方向,完成贪食蛇游戏,蛇撞“墙”、边或者游戏时间到,则游戏结束。

1. 老鼠出现的地方是随机的,在某个地点出现的时间是5 秒钟,如果5 秒钟之内没

有被吃掉,它就会在其它地方出现;

2. 用数码管显示得分情况和游戏的剩余时间,每吃掉一只老鼠就加一分;

3.有一个复位开关,按下复位键时,游戏信息初始化,点阵、数码管全不亮。游戏结束时点阵全亮,数码管保持显示结束时的分数与时间。

六.故障及问题分析

1.故障:下载到EPM1270T144C5数电实验板上时,点阵的蛇、鼠、墙是暗的,其余点是亮的。

分析:实验室的EPM1270T144C5板上的点阵的点当行为低电平、列为高电平时亮,和教材上的刚好相反

解决:重写代码中点阵显示部分,将高电平改为低电平,低电平改为高电平。

2.故障:下载到板上后,点阵全亮。

分析:点阵显示模块时钟频率不合适

解决:修改分频器模块,点阵显示用1Mhz的时钟。

七.总结和结论

这次实验我故意挑的综合性很强,班里只有我一个人选这个实验,对自己做出挑战。编写VHDL程序实现它时发现很有难度,实验前认真准备了相应的基础知识,我完成了程序的框图、状态转移图、流程图等设计,但具体编写程序的时候还是有很多问题需要解决,比如移动数据和静止数据的表示,扫描的不同频率等等,通过查找资料和询问做点阵实验同学的经验,最终将问题一一解决。

通过这次贪吃蛇实验,我掌握了VHDL语言和Quartus软件的应用,理解了状态机设计的原理和方法,掌握了利用EDA进行自顶向下的设计方法,达到了实验课程的目的,同时也锻炼自己的能力。

AT89C51单片机简易计算器的设计

AT89C51单片机简易计算器的设计 单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用PROTUES仿真。 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数

值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图: 二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

c计算器实验报告

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 6.0中建立一个MFC工程文件,名为calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在calculatorDlg.h中添加math.h头文件,然后添加public成员。 7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始化和完善各控件 的响应函数代码。

(3)程序清单: 添加的public成员: double tempvalue; //存储中间变量 double result; //存储显示结果的值 int sort; //判断后面是何种运算:1.加法 2.减法 3.乘法 4.除法 int append; //判断后面是否添加数字 成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0;

贪吃蛇小游戏实验报告[

软件设计报告 设计题目:贪吃蛇 学院:华北电力大学科技学院 专业班级:软件10K1 学生姓名:张飞 学生学号:101909020122 指导教师:乔玲玲 提交时间: 成绩: - 0 -

目录 一.需求分析 二.概要设计 三.详细设计 四.心得体会 一.需求分析 1.1关于题目 1.1.1题目要求 利用Microsoft Visual C++制作一个贪吃蛇的小游戏,要求: (1)应用MFC单文档制作 (2)能够记录游戏成绩 (3)可根据玩家要求设置游戏速度(级别):初级,中级,高级 (4)可以根据个人喜好更换背景图片,食物图片,障碍物图片,结束图片等 1.1.2选题背景 贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我们,它的制作方法对于以前的我们而言都是很神秘的。我们希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我们的编程能力不是很强,但是我们有信心,在这次学习中我们将从实践和实际的项目中提高自己的编程能力。因此我们选定了这个题目。 1.2关于编译软件 本程序采用Microsoft Visual C++6.0的英文版本进行编译。VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C++规范,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。 - 1 -

- 2 - 1.3关于兼容性 本程序经过调试,可以在XP 系统下编译运行,也可以在Vista 下运行,界面稍有不同,但不影响运行结果。 二. 概要设计 2.1软件主要功能设计 2.1.1程序结构 根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、停止游戏,设置游戏级别(速度),设置图片等。具体的程序结构如下面的图1-1所示。 图2-1 贪吃蛇结构图 2.1.2程序流程 根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。贪吃蛇的内容主要包括: 游戏开始,随机出现食物。 贪吃蛇 游 戏开始 游戏设置 游戏结束 开始 初级 中级 高级 结束

电子技术乒乓球比赛游戏机课程设计报告书

1绪论 1.1选题背景 1.1.1 课题目的及意义 本次课程设计的容是独立完成一个乒乓球比赛游戏机的设计,采用EWB电路仿真设计软件完成乒乓球比赛游戏机电路的设计及仿真调试,在微机上仿真实现乒乓球比赛游戏机的设计。通过这次课程设计让我们了解和熟悉了乒乓球游戏机的原理和Multisim仿真设计软件的操作,也让我们加深了解了对双向移位寄存器、双D触发器及、加法器及逻辑门电路的一些实际用途,并将理论与实践相结合。 1.1.2 课题的容和要求 独立完成一个乒乓球比赛游戏机的设计,采用EWB电路仿真设计软件完成乒乓球比赛游戏机电路的设计及仿真调试,在微机上仿真实现乒乓球比赛游戏机的设计。 课程设计具体容如下:乒乓球比赛是由甲乙双方参赛,加上裁判的三人游戏(也可以不用裁判),乒乓球比赛模拟机是用发光二极管(LED)模拟乒乓球运 乒乓球比赛模拟机框图 设计要求:

1、基本部分 (1) 至少用8个LED排成直线,以中点为界,两边各代表参赛双方的位置,其中一个点亮的LED(乒乓球)依次从左到右,或从由到左移动,“球”的移动速度能由时钟电路调节。 (2) 当球(被点亮的那只LED)移动到某方的最后一位时,参赛者应该果断按下自己的按扭使“球”转向,即表示启动球拍击中,若行动迟缓或超前,表示未击中或违规,则对方得一分。 (3) 设计自动记分电路,甲乙双方各用一位数码管显示得分,每记满9分为一局。 2、发挥部分(选做) (1) 甲乙双方各设一个发光二极管表示拥有发球权,每得5分自动交换发球权,拥有发球权的一方发球才能有效。 (2) 发球次数能由一位数码管显示。 (3) 一方得分,电路自动响铃3秒,此期间发球无效,等铃声停止后方可比赛。 课题任务要求 1、画出总体设计框图,以说明乒乓球比赛游戏机由哪些相对独立的功能模块组成,标出各个模块之间互相联系,时钟信号传输路径、方向和频率变化。并以文字对原理作辅助说明。 2、设计各个功能模块的电路图,加上原理说明。 3、选择合适的元器件,在EWB上连接验证、仿真、调试各个功能模块的电路。在连接验证时设计、选择合适的输入信号和输出方式,在充分电路正确性同时,输入信号和输出方式要便于电路的仿真、调试和故障排除。 4、在验证各个功能模块基础上,对整个电路的元器件和连接,进行合理布局,进行整个数字钟电路的连接验证、仿真、调试。 5、自行接线验证、仿真、调试,并能检查和发现问题,根据原理、现象和仿真结果分析问题所在,加以解决。学生要解决的问题包括元器件选择、连接和整体设计引起的问题。 1.2 方案选择 根据设计任务,对照图乒乓球比赛模拟及1.1,可以分为三个模块进行设计:

数电实验二:简易计算器(实验报告)

数电实验2实验报告 1、设计修改方案 (1)加入编码器连接4选一数据选择器,控制进行运算的种类 (2)修改了输出端数据选择器的程序,使得当计算器没有任何输入时,结果显示保持为0,并且利用芯片自身的灭零管脚,让显示结果中,当十位为零时,十 位的零不显示。

2、实验数据及分析 (1)修改后电路图(附后) (2)仿真波形 设置输入2个4位二进制数为0110(十进制6)和0010(十进制2),计算方式控制SW[3:0]设为0111,即模拟除法操作,加入时钟信号。 ①模拟除法波形: 可以看到十位(商)的数码管显示中,1、2、3、4、7段亮,显示为数字3,而个位(余数)显示1、2、3、4、5、6段亮,显示数字0,相当于计算出6除2商3余0。满足计算要求。 ②模拟乘法波形:(SW[3:0]设为1011,其他输入同上)

可以看到个位的数码管显示中,1、4、5、6段亮,显示为C(化为十进制为12),而十位一直显示1、2、3、4、5、6段亮,显示数字0,相当于计算出6乘2等于0C,即等于12。当改变输入4和2是,显示结果为8,。满足计算要求。 ③模拟加法波形:(SW[3:0]设为1101,其他输入同上) 可以看到个位的数码管显示中,1、2、3、4、5、6、7段全亮,显示为数字8,而十位一直显示1、2、3、4、5、6段亮,显示数字0,相当于计算出6加2等于08,即等于8。满足计算要求。 ④模拟减法波形:(SW[3:0]设为1110,其他输入同上) 可以看到个位的数码管显示中,2、3、6、7段亮,显示为数字3,而十位一直显示1、2、3、4、5、6段亮,显示数字0,相当于计算出6减2等于03,即等于3。满足计算要求。 从上面加减乘除四种功能运算的波形仿真可以看出,本实验设计能够正确完成对输入数字的上述四种运算。满足题目要求。

五子棋游戏实验报告

五子棋游戏实验报告 课程名称计算机程序设计(VB) 学号______________________ 姓名______________________ 班级______________________ 提交时间 五子棋软件设计 一、实验目的 1?通过五子棋软件设计或者自拟题目设计,巩固本课程所学的各个章节重点知识,自拟题目的同学需尽早向教师提岀自己的想法及设计方案。 2?通过开发一个较大的系统,增强软件开发能力。 3?通过调试系统,增强逻辑思维能力。 二、实验内容 1.基本要求: (1)输入两个对手名字,然后进入游戏界面。 (2)用鼠标点击的方式在棋盘上摆放棋子,黑白交替。(棋盘15*15 ) (3)可以悔棋。 (4)五子连在一起的时候能判断胜利,并且显示出胜利者的名字。 (5)能够将棋局的结果保存,保存该棋局

结束的状态、对手名字、棋局名字(棋局名字在保存时由用户在相应的界面下添入)(此功能要求用数据库和文件两种技术实现)。

因为棋盘上空点居多,大部分点的信息为0,因此只需保存有棋子的点的信息 用文件技术进行棋局保存,思路相同。 (7)五子棋恢复棋局 思路:首先从数据库文件中找到要恢复棋局的数据(即曾经保存的数据),然后把这些数据赋值给内存中相应的数组或者变量中,按照这些数据重新绘制棋盘和棋子,即完成了对棋局的恢复。 窗体启动事件应该完成的事情: 组合框中应该显示曾经保存的棋局名。因为每次保存棋局时,都是将棋局所有棋子的记录添加在表的最 后,因此表中关于棋局名的记录只能是类似于aaabbbbccccc的形式,而不可能是abbcacc的形式,根据 这个特点编程序取出表中不同的棋局名。 具体算法: 用一个字符串变量strfile初始值为空,从表的顶端向下依次移动记录指针,如果当前记录的棋局名字段和strfile不相等,说明进入另一个棋局的记录中,将该棋局记录的棋局名赋值给strfile,并加入到组合 框中,一直到表中最后一个记录 因为要从数据库中取岀相关数据到a数组中,因此要将a数组所有数据清零。 要建立一个data控件,与数据库连接起来,而后识别棋局(即表中的棋局名字段与在列表框中选择的棋 局名比较),将数据库该棋局中所有信息都赋值给a数组及相关变量。 刚才仅仅是数据的恢复,即将数据库中已经保存过的数据恢复到内存中,下一步应该根据内存中的数据重新绘制棋盘以及棋子。 重新绘制棋盘是独立的一块功能,因此考虑用全局子过程来实现,该子过程定义在模块中。思路如下: 清屏一绘制棋盘一根据a数组中的每一项的两个下标来决定绘制棋子的位置,根据每一项的值是1还是 2来决定在该位置绘制何颜色的棋子。 决定该黑白方走的blackwhite变量当时没有保存,可以采用在数据库中保存的方式来解决,本例中解决方法是通过数黑白棋子个数来决定恢复棋局后该谁走的。 因此设置了一个变量做计数器,每走一步棋计数器的值加一。 用文件技术实现棋局恢复,思路相同。 (8)悔棋 悔一步棋:用几个变量来表示关于一步棋的几个信息,每次下子都将该子的信息赋值给那几个变量,悔 一步棋即将那几个变量所表示的点的a数组信息清零。而后调用paint ()过程重画。 以上是教师带着学生完成的软件功能。 遗留问题:保存棋手姓名和棋局名并在恢复棋局的时候显示。(需要同学们自己完成)思路:在数据表中多建立两个字段,分别表示两个棋手姓名,同其它数据的保存类似。 三、设计日期 十二月 四、完成日期 十二月 五、实验体会 其实,一开始学习vb我就对它不抱有一定的热情,可能是因为要用到计算机以及编程问题,当时一想到有代码,就会无比的苦恼,但是为了让这门课顺利通过,我还是怀着一颗必须要学的心情。起初,我对待这门新课程和其他课

数电课程设计报告 乒乓球游戏设计

电子线路综合设计 乒乓球比赛模拟及计分器设计 2014年6月

摘要 在信息社会高速发展的今天,数字电路芯片已经实现高度集成化,并逐步渗透到医学、计算机等各个领域,对人类的生活有着深远的影响。本设计采用基本门电路以及74LS系列芯片的搭建,以multisim 12.0软件为平台进行仿真,实现了对乒乓球游戏的模拟。主要解决的问题有: (1)模拟乒乓球的轨迹:用双向移位4位寄存器74194以及基本门电路实现;(2)球速的调节:利用555电路实现; (3)球被击中、犯规的判断; (4)计数器的使用:采用74LS90和74LS161的组合,给玩家计分; (5)关于比分的显示:通过CD4511译码芯片将计数器的输出状态显示到2位共阴极数码管上。 关键词:双向移位4位寄存器、555电路、译码电路、计数器系统

目录 1 设计任务 (1) 2 电路整体设计 (2) 2.1 译码显示电路设计 (4) 2.2 555定时器组成脉冲发生器 (5) 2.3模拟乒乓球电路的设计 (6) 3 电路整体性能的检测 (7) 3.1 译码显示电路的检测 (7) 3.2 脉冲发生器电路的检测················································································· 3.3模拟乒乓球电路的检测··················································································4实验结论····················································································································5课程设计心得体会以及建议····················································································6 Abstract ······················································································································7附录(包含元器件清单以及各元器件功能表) ······················································8参考文献····················································································································

微机原理实验简易计算器

【实验题目】 简易计算器设计 【实验目的】 综合测试学生微机接口技术及应用能力,包括系统构思设计、电路设计搭建、软件调试等; 结合应用实际,培养学生运用微机技术服务应用、服务实际的能力。 【基本要求】 1)利用实验箱上的4x4键盘及6位数码管,实现两个16位宽的非负整数(0~65535)进行+、-、×运算,计算结果限制在范围-65535~65535,超过范围在数码管最低位显示E; 2) 16个按键的分配可以自行指定; 【扩展要求】 1)按基本要求保持输入的范围不变(16位宽),扩展计算结果的范围到用足6位数码管,当计算结果超过-65535~999999时,显示E; 2)增加÷的功能,有小数显示; 【实验程序】 ;该程序实现了基本要求及扩展要求的2) DSEG SEGMENT BUFF DB 6 DUP() LED_7 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39 H,5EH,79H,71H,00H,40H POSITION DB 0DFH,0EFH,0F7H,0FBH,0FDH,0FEH UNIT10 DW 10000,1000,100,10,1 NEWNUM DB 0 COUNT DB 0 FLAG DB 0 ;是否有键按下的标志 NEGTI DB 0 ;是否为负数的标志 NUM DW 0 NUM1 DW 0 NUM2 DW 0 TAG DB 0 ;运算种类标志 POINT DB 0 ;除法结果添加小数点标志 RESULT DW 0 DSEG ENDS CSEG SEGMENT ASSUME DS:DSEG,CS:CSEG START: MOV AX,DSEG MOV DS,AX MOV DX,300CH ;8255初始化 MOV AL,81H OUT DX,AL LEA SI,BUFF MOV CX,6 NEXT: MOV BYTE PTR[SI],16 INC SI LOOP NEXT CALL SHOW ;将显示缓冲区中内容在LED上一次显示出来 MOV COUNT,0 ;记按下了几位数 NEXT2: CALL SHOW CALL SCAN ;判断是否有按键按下 CMP FLAG,1 JZ OK JMP NEXT2 OK: MOV FLAG,0 MOV POINT,0 MOV DX,3000H ;判断是哪一个键被按下 MOV AL,0FFH OUT DX,AL MOV CH,-1 ;CH用于保存当前被扫描的列号MOV CL,07FH XL: ROL CL,1 INC CH MOV DX,3000H MOV AL,CL OUT DX,AL MOV DX,3008H

贪吃蛇实验报告

创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王* 《计算机程序设计》课程设计报告课题名称贪吃蛇游戏 班级 学号 姓名 指导教师 设计时间至 设计地点 常熟理工学院计算机科学与工程学院

常熟理工学院计算机科学与工程学院 目录 1 需求分析 (1) 2 系统分析和设计 (1) 2.1 数据结构的设计和选择的理由 (1) 2.2 系统模块划分和模块结构 (2) 2.3 流程图 (2) 2.4 数据类型、全局变量和函数说明 (3) 3 程序测试和运行结果 (4) 4 课程报告小结 (5) 4.1分数重叠显示 (5) 4.2速度太快 (5) 4.3食物可能出现在蛇身上 (5) 附录A:程序源代码 (6)

《C程序设计》课程设计 1 需求分析 【阐述课程设计应该完成的功能】 使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。 2 系统分析和设计 2.1 数据结构的设计和选择的理由 本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。 2.1.1从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。下面以数组方式为例: struct Point { int x, y; } struct Point nodes[MAX_LENGTH]; //蛇身数组,MAX_LENGTH为最大蛇长 贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点: 1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用int direction;表示) 2. 运动时,蛇身后面一节移动到前面一节的位置。当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处...。 3. 吃到一个食物以后,蛇身会增加一节。即该数组中的有效数据个数加一。(用int length;表示) 根据上面的情况,我们可以设计蛇的数据结构如下: struct Snake { struct Point nodes[MAX_LENGTH]; //蛇身数组,保存每节蛇身的坐标。MAX_LENGTH为最大蛇长 int length; //当前蛇长 int direction; //蛇头运动方向 int live; //蛇活的,还是已经死了? } 2.1.2 关于食物,有两个属性: 1. 坐标位置 2. 状态:存在,或被吃。 故我们用以下结构表示: struct Food { struct Point position; //食物的位置 int exist; //存在?还是被吃? } 1

数电课程设计乒乓球比赛word文档

乒乓球比赛游戏机 一、设计任务与要求 1 课题目的及意义 本次课程设计的内容是独立完成一个乒乓球比赛游戏机的设计,采用EWB 电路仿真设计软件完成乒乓球比赛游戏机电路的设计及仿真调试,在微机上仿真实现乒乓球比赛游戏机的设计。通过这次课程设计让我们了解和熟悉了乒乓球游戏机的原理和Multisim仿真设计软件的操作,也让我们加深了解了对双向移位寄存器、双D触发器及、加法器及逻辑门电路的一些实际用途,并将理论与实践相结合。 2 课题的内容和要求 设计一个甲、乙双方参赛,裁判参与的乒乓球比赛游戏模拟机。 基本要求: (1)用8个发光二极管排成一条直线,以中点为界,两边各代表参赛双方的位置,其中点亮的发光二极管代表“乒乓球”的当前位置,点亮的发光二极管依次由左向右或由右向左移动。 (2)当球运动到某方的最后一位时,参赛者应立即按下自己一方的按钮,即表示击球,若击中,则“球”向相反方向运动,若未击中,则对方得1分。(3)设置自动计分电路,双方各用二位数码管来显示计分,每局11分。到达11分时产生报警信号。 提高要求: (4)一方得分时,电路自动响铃3s,这期间发球无效,等铃声停止后方能继续比赛。 (5)设置局数显示,5局结束后有声响提示比赛结束。 课题任务要求 1、画出总体设计框图,以说明乒乓球比赛游戏机由哪些相对独立的功能模块组成,标出各个模块之间互相联系,时钟信号传输路径、方向和频率变化。并以文字对原理作辅助说明。

2、设计各个功能模块的电路图,加上原理说明。 3、选择合适的元器件,在EWB上连接验证、仿真、调试各个功能模块的电路。在连接验证时设计、选择合适的输入信号和输出方式,在充分电路正确性同时,输入信号和输出方式要便于电路的仿真、调试和故障排除。 4、在验证各个功能模块基础上,对整个电路的元器件和连接,进行合理布局,进行整个数字钟电路的连接验证、仿真、调试。 二、方案设计与论证 根据设计任务,对照图乒乓球比赛模拟及1.1,可以分为三个模块进行设计: 1. 球台电路:球迹移动电路可采用双向移位寄存器方法实现,由发光二极管作光点模拟乒乓球移动的轨迹。 2. 驱动控制电路:由双D触发器及逻辑门电路构成,通过此电路来控制并且实现球台灯的左右移位即实现乒乓球的运动。 3. 计分电路:使用十进制的计数器、逻辑门和集成的4管脚的数码管来组成计分电路。 通过多次设计、画图及仿真实验,我们发现方案电路最简洁,原理简单易懂,操作也很方便,且实用性较强。故采用此方案进行设计。 三、单元电路设计

单片机实验报告 计算器

单片机原理及其应用实验报告基于51单片机的简易计算器的设计 班级:12电子1班 姓名:金腾达 学号:1200401123 2015年1月6日

摘要 一个学期的51单片机的课程已经随着期末的到来落下了帷幕。“学以致用”不仅仅是一句口号更应该是践行。本设计秉承精简实用的原则,采用AT89C51单片机为控制核心,4X4矩阵键盘作为输入,LCD1602液晶作为输出组成实现了基于51单片机的简易计算器。计算器操作方式尽量模拟现实计算器的操作方式,带有基本的运算功能和连续运算能力。并提供了良好的显示方式,与传统的计算器相比,它能够实时显示当前运算过程和上一次的结果,更加方便用户记忆使用。本系统制作简单,经测试能达到题目要求。 关键词:简易计算器、单片机、AT89C51、LCD1602、矩阵键盘

目录 一、系统模块设计......................................................................................... 错误!未定义书签。 1.1 单片机最小系统 (1) 1.2 LCD1602液晶显示模块 (1) 1.3 矩阵按键模块 (2) 1.4 串口连接模块 (1) 二、C51程序设计 (2) 2.1 程序功能描述及设计思路 (2) 2.1.1按键服务函数 (2) 2.1.2 LCD驱动函数 (2) 2.1.3 结果显示函数 (2) 2.1.4状态机控制函数 (2) 2.1.5串口服务函数 (2) 2.2 程序流程图 (3) 2.2.1系统总框图 (3) 2.2.2计算器状态机流程转换图 (3) 三、测试方案与测试结果 (4) 3.1测试方案 (4) 3.3 测试结果及分析 (7) 4.3.1测试结果(仿真截图) (7) 4.3.2测试分析与结论 (7) 四、总结心得 (7) 五、思考题 (8) 附录1:整体电路原理图 (9) 附录2:部分程序源代码 (10)

贪吃蛇游戏程序设计实验报告

Windows编程大作业贪吃蛇设计与实现 学校:武汉轻工大学 院系: 班级: 姓名: 学号: 2015年12月16日

目录 一、题目介绍 二、设计目的 三、详细设计 3.1贪吃蛇本体设计 3.2贪吃蛇食物设计 3.3游戏界面设计 3.3.1游戏初始化 3.3.2游戏开始 3.3.3游戏暂停 3.3.4游戏退出 3.3.5游戏总界面 3.3.6游戏区域与背景 3.3.7关于SNAKE 3.4玩法规则设计 3.5核心设计 四、功能测试 五、总结 六、参考文献

一、题目介绍: 编写一个基于MFC的小游戏。 基本要求: 1、实现一个小游戏 2、实现基本游戏控制功能 3、具有游戏数据保存功能 4、界面布局合理、美观; 二、设计目的: 通过使用vc++6.0实现一个小游戏的课程设计,进一步掌握MFC的高级使用方法和锻炼自己动手写程序的能力。了解游戏设计的整个过程,通过熟练使用MFC来设计游戏。程序主要包括:游戏界面设计,游戏菜单栏设计,游戏初始化,游戏控制等。培养和锻炼开发游戏的能力。 三、详细设计 3.1贪吃蛇的本体设计 贪吃蛇的头部拥有一个坐标(x,y),蛇体有一个长度len,蛇有一个运动方向direct,故定义一个结构体如下: struct Snake { int x,y; int len; int direct; }Snake[50]; 3.2贪吃蛇食物设计 贪吃蛇的食物有一个坐标(x,y),此食物有一个标志isfood,当isfood为0时,表示食物还没被吃,为1时,表示被吃。 struct Food { int x; int y; int isfood; }Food; 3.3游戏界面设计 3.3.1游戏初始化 游戏初始蛇体长度为3,颜色为灰色,食物标志为1,因为此时没有显示出食物,需要随机生成后,才置为0;

数电课程设计基于Multisim的乒乓球游戏机控制电路设计

课程设计(论文) 课程名称:数字电子技术基础 题目:基于Multisim的乒乓球游戏机控制电路设计院(系): 专业班级: 姓名: 学号: 指导教师:

任务书 设计题目:基于Multisim乒乓球游戏机的控制设计电路 课题目的: 该乒乓球游戏机电路主要由3块组成:球台驱动电路,控制电路和计分电路组成。其中球台电路主要实现游戏者击球完毕后球的左右移动显示位置功能;控制电路实现游戏者A和B击球,裁判对系统初始化的功能;计分电路具有当A 或B击球有效时加分和当游戏者的分数累计超过10时报警通知裁判对系统初始化以便重新开始比赛计分功能。 课题主要内容与要求: 内容:本课题设计一个以8个二极管的依次被点亮代表球的移动位置双向选择开关J2,J3控制发球,击球信号,在Multisim软件上测试结果。 要求:1、熟悉Multisim软件 2、用8个发光二极管表示球,用俩个按钮分别表示AB俩个球员的球拍; 3、A,B各有一个数码管计分。 4、裁判有一个按钮,用来对系统初始化,每次得分后按下一次。

摘要 乒乓球游戏机通过十分巧妙地设计采用数字芯片实现乒乓球左右移动,选手击球得分,累计得分超10报警灯功能。该设计三个双向开关J1,J2,J3分别作为裁判和游戏者A,B,且选手可以译码显示器上直接读出自己的得分,具有操作简单,结构清晰的优点。 对与模电课题的研究离不开电路图,不过现在都在实行电子化,所以需要借助电子产品。Multisim软件就是一款画电路图的电子软件,在此对不太熟悉或未接触过Multisim软件的朋友简短的介绍下: Multisim是美国国家仪器(NI)有限公司推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。同时具备可以根据自己的需求制造出真正属于自己的仪器;所有的虚拟信号都可以通过计算机输出到实际的硬件电路上;所有硬件电路产生的结果都可以输回到计算机中进行处理和分析等特点。该乒乓球游戏机电路主要有3块电路:台球驱动电路,控制电路和计分电路组成。其中台球驱动电路主要实现游戏者击球完毕后球的左右移动显示位置功能;控制电路实现游戏者A和B击球,裁判对系统初始化的功能;积分电路具有当A和B击球有效时加分和当游戏者的分数累计超过10分时报警通知裁判对系统进行初始化以便重新开始比赛积分的功能。 关键词:游戏机控制电路系统初始化

数字逻辑电路课程课程设计--简易加减计算器

数字逻辑电路课程课程设计--简易加减计算器

摘要 本次课程设计的任务是设计一个具有加减运算功能的简易计算器,并通过合适的方式来显示最后的计算结果。此次设计电路的完成主要是利用简单的数字电路和电路逻辑运算来进行的。简易加减计算器电路主要是对数据的输入与显示,数据的加减运算,数据的输出与显示三个主要的方面来设计研究完成的。 在输入电路的部分,我们通过开关的闭合与断开来实现数据的输入,开关闭合接入高电平“1”,断开接入低电平“0”。而输入的数据将通过显示译码管以十进制的形式显示出来。由于输入二进制的位数较多,我们采用个位十位分别输入的方式来简化电路。

加减运算电路则主要通过加法器来实现的。设计电路时,我们将个位和个位、十位和十位分别接入一片加法器。在进行加法运算时我们所选择的加法器是完全符合要求的,但是在进行减法运算时加法器就不能满足我们的设计要求了。因此我们将减法转换为加法进行运算,运算时采用补码的形式。在进行减法时通过异或门将减数的原码全部转换为补码,输入加法器中进行相加。最后将进位信号加到十位的运算电路上就实现了加减法的运算电路。 在显示电路中,由加法器输出的数据是二进制码。这些码可能表示超过十的数字,所以显示译码管就不能正确的显示出数字了。此时要将二进制转化成BCD码,再将BCD码送到显示译码管中就可以将计算所得的数字显示出来了。

概述 1.1设计题目: 简易加减计算器 1.2设计任务和要求: 1)用于两位以下十进制数的加减运算。 2)以合适的方式显示输入数据及计算结果。 1.3设计方案比较: 方案一:输入十进制的数字,再通过编码器对十进制的数字进行编码,输出二进制的数据。运用显示译码器对输入的数字以十进制的形式进行显示。在进行加减计算的时候将二进制数字运用数模转换,然后再进行相加减。然后将这些模拟信号再次转换成数字信号转换成数字信号,再将数字信号输入到显示译码管中来显示数剧。

c计算器实验报告

c计算器实验报告集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、 乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 中建立一个MFC工程文件,名为calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和 单选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在中添加头文件,然后添加public成员。 7)打开文件,在构造函数中,进行成员初始化和完善各控件的 响应函数代码。 (3)程序清单: 添加的public成员: double tempvalue; 法 2.减法 3.乘法 4.除法

int append; //判断后面是否添加数字 ●成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = ; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0; result=0; sort=0; append=0; } ●各控件响应函数代码: void CCalculatorDlg::OnButton1() //按钮“1” { // TODO: Add your control notification handler code here if(append==1)result=0;

python实现贪吃蛇

Python版贪吃蛇.py #!/usr/bin/python from Tkinter import * import random class snake(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.body = [(0,0)] self.bodyid = [] self.food = [ -1, -1 ] self.foodid = -1 self.gridcount = 10 self.size = 500 self.di = 3 self.speed = 500 self.top = self.winfo_toplevel() self.top.resizable(False, False) self.grid() self.canvas = Canvas(self) self.canvas.grid() self.canvas.config(width=self.size, height=self.size,relief=RIDGE) self.drawgrid() s = self.size/self.gridcount id = self.canvas.create_rectangle(self.body[0][0]*s,self.body[0][1]*s, (self.body[0][0]+1)*s, (self.body[0][1]+1)*s, fill="yellow") self.bodyid.insert(0, id) self.bind_all("", self.keyrelease) self.drawfood() self.after(self.speed, self.drawsnake) defdrawgrid(self): s = self.size/self.gridcount for i in range(0, self.gridcount+1): self.canvas.create_line(i*s, 0, i*s, self.size) self.canvas.create_line(0, i*s, self.size, i*s) defdrawsnake(self): s = self.size/self.gridcount head = self.body[0] new = [head[0], head[1]] if self.di == 1: new[1] = (head[1]-1) % self.gridcount elifself.di == 2: new[0] = (head[0]+1) % self.gridcount elifself.di == 3: new[1] = (head[1]+1) % self.gridcount

EDA课程设计--乒乓球游戏机

EDA课程设计一乒乓球游戏机

EDA技术课程设计课题:乒乓球比赛游戏机 系别:电气与电子工程系 专业: _______ 姓名: __________________________ 学号: __________________________ 指导教师: _______________________

河南城班学院 2012年6月日 成绩评定? 一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。

录 一、设计目的 (2) 二、设计要求 (6) 三、总体设计方案要求 (4) 1、设计的总体原理 (4) 2、设计内容 (6) 四、EDA设计与仿真 (6) 1、系统程序设计 (6) 2、系统程序各功能介绍 (12) 3、仿真结果及数据分析 (13) 五、硬件实现 (14) 1、硬件实现步骤 (14) 2、硬件实现结果 (66) 六、设计总结 (20) 七、参考文献 (21) 八、设计生成的电路总图 (21)

一、设计目的 通过对FPGA (现场可编程门阵列)芯片的设计实践,使学生掌握一般的PLD (可编程逻辑器件)的设计过程、设计要求、设计内容、设计方法,能根据用户的要求及工艺需要进行电子芯片设计并制定有关技术文件。培养学生综合运用已学知识解决实 际工程技术问题的能力、査阅图书资料和各种工具书的能力、工程绘图能力、撰写技术 报告和编制技术资料的能力,受到一次电子设计自动化方面的基本训练。 培养学生利用EDA技术知识,解决电子设计自动化中常见实际问题的能力, 使学生积累实际EDA编程。通过本课程设计的学习,学生将复习所学的专业知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力。 二、设计要求 1、设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。 2、用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右, 或从右到 左,其移动的速度应能调节。 3、当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断 地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。

简易计算器设计实验报告

简易计算器设计实验报告 一.设计任务及要求 1.1实验任务: 根据计算器的原理设计一个具有加减乘除功能的简易计算器。如:5+3*4/8=4。 1.2 实验基本要求: (1)实现最大输入两位十进制数字的四则运算(加减乘除)。 (2)能够实现多次连算(无优先级,从左到右计算结果)。 如:12+34*56-78/90+9=36 (3)最大长度以数码管最大个数为限,溢出报警。 二.实验设计方案 (1)用QuartusII的原理图输入来完成系统的顶层设计。 (2)用VHDL编写以及直接拖模块来各功能模块。 (3)通过2个脉冲分别实现个位数和十位数的输入。 (4)通过选择每次的输出数值,将输出值反馈到运算输入端 (4)通过除法运算实现十六进制到十进制的转换输出。 其具体实现流程图如下:

三系统硬件设计 FPGA: EP2C5T144C8目标板及相应外围硬件电路。(从略) 四系统软件设计 1.数据输入模块 原理:用VHDL创建模块,通过两个脉冲分别对两个数码管进行输入控制,再通过相应运算模块将两个独立数据转化成两位十进制数字。 2.运算模块 原理:用VHDL创建模块,四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号来时,将所得结果反馈给运算模块输入端。具体实现代码见附录二。 3.输出模块 原理:用VHDL创建模块,通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据,并且通过除法模块将十六进制转化为十进制。当输出结果溢出是LED0亮,同时数码管显示都为零。部分实现见附录二。 五实验调试 输入数据12,再按加法键,输入第二个数字25,按等号键,数码管显示37;按灭加法、等号键,输入第二个数据2,依次按等号键,减法键,数码管显示35;同上,按灭减法键、等号键,输入第三个数据7,依次按等号键,除法键,数码管显示5;按灭除法键、等号键,输入第四个数据99,依次按等号键,乘法键,数码管显示495,按灭乘法键、等号键,当前显示为99,依次按等号键、乘法键,数码管显示49005,同上进行若干次之后,结果溢出,LED0亮,同时数码管显示都为零。当输出为负数时,LED0灯变亮,同时数码管显示都为零。六实验结论 本实验基本实现了计算器的加减乘法运算功能,但是存在一个突出的缺陷,就是当输出结果时,必须先按等号键导通数据反馈,再按运算键选择输出结果。这与实际应用的计算器存在很大的差距。但是,本设计可以通过等号键实现运算对象和运算结果之间的切换。

相关文档
相关文档 最新文档