游戏程序设计实验报告

2023-05-05

随着国民文化水平的提升,报告在工作与学习方面,已经成为了常见记录方式。报告是有着写作格式与技巧的,写出有效的报告十分重要。下面是小编为大家整理的《游戏程序设计实验报告》的文章,希望能够很好的帮助到大家,谢谢大家对小编的支持和鼓励。

第一篇:游戏程序设计实验报告

Java猜拳小游戏程序设计实验报告

Java程序设计实验报告

班级:

学号:

姓名:

实验题目:猜拳小游戏

实验要求:

用java编写一个人机对战的猜拳小游戏。人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况。有简单的操作界面。

实验内容:

1、问题分析过程:

(1)首先分析猜拳游戏本身的玩法:

人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况。 (2)用面向对象的思想来分析:

在游戏过程中有几个对象组成

电脑

游戏规则

抽象出3个类:Person、Computer、Game Person类有哪些属性和行为呢?

属性:名字name,输赢次数(比分)score 行为:出拳ShowFirst()

选择性

Computer类有哪些属性和行为呢?

属性:名字name,输赢次数(比分)score 行为:出拳showFist()

随机

Game类有哪些属性和行为呢?

属性:游戏的双方(person、computer)、对战局数count 行为:产生角色initial()、游戏规则startGame()、显示比赛结果showResult()、统计

比赛结果calcResul()

2、主要实现代码:

import java.util.*; public class StartGame { public static void main(String[]args){

Game start = new Game();//实例化游戏类

start.initial(); //调用初始化方法

start.startGame(); //调用游戏开始方法

start.showResult(); //调用游戏结果显示方法

} } import java.util.*; public class Person { String name;//名字属性

int score;//积分属性

//出拳方法

public int showFist(){

System.out.print(" 请出拳:1.剪刀2.石头3.布(输入相应数字):");

Scanner input = new Scanner(System.in);

int num = input.nextInt();

String fist = "";//保存出拳

switch(num){ case 1:

fist = "剪刀";

break;

case 2:

fist = "石头";

break;

case 3:

fist = "布";

break;

}

System.out.println(name + "出拳:" + fist);

return num; } } import java.util.*; public class Game { //Person person;

//甲方

//Computer computer; //乙方

int count;

//对战次数

Person person = new Person(); //实例化用户类

Computer computer = new Computer(); //实例化计算机类

//初始化方法

public int initial(){

count = 0;

return count; } //游戏开始方法

public void startGame(){

//显示游戏开始界面

System.out.println(" ---------------欢

System.out.println(" ******************************");

System.out.println(" **

^_^ 猜拳,Start ^_^

**");

System.out.println(" *****************************");

界-------------- ");

System.out.println(" 出拳规则:1.剪刀 2.石头 3.布"); //选择计算机角色

System.out.print("请选择对方角色:1.刘备 2.孙权 3.曹操:"); Scanner input = new Scanner(System.in); int num = input.nextInt(); switch(num){ case 1: computer.name = "刘备"; break; case 2: computer.name = "孙权"; break; case 3:

} computer.name = "曹操"; break; //输入用户角色名

System.out.print("请输入你的姓名:"); person.name = input.next();

//显示对战双方

System.out.print(person.name + " VS " + computer.name + " 对战 "); //开始游戏

System.out.print(" 要开始吗?(y/n)"); String con = input.next(); int perFist;//用户出的拳 int compFist;//计算机出的拳

if(con.equals("y")){//判断是否开始

String answer = "y";

while("y".equals(answer)){//循环条件是是否开始下一轮

//出拳

perFist = person.showFist();//调用用户出拳方法

compFist = computer.showFist();//调用计算机出拳方法

//裁决

if((perFist == 1 && compFist == 1) ||

(perFist == 2 && compFist == 2) ||

(perFist == 3 && compFist == 3)){

System.out.println("结果:和局,真衰! "); //平局

}

else if((perFist == 1 && compFist == 3) ||

(perFist == 2 && compFist == 1) ||

(perFist == 3 && compFist == 2)){

System.out.println("结果:恭喜, 你赢了! "); //用户赢

person.score++;

//累计用户积分

}

else{

}

} System.out.println("结果说:^_^,你输了,真笨! ");//计算机赢

computer.score++;

//累计计算机积分 } count++;//累计对战次数

System.out.print("是否开始下一轮(y/n):"); answer = input.next(); }

//比较得分情况的方法 public void showResult(){ System.out.println("-----------------------"); System.out.println(computer.name + " VS " + person.name);

System.out.println("对战次数:" + count); System.out.println(" 姓名 得分 " + person.name + " " + person.score

+ " " + computer.name + " " + computer.score + " ");

//比较积分

if(computer.score == person.score){

System.out.println("结果:打成平手,下次再和你一分高下!");

}

else if(computer.score < person.score){

System.out.println("结果:你果然是高手," + computer.name + "佩服!");

}

else{

System.out.println("结果:呵呵,笨笨,下次加油哦!");

}

System.out.println("-----------------------"); } } public class Computer {

String name;//名字属性 int score;//积分属性 //出拳方法

public int showFist(){ int num = (int)(Math.random()*3) + 1; String fist = ""; switch(num){ case 1:

fist = "剪刀";

break; case 2:

fist = "石头";

break; case 3:

fist = "布";

break;

}

System.out.println(name + "出拳:" + fist);

return num; } } 运行界面:

3、实验心得体会:

从本次课程设计的完成中,我发现我有很多不足的地方,最突出的是所掌握的知识太少,学到的知识应用不到实践中。后来通过看书查找相关资料,完成课程设计任务。

程序设计语言是程序设计的工具,如果想有效的设计程序,正确的应用程序表达算法,必须准确应用程序设计语言;学习程序设计,必须要多读程序,并试着自己编写程序,多上机调试程序代码。

第二篇:“啤酒游戏”实验报告

实验一:“啤酒游戏”实验

1. 实验目的

(1)帮助学生认识供应链的基本结构和供应链企业之间的相互关联; (2)帮助学生认识到时间滞延、资讯不足的现实约束条件对供应链系统运营的影响;

(3)帮助学生理解“需求变异放大”效应的表现和根源;

(4)帮助学生掌握如何突破习惯思维方式,以系统性的思考寻求最优经营决策的具体方法。

2. 实验内容

在确定每位同学扮演的角色之后,分角色模拟供应链的订货过程20周以上,按要求作记录,并对订货结果进行分析。

3. 实验仪器、设备及材料

计算机,安装Windows2000及以上系统和“啤酒游戏”实验软件。

4. 实验原理

通过观察供应链管理中典型的“牛鞭效应”现象,认识到如何保证整条供应链的成本最小化是供应链管理的主要研究问题。即使一个企业内部资源优化整合后,如果不注重供应链管理,在市场环境中仍然无法立于不败之地。

5. 实验步骤

(1)收货:将运输延迟的库存收到当前库存中;

(2)发货:按上期收到的订单发货,按照订单量将库存中的货放入与下游间的运输2周延迟中。发货后做缺货量记录和库存记录; (3)发订单:下游向上游发订单,作记录;

(4)收订单:收下游的订单,并作记录; (5)实验结果分析。

6. 实验报告要求

(1)实验名称、学生姓名、班号和实验日期; (2)实验目的和要求; (3)实验仪器、设备与材料; (4)实验原理; (5)实验步骤; (6)实验原始记录; (7)实验数据计算结果;

(8)实验结果分析,讨论实验指导书中提出的思考题,写出总结及心得体会。

7.实验结果

8. 思考题

当价格随需求变动或生产提前期发生变化时,供应链会产生怎样的波动?如何缓解供应链中的“牛鞭效应”现象?

答:当价格随需求变动或生产提前期发生变化时,供应链会产生需求逐级放大的情况,俗称“牛鞭效应”。

缓解供应链中的“牛鞭效应”现象的主要方法如下: (1)缩短供货时间

供货时间长短影响到销售商的安全库存的多少,也影响到销售商的订货量的增加。缩短供货反应的时间,安全存货量就会下降,销售商的订货更接近需求,需求的扭曲得到了缓解。因此,通过应用现代信息系统可以及时获得销售信息和货物流动情况,建立快速反应系统,同时通过多频率小批量联合送货方法,努力将供货时间缩短到最短,减弱“牛鞭效应”。

(2)实现信息共享

随着社会经济的发展,市场竞争已由企业与企业之间的竞争转为供应链之间的竞争,供应链是由企业组成,从货物原材料的原产地到最终的消费点的庞大的链。在这条链上,任何企业都不是独立存在的,链上存在的供应商、制造商、零售商、最终客户,他们之间存在着相互供求关系。在供应链上的任何企业进行商业决策时都会受到上游和下游企业的制约和影响,任何企业的决策也会影响和制约上游和下游企业。当供应链上的货物从供应商到制造商到批发商到零售商和消费者流动的同时,需求以订单的形式,向实物流动相反的方向传递着,形成了信息流。

通过集中实际需求信息,为供应链各级企业提供的顾客需求的全部信息,实现信息共享,是减少整个供应链的不确定性,也是减少和消除“牛鞭效应”最常用的方法。销售商通过销售时点信息系统采集顾客的实际购买量,在通过专用的信息网传入供应链的数据中心,数据中心可在很短时间内更新一次数据,这是没有任何放大和扭曲的最终需求量,数据中心对这些需求量进行分类汇总,供应链上各级供应商都有权进行数据中心分享这些信息,这样他们就能更及时更准确地掌握市场需求的真实变化,预先安排,降低“牛鞭效应”。

(3)减少需求变动性

价格折扣,商品促销等销售手段,会使顾客的需求发生很大的变化。通过减少顾客需求过程中的变化可以缩小“牛鞭效应”。销售商可以通过稳定的价格策略来减少顾客需求的变化,零售商以单一价格出售商品,而不是以周期性促销价

格出售产品,通过消除价格促销,零售商可以消除因促销产生的需求的急剧变化,他所观察到的顾客需求变化不大,他向批发商发出的订货量变化就不大,供应商所观察到的需求变化也不大,这样就可以减弱“牛鞭效应”。

(4)建立合作伙伴关系

供应链上的企业就必须建立合作伙伴关系,互相信任,实现信息共享、利益共享和风险分担。改造库存管理方式,如这种合作伙伴关系可以消除“牛鞭效应”的影响。在合作伙伴关系上,由于信息共享,制造商了解顾客的实际需求,这时,制造商并不依据零售商发出的订单生产,而会自己根据顾客的实际需求确定生产多少,每一期保存多少库存,向零售商供应多少商品,则可以避免“牛鞭效应”。特别是在产品供不就求的时候,销售商对供应商的供应情况缺乏了解,博弈的行为很容易产生,与销售商共享供应能力和库存状况的有关信息,能减轻销售商和客户的恐慌,能防止他们参加短期博弈。其次在供应不足的时候,供应商可根据销售商以前的销售来进行限额供应,而不是根据订购的数量,这样可防止销售商为获得更多的供应量而夸大订购量,从而降低产生“牛鞭效应”。

(5)提高预测的精确度

这需要考虑历史资料、定价、季节、促销和销售额等因素,有些数据是掌握在零售商和分销商手中,必须与它们保持良好的沟通,及时获得这些数据,采取上下游间分享预测数据并使用相似的预测方法进行协作预测,来提高预测的准确性。例如,在美国电脑业中,制造商需要来自分销商中心仓库存货的销售数据,尽管这些数据并非完全等于POS销售点数据,但制造商以这些数据作为与分销商保持联系的重要措施,这种措施可缩小供应链中上、下游在需求预测方面的差异。

(6)订货分级管理

根据“二一八定律”划分分销商,对他们进行分别对待,实行订货分级管理,通过管住关键销售商和重要销售商来减少变异概率。

(7)合理分担库存

供应商、分销商和零售商采用联合库存的方式合理地分担库存,一旦某处出

现库存短缺,可立即从其他地点调拨转运来保证供货。IBM、惠普和苹果等公司在合作协议中,明确要求分销商将零售商中央仓库里产品的出库情况反馈回去,虽然这些数据没有零售商销售点的数据那么全面,但这仍然比把货物发送出去以后就失去对货物的信息要好得多。这既防止了需求变异的放大,又现了共担风险,降低了整体库存,有效地抑制了“牛鞭效应”。

(8)缩短提前期

一般来说,订货提前期越短,订量越准确。根据沃尔玛的调查,如果提前26周进货,需求预测误差为40%:提前16周进货,需求预测的误差为20%,而在销售时节开始时进货,则需求预测的误差为10%。因此,缩短提前期能够显著地减小“牛鞭效应”。

(9)采用业务外包

外包服务也可以抑制“牛鞭效应”,例如,采用第三方物流策略可以缩短提前期和实现小批量订货,无须再向一个供应商一次性大批订货,又减少了运输风险。

总之,“牛鞭效应”是市场需求信息扭曲的现象,供应链上的所有企业都应努力减弱牛鞭效应,减少供应链上的浪费,提高效率,创造更多的效益和利润。

9 实验结论

通过这个实验,是我对供应链企业的运作有了更真切的体会,实实在在地感受到了企业经营策略的重要性,对于产生的问题,解决的方法,同学之间的沟通,个人学习操作能力的理解都有了更深一层的提高。

现代市场环境的变化,要求企业加速资金周转、快速传递与反馈市场信息、不断沟通生产与消费的联系、提供低成本的优质产品,生产出满足顾客需求的顾客化的产品,提高用户满意度。因此,只有建立敏捷而高效的供应链系统才能达到提高企业竞争力的要求。

第三篇:供应链管理 啤酒游戏实验报告

供应链管理与客户关系管理实验报告

(一)

实验名称:啤酒游戏(综合性实验) 专业年级: 姓 名: 学 号: 分组情况:四人一组 组 员:

实验时间

1 实验目的

使学生能对供应链中的“牛鞭效应”现象进行更加直观并且深入的分析,理解供应链中的“牛鞭效应”,分析产生“牛鞭效应”的原因,找出减少“牛鞭效应”的方法,通过“啤酒游戏”实验来理解供应链中的信息失真以及信息共享的重要性。 2 实验方法

游戏分组:每组4人,分别扮演:零售商、分销商、批发商、制造商,模拟一条供应链的运作过程,每个角色提交各自订单,重复游戏60次。 3 实验仪器

供应链推演套件啤酒游戏软件。 4 实验操作方法

(1)熟悉角色;

(2)分小组,同学扮演不同角色; (3)分析各个角色的经营状况; 5 实验步骤

(1)四个学生中的一个创建游戏(设定自己的姓名和游戏名称) (2)另外三名学生查找在第一步中创建的游戏名称,并加入游戏。

(3)游戏创建者开始游戏,系统生成20周的最终消费者随机需求量,进入第一周。

(4)零售商根据界面上显示的本周的下游的销售需求、从上游的收货情况、现有库存和缺货状况,决定本周分别向其上游供应商(分销商)的订购数量(注:下游发送的订购需求两周后到达上游,上游发货后两周后到达下游,下同),并发送订单。

(5)然后依次是分销商、批发商和制造商根据界面上显示的本周的下游的销售需求、从上游的收货情况/生产情况、现有库存和缺货状况,决定本周分别向其上游供应商的订购/生产数量,并发送订单。

(6)循环执行步骤4.5,在每一周向上游发送订单,直到第38周。游戏过程中,每个操作者可以随时查看自身所扮演角色在以前各周的操作状态(下游的销售需求、从上游的收货情况、现有库存和缺货状况等)

(7)游戏完成后,系统自动形成统计数据,包括各周各角色的操作状态(下游的销售需求、从上游的收货情况、现有库存和缺货状况等),同时以图表的形式展现各周各角色的订购情况、库存情况、缺货情况以及总成本情况。

6 实验数据:

图一汇总图

图二 零售商

图三 批发商

图四 分销商

图五 制造商

7 结果分析:由图一汇总图的订单折线图我们可以看出,整条供应链上由于信息不畅通,订货数据逐层被放大化了,接着导致供应链最上游制造商的库存量飙升,总成本也上升了。 随后各成员开始减少订单量,但是由于订货提前期为四周,减少订单量刚开始库存,总成本是慢慢的都降低了,但随后零售商,批发商,分销商,制造商纷纷都开始出现缺货问题,总成本又开始上升。所以如果零售商那里啤酒需求量相当稳定,那么上游每家公司都可以很好地管理库存水平,并且,整条供应链也处于平衡之中。但是,一旦零售需求迅速增加,便会对其余部分的渠道产生影响。随着渠道信息的传播,公司的库存迅速增加,这样也降低了整个渠道的效率。 8 讨论思考:

(1) 牛鞭效应产生的原因是什么?

1)供应链的不确定性;在这个游戏中不确定性有需求的不确定性、供应的不确定性和制造的不确定性。供应的不确定性由于订货提前期来体现的。

2)订货批量的影响;在供应链上,每个角色向上游供应商订货时,由于信息不畅通,订货提前期和防止缺货发生等因素,订货批量逐层被放大化了。 (2)可采取哪些措施避免牛鞭效应的产生?

1)缩短订货提前期;订货提前期越短,订量越准确,通过多频度小数量的送货方式,使需求预测的误差降低。

2)建立战略合作伙伴,使用一些物流信息系统,实现信息共享。

3)使用供应商库存管理方法来管理库存,使供应链的库存逼近零库存,降低成本。

第四篇:八路智力竞赛抢答器设计实验报告抢答器设计实验报告

20XX 报 告 汇 编 Compilation of reports

数字电子技术课程设计

目:

八路智力竞赛抢答器设计

名:

业:

电子科学与技术

级:

122 班

号:

指导教师:

20

日 安徽科技学院理学院

报告文档·借鉴学习 word 可编辑·实用文档 八路智力竞赛抢答器设计

、课程设计题目 (与实习目的)

(一)、题目:八路智力竞赛抢答器设计 (二)、实习目的:

1.进一步掌握数字电路课程所学的理论知识。

2.熟悉几种常用集成数字芯片的功能和应用,并掌握其工作原理,进一步学会使用其进行电路设计。

3.了解数字系统设计的基本思想和方法,学会科学分析和解决问题。

4.培养认真严谨的工作作风和实事求是的工作态度。

5.数点课程实验是大学中为我们提供的唯一一次动手实践的机会,增强动手实践的能力。

二 、

任务和要求

实现抢答器的方法很多,如 EPROM 编程、RAM 编程、单板机、单片机等,都可以组成抢答器系统。

(1)抢答器设计要求 设计一个抢答器,基本要求:

1.抢答器可以实现基本抢答;可同时供 8 名选手或 8 个代表队参加比赛,他们的编号分别是 0、1、2、3、4、5、6、7,各用一个抢答按钮,按钮的编号与选手的编号相对应,分别是 S0、S1、S2、S3、S4、S5、S6、S7。

2.给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答的开始。

3.抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在 LED 数码管上显示出选手的编号,同时扬声器给出音响提示。此外,要封锁输入电路,禁止其他选手抢答。优先抢答选手的编号一直保持到主持人将系统清零为止。

三 、总体方案的选择

( (1 )总体方案的设计 针对题目设计要求,经过分析与思考,拟定以下二种方案:

方案一:该方案是将抢答按钮先直接与锁存器而不是优先编码器相连,将最先抢答的选手的编号锁定,再依次经过优先编码器、译码器和七段显示器,最后显示的是抢答选手的编号,经过优先编码器后的信号到单稳态触发器,单稳态触发器又与报警电路直接连接,所以显示编号的同时可以发出报警信号。另外由主持人控制开关和其他部分电路通过门电路实现对抢答电路、定时电路和报警部分电路的控制。

主体框图如下:

报告文档·借鉴学习 word 可编辑·实用文档

图 1

八路智力抢答器方案一设计框图

方案二:主持人按动开始抢答的开关后,最先抢答的选手的电平信号先经过优先编码器,再依次经过数据锁存器,此时已经限制了其他选手的抢答,信号再经过译码器和七段数码显示器,将最先抢答的该选手的编号显示出来,并同时产生报警信号,到此完成的是抢答功能;如果没有人抢答, 30 秒减计数器减到 00 时也会发出报警信号,此是完成计时功能。

主体框图如下:

图 2

八路智力抢答器方案二设计框图

报告文档·借鉴学习 word 可编辑·实用文档

(2 2 )总体方案的选择

相比之下,第二种方案更好些。它的优点表现在以下几个方面:这种方案原理比较简单。主持人对整体电路的控制只需几个门电路就可完成,不必用特别的芯片来组成控制电路;更容易实现报警提示功能,在有选手抢答后或者计时开始和结束时。既减少了布线使整个电路更直观简单,又降低了产生错误的可能性。

单元电路的设计

1.设计所使用的元件及工具:

74LS48 ---------------------------- 3 个; 74LS279

----------------------------------- 1 个; 74LS192 -------------------------------- 2 个; 74LS148 --------------------------------------- 1 个; 74LS00

---------------------------- ------3 个; 74LS10

------------------------------------------- 1 个; 发光二极管--------------------------------------------- ------1 个; 555

----------------------------------------------------- 1 个; 电容:

0.1μf

----------------------------------------------1 个; 0.01μf -----------------------------------------------1 个; 电阻:

10kΩ

------------------------------------------------------------ ---------9 个; 15KΩ

----------------------------------------------1 个; 1kΩ ------------------------------------------------1 个; 68KΩ------------------------------------------------1 个 实验板一块; 万用表一个; 钳子一个; 导线若干。

2.各个单元电路 ( (1)

)

抢答电路设计

抢答电路的功能有两个:一是能分辨出选手按按钮的先后,并锁存优先抢答者的编号,供译码显示电路用;二是要使其他选手的按钮操作无效。因此,选用优先编码器 74LS148 和 RS 锁存器 74LS279 以及译码显示电路完成上述功能。

报告文档·借鉴学习 word 可编辑·实用文档

抢答器电路

工作原理:SW1-8 为八位选手的抢答开关,SW9 单刀双掷开关设为主持人控制开关。当主持人控制开关置于清零状态时,RS 触发器的 R 端为低电平,输出端全部为低电平。于是 74LS48 的 BI 为高,显示器灭灯;74LS148 的选通输入端 ST 为高电平,74LS148 处于工作状态,此时锁存电路不工作。当 SW9 置于开始状态,优先编码电路和锁存电路同时处于工作状态。74LS279 的 1R、1S 均为高电平,由真值表可知,输出 1Q 为低电平,从而使 74LS148 输入使能端为低电平有效,即抢答器处于等待工作状态。若有选手(假设为 3 号选手)按动抢答开关(即闭合 SW4),此时优先编码器74LS148 输入端 I3 接低电平有效,则输出 A2A1A0 为 100,A2A1A0 分别接至 4S、3S、2S,根据 RS 锁存器真值表,2Q3Q4Q 输出分别为 110,从而 74LS48 的输入端 DCBA 为0011,经 74LS48 译码,显示器上显示“3”。与此同时,当 74LS148 输入端有一个为低电平时,GS 为低电平有效,即标志译码器处于工作状态,从而使 1S 为 0,此时 1Q输出为高电平,致使 EI 为高电平,74LS148 处于禁止工作状态,其他选手抢答按钮的输入信号不会被接受。这就保证了抢答者优先性以及抢答电路的准确性。抢答结束后,主持人开关置于清零状态,数码管变灰,一切恢复初始状态,以便进入下一轮抢答环节。

报告文档·借鉴学习 word 可编辑·实用文档

( (2)

)

定时电路设计

设计要求抢答器具有定时功能,且节目主持人根据抢答题的难易程度,可设定一次抢答的时间(设为 30s)。设计中选用十进制同步加/减计数器 74LS192 进行设计,74LS192 是具有置数和清零功能, 其引脚图和逻辑图如图 10 所示。

图 10

74LS192 引脚图和逻辑图 P0、P1、P2、P3——置数并行数据输入; Q0、Q1、Q2、Q3——计数数据输出; CR————————清零端; LD————————置数端; CPu ———————加法计数 CP 输入; CPd ———————减法计数 CP 输入; CO————————进位输出端; BO————————借位输出端。

表 5

74LS192 真值表 根据设计要求,需要两片 74LS192 构成 100 进制减计数器。由功能真值表可知,只需将个位 74LS192 的借位输出端 BO 与十位 74LS192 的 CPd 即可实现 100 进制减计

报告文档·借鉴学习 word 可编辑·实用文档 数。值得注意的是,要使其实现减计数,CPu 端口必须接高电平。

计数器的时钟脉冲由秒脉冲电路提供。秒脉冲电路由555构成的多谐振荡器构成,如图 11 所示。多谐振荡器无需外加输入信号就能在接通电源自行产生矩形波输出。

图 11

多谐振荡器 因为周期为一秒,所以频率是 1 赫兹。图中电容的充放电时间分别是:

t1=RB×C×ln2≈0.7RB×C

t2=(RA+RB)×C×ln2≈0.7(RA+RB)C

所以 555 的 3 端输出的频率为:

f=1/(t1+t2)≈1.43/[(2RA+RB)C]

我们采用的电阻和电容值分别是:RA=15KΩ,R2=68KΩ,C1=10uf,满足上式,即得到的是秒脉冲。

由以上集成芯片设计的定时电路如图 12 所示。

图 12

定时电路

报告文档·借鉴学习 word 可编辑·实用文档 工作原理:首先主持人根据题的难易程度改变 74LS192 的输入端 D3D2D1D0 的电平来确定抢答时间(假定为 30 秒),555 构成秒脉冲产生电路为计时电路提供脉冲。抢答开始前主持人闭合开关,74LS192 的置数端 PL 为低电平有效,处于置数状态,数码管显示定时时间。抢答开始,主持人打开开关,计数器处于计数状态,555 产生的秒脉冲与十位 74LS192 借位输出端(其初始状态为高电平)相与。计数器递减计数至 00,十位 74LS192 借位输出端为低电平,计数器停止工作,产生报警。计时期间有人抢答,减计数器停止计时,显示器上显示此刻时间。

( (3)

)

报警电路设计 由 555 定时器和三极管构成的报警电路如图 13 所示。图中 555 定时器用来构成多谐振荡器,其震荡频率和秒脉冲产生电路中频率的计算方法相同。3 端的输出信号经过三级管驱动扬声器,发出报警信号。当 4 端的输入信号是高电平时,振荡器工作,有报警信号,4 端输入低电平时,振荡器不工作,没有报警信号。也就是说需要报警时只需控制输入端即可。

电路图如下:

图 13 报警电路

报告文档·借鉴学习 word 可编辑·实用文档 ( (4)

)

时序控制电路 时序控制电路是抢答器设计的关键,需要完成以下三项功能:

a.主持人将控制开关拨到“开始”位置时,扬声器发声,抢答电路和定时电路进入正常抢答工作状态。

b.当竞赛选手按动抢答键时,扬声器发声,同时抢答电路和定时电路停止工作。

c.当设定的抢答时间到,无人抢答时扬声器发声,同时抢答电路和定时电路停止工作。

本设计中采用门电路对控制开关、抢答电路、定时电路、报警电路进行连接,以实现上述三项功能要求(如图 14 所示)。

图 14 时序控制电路

报告文档·借鉴学习 word 可编辑·实用文档 其中,两输入与非门采用 74LS00,引脚图如图 15 所示。三输入与门采用 74LS11,引脚图如图 16 所示。电路中利用与非门两输入端相连实现非门的逻辑功能。

图 15 74LS00 引脚图 图 16 74LS11 引脚图 工作原理:门 G1 的作用是控制时钟信号 CP 的放行与禁止,门 G2 的作用是控制74LS148 的输入使能端。主持人控制开关从“清零”位置拨到“开始”位置时,74LS279的输出 1Q=0,经 G3 反相,A=1,则从 555 输出端来的时钟信号 CP 能够加到 74LS192的 CPd 始终输入端,定时电路进行递减计时。同时,在定时时间未到时,74LS192 的借位输出端 BO2 为低电平,门 G2 的输出 ST 为高电平,使 74LS148 处于正常工作状态,从而实现功能 a 的要求。当选手在定时时间内按动抢答按钮时,1Q=1,经 G3 反相,A=0,封锁 CP 信号,定时器处于保持工作状态;同时,门 G2 的输出 ST 为低 74LS148处于禁止工作状态,从而实现功能 b 的要求。当定时时间到时,来自 74LS192 的 BO2为高,ST 为高,74LS148 处于禁止工作状态,禁止选手进行抢答。同时,门 G1 处于关门状态,封锁 CP 信号,使定时电路保持 00 状态不变,从而实现功能 c 的要求。

报告文档·借鉴学习 word 可编辑·实用文档 五 五 总体电路图

图 17

总电路图

下面介绍八路智力竞赛抢答器的使用原理。

首先是各个选手分别对应的按钮编号是 S0、S1、S2、S3、S4、S5、S6、S7,抢答后显示器上显示的分别是 0、1、2、3、4、5、6、7。

然后是主持人对整个电路系统清零,将开关置于“清零”的位置,输出低电平,分为两路:一路与锁存器的 1R2R3R4R 端相连,使输出端 1Q2Q3Q4Q 为低电平,1Q 所输出的低电平经与门反馈给 74LS148 的 EI 端子,编码器不工作,因此抢答部分显示器灭灯无显示,实现了清零;另一路低电平输出到计数器 74LS192 的 LD 端,而 CR端也是低电平,所以使得对应显示器输出预置的数据。

接下来主持人根据题目的难易程度设置抢答时间,此设定可以通过调节输入两片74LS192 的四个输入端 D、C、B、A 的高低电平来进行(例如要设定时间为 30 秒,就

报告文档·借鉴学习 word 可编辑·实用文档 将十位的 74192 的 D、C、B、A 分别置位为 0、0、1、1,而将各位的 74LS192 的 D、C、B、A 都置于 0)。当主持人宣读完题目说“开始”并将开关置于“开始”位置后,输出为高电平,此高电平有两路方向:一路输出到 74LS192 的 LD 端,使其处于高电平而开始减计数;还有一路输出到锁存器的 R 端。

当任意一个选手抢答时,例如 3 号抢答时,74LS148 三号端子输入低电平有效,此时 GS 为低电平有效,表征编码器在正常工作。编码输出 A2A1A0 为 100,与其对应的 4S3S2S 为 100,经 74LS279 锁存,4Q3Q2Q 输出为 011,经译码显示编号为 3。与此同时,1Q 所输出的高电平反馈回编码器的是能输入端,使其停止工作。此时,其他选手若再按动按钮也无对应输出,这就保证了抢答者优先性以及抢答电路的准确性。另一路,74LS148 的 GS 端输出电平由高变低,与秒脉冲发生器产生的秒脉冲相与后输出为 0,使得无脉冲抵达计数器 74LS192 的 Down 端。计数器停止工作,保持原来显示不变,即实现了暂停减计数使其记录抢答时间的功能。

若没有选手按动按钮,则 74LS279 输出全为高电平,74LS148 也输出高电平,1Q端输出低电平至 74LS48 的灭灯输入 RI/RBO 端,使得信号经 74LS48 到显示器上时无显示;若到定时部分计数器倒计时到 00 还无选手按动按钮的话,十位 74LS192 的借位输出端输出高电平反馈回个位 Down 端,停止计数。

综上所述,所设计的电路基本可以实现要求中的功能。

六 电路仿真

电路仿真采用 Multisim 仿真软件进行的。Multisim 软件可提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件;可提供的仿真仪表资源 :示波器、逻辑分析仪信号发生器、交直流电压表电流表等。它不仅具有其它 EDA 工具软件的仿真功能,还能仿真单片机及外围器件。因此,选用该软件对抢答器各单元电路及整体电路进行仿真。

报告文档·借鉴学习 word 可编辑·实用文档

七、小结

通过本次课程设计,不仅有效巩固了本学期所学数电的相关知识,加强了对重要知识点的记忆和理解,还学会如何运用Multisim仿真进行仿真受益匪浅,现总结如下。

本设计的难点在于时序控制电路的设计,如何在第一位抢答者抢答题目后让编码器停止工作;如何使计时电路在抢答后停止倒计时;如何让定时电路和抢答电路同时清零。设计过程中,根据以往抢答器设计思路,及查阅相关资料,可运用74LS279的输出1Q完成上述控制任务。从这一点,折射出自己在平时的学习中较死板,缺乏变通思考的能力。在电路仿真的过程中,由于Multisim操作相对较简单,因此在仿真过程中较为顺利。。

报告文档·借鉴学习 word 可编辑·实用文档

通过本次实践操作,也让我深刻明白:只有将课本上的理论知识,结合实践不断练习,不断总结提炼,反复思考实践中的经验教训,才能够真正消化为自己的知识。

八 八 分析和总结。

本次课程设计我只用了一个星期的时间就全部做完,效率很高,因为在设计之前根据设计的要求,每个模块都仔细的设计分析了,正是整个过程我都认真的态度和方案选择合适,才有这么高的效率。而且从本次课程设计中收获很多。可以总结为以下的几点:

(一)、巩固数电知识 这次课程设计主要是运用数字电路逻辑设计的一些相关知识,在整个实习过程中,都离不开对数字电路课程知识的再学习。我在最开始,就先将实习用到的知识通过翻阅数电书回顾了一遍(这也是对这门课的复习,给以后的复习备考减少了很多负担),这样的回顾让我对知识的理解更加透彻,对后来的快速设计起了很好的铺垫作用。而且还参考了数字电路实验指导书, 关于芯片的管脚,里面有清晰的描述。

(二)、学会用电路板、芯片、导线等组装各种功能的电路; 虽然这不是第一次用电路板,因为之前的课内实验也用过,但当时的运用也只是插些导线和电阻电容之类的,用了电路板的很小部分。这次的实习中应用了整块板子,实习后对电路板的组成完全了解了,并能熟练运用。实习中通过对电路的连接也懂得了如何通过设计的分析对所连电路的整体布局,如何更好的放置芯片在最合适的位置。在导线的连接上,如何选择导线走向是关键,我们应该尽量保证所连电路的简捷,宁短勿长,合理布线。一个完美的作品不仅要能很好的完成要求实现功能,还要在感官上给人美的享受。所以站在美的角度对自己的电路进行改良是很必要的。

(三)、理论联系实际 据老师介绍,这是大学里唯一一次比较大型的动手实践机会。我当然不会错过。课程设计,通过选择的题目,根据要求,运用所学知识将其付诸实践来完成。这并不是在课堂上的单纯听懂,或者课后看书过程中的深入理解,这需要的是一种理论联系实践的能力。理论知识往往都是在一些理想状态下的假设论,而实际的动手操作则完全不同,需要考虑实际中的很多问题。有些知识在理论上可能完全没错但到了实际中则不然。比如在动笔做题时我们是不用考虑导线、电阻是否连接的牢固合理,但在实际中,导线电阻有时是会带来时延造成花型变化的错乱,所以我们应尽量在连接电路时选择最短路径。平时试验中,我就很认真,所以会比平时不动手的要轻松地多。

(四)、和同学 共同合作、互相学习、共同进步 最初大家没思路的时候,特别的着急,我想出来了,大家问我,我就说了我的思路,我们不是抄袭,只是探讨,们个人都理解了才开始设计,我做的循环两遍,他们的都不是。我们的设计不同,我只是给大家启发了一个思考点。理论上我先设计出来,但在实习中经常会遇到一些自己可能暂时无法想明白的问题,请教同学或老师是很好的做法,节省时间,也会从别人身上学到更多。在设计时和同学相互交流各自的想法也是很重要的,不同的人对问题的看法总有差异,我们可以从交流中获得不同的idea,其他人的设计也可能有比你出色的地方,很好的借鉴,并在大家的商讨中选择最优方案最终一定会得到最好的设计方法。

第五篇:C程序设计实验报告

实验名称:指针与数组学时安排:2课时 实验类别:上机操作型实验要求:1人1组 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

一、实验目的

1. 理解指针、地址和数组间的关系;

2. 掌握通过指针操作数组元素的方法;

3. 掌握数组名作为参数的编程方式。

二、实验设备介绍

软件需求: Visual C++ 6.0或CFree3.5以上版本

硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。

三、实验内容

1. 定义函数void sort(int a[],int n)amain函数,并在其中调用sort函数。示例如下: After sorted the array is: -9 -6 1 2 4 5

2. 输入10个整数存储到数组a,再输入一个整数x,在数组a中查找x,若找到则输出相应的下标,否则显示“Not found!”。要求定义和调用函数search(int list[], int n, int x),在数组list中查找元素x,若找到则返回相应下标,否则返回-1。参数n代表数组list中元素的数量。

3. 改正程序error08_1.cpp中的错误。该程序实现功能,有n个整数,使前面各数顺序循环移动m个位置(m

要求先读该源程序,并理解其中的算法。然后把正确的代码(按规范缩进)写入报告,并以注释的方式说明错误原因。

注释示例如下:

int i;/*循环控制变量不能定义为double类型*/

提示:这是一个双重循环问题,内循环进行循环移位,外循环确定后移的位置。

4. 有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子。如此循环,直到留下最后一个人。问留下来的人的编号。要求用指针来操作数组。输入输出示例如下: 第 1 页 共 5 页

Last No. is: 4

提示:可以把编号存在一个数组中,报到3的人赋值为0表示退出。可以另外定义两个变量,一个用来记录退出的人数,到n-1即结束,另外一个用来报数。

四、程序清单

第一题

#include

void swap(int *,int*);

void sort(int a[],int n);

void main()

{

int i,n,a[8];

printf("Input n:");

scanf("%d",&n);

printf("Input array of %d integers: ",n);

for(i=0;i

scanf("%d",&a[i]);

sort(a,n);

printf("After sorted the array is:");

for(i=0;i

printf("%3d",a[i]);

printf(" ");

}

void sort(int a[],int n)

{

int i,j,index;

for(i=0;i

{

index=i;

for(j=i+1;j

if(a[j]

index=j;

swap(&a[i],&a[index]);

}

}

void swap(int *px,int *py)

{

int t;

t=*px;

*px=*py;

*py=t;

}

第二题

#include

int search(int list[],int n,int x);

void main()

{

int i,x,result,a[10];

printf("Enter a[0]-a[9]:");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

printf("Enter x:");

scanf("%d",&x);

result=search(a,10,x);

if(result==-1)

printf("Not found! ");

else

printf("The position is %d ",result);

return 0;

}

int search(int list[],int n,int x)

{

int i,result=-1;

for(i=0;i

if(list[i]==x)

{

result=i;

break;

}

return result;

}

第三题

#include

void mov(int *, int, int);

int main()

{

int m, n, i, a[80], *p;

printf("Input n, m:");

scanf("%d%d",&n,&m);

printf("Input array of 5 int55egers:");

for(p=a,i=0;i

scanf("%d",p++);// p本身可取地址

mov(a,n,m);

printf("After moved the array is:");

for(i=0;i

printf("%5d",a[i]);

printf(" ");

return 0;

}

void mov(int *x, int n, int m)

{

int i,j,t;

for(i=0;i

{

t=x[n-1];/*保存最后位置的元素值*/

for(j=n-1;j>0;j--)/*从倒数第二个元素开始,每个元素向后一个位置 */

x[j]=x[j-1];/* 调试时设置断点 */

x[0]=t;/*将保存的最后元素值放在最前面*/

}

}

第四题

#include

int main()

{

int i,j,n,t,count,a[10000];

printf("Input n:");

scanf("%d",&n);

for(i=0;i<=n;i++)

a[i]=i;

count=0;

i=1;

j=0;

while(count

{

if(i>n)

i=1;

if(a[i]!=0)

j++;

if(j==3)

{

t=i;

a[i]=0;

j=0;

count++;

}

i++;

}

printf("Last No. is:%d ",t);

return 0;

}

五、运行结果

六、实验心得

1、 C中数组名即是数组中首元素(下标为0的元素)的地址。注意:这不包括形参数组名,因为形参数组名并不占据实际的内存单元。它只是指向其它数组首地址的指针。

2、 数组名(比如a)代表数组首元素的地址,它是一个指针常量,在程序中不能改变它的值。例如:a++是非法的。。

3、 实参数实参数组名代表一个固定的地址,或者说是指针常量。但形参数组并不是一个固定的地址,而是作为指针变量,它的值是可以改变的。在函数调用开始时,它的值等于实参数组首元素的地址,在函数执行期间,它可以再被赋值。

4、指向数组的指针变量也可以带下标,如:p[i]与*(p+i)等价。*(p+i)与*(a+i)等价。

5、 当实参是数组名时,传递的是该数组首元素的地址,即是一个指针。

上一篇:优秀党员宣讲先进事迹下一篇:营销策划书营销计划表