求51单片机的8路抢答器,在普中开发板上实现

求51单片机的8路抢答器,在普中开发板上实现,第1张

单片机源程序如下:

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define WHO P0

sbit player1=P1^0

sbit player2=P1^1

sbit player3=P1^2

sbit player4=P1^3

sbit Ensure=P3^7

sbit beep=P1^6

sbit LSA=P3^2

sbit LSB=P3^3

sbit LSC=P3^4

uchar state=0

uchar ssec=0

uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}

uchar OUT[]={0x71,0x77,0x38,0x38}

void delay(uint time)

{

uint x,y

for(x=timex>0x--)

for(y=130y>0y--)

}

void Delay2(uint i)

{

while(i--)

}

void Show(uchar content[])

{

uchar i

for(i=0i<4i++)

{

switch(i) //位选,选择点亮的数码管,

{

case(0):

LSA=0LSB=0LSC=0break//显示第0位

case(1):

LSA=1LSB=0LSC=0break//显示第1位

case(2):

LSA=0LSB=1LSC=0break//显示第2位

case(3):

LSA=1LSB=1LSC=0break//显示第3位

}

P2=content[i]//发送段码

Delay2(100)//间隔一段时间扫描

P2=0x00//消隐

}

}

void InitTimer0(void)

{

TMOD = 0x01

TH0 = 0x0D8

TL0 = 0x0F0

EA = 1

ET0 = 1

TR0 = 1

}

void main()

{

Ensure=1

while(1)

{

if(player1==0)//玩家1进入抢答状态

{

delay(10) //延时,按键消抖

if(player1==0)//再次判断是否进入抢答状态

{

if(state==0) //前方无人抢答状态

{

InitTimer0()

state=1 //将抢答状态置为1,防止其他玩家抢答

while(!player1) //抢答成功,蜂鸣器发声

{

beep=~beep

delay(1)

}

WHO=table[1] //数码管显示抢答成功的玩家编号

}

}

}

if(player2==0) //以下结构类似于玩家1

{

delay(10)

if(player2==0)

{

if(state==0)

{

InitTimer0()

state=1

while(!player2)

{

beep=~beep

delay(1)

}

WHO=table[2]

}

}

}

if(player3==0)

{

delay(10)

if(player3==0)

{

if(state==0)

{

InitTimer0()

state=1

while(!player3)

{

beep=~beep

delay(1)

}

WHO=table[3]

}

}

}

if(player4==0)

{

delay(10)

if(player4==0)

{

if(state==0)

{

InitTimer0()

state=1

while(!player4)

{

beep=~beep

delay(1)

}

WHO=table[4]

}

}

}

}

}

void Timer0() interrupt 1

{

TH0=(65536-45872)/255 //给定时器赋初值,定时50ms

TL0=(65536-45872)%255

ssec++

if(Ensure)

{

if(ssec>=100) //5s

{

EA=0

while(1)

Show(OUT)

}

}

else

{

delay(10)

if(Ensure==0)

{

while(!Ensure)

Ensure=0

if(ssec>=100)

{

EA=0

}

}

}

}

早期电脑都直接采用机器语言,即用“0”和“1”为指令代码来编写程序,难写难读,编程效率极低。为了方便编程,随即出现了汇编语言,虽然提高了效率,但仍然不够直观简便。从1954年起,电脑界逐步开发了一批“高级语言”,采用英文词汇、符号和数字,遵照一定的规则来编写程序。高级语言诞生后,软件业得到突飞猛进的发展。

1953年12月, IBM公司程序师约翰·巴科斯(J. Backus) 写了一份备忘录,建议为IBM704设计一种全新的程序设计语言。巴科斯曾在“选择顺序控制计算机”(SSEC)上工作过3年, 深深体会到编写程序的困难性。他说:“每个人都看到程序设计有多昂贵,租借机器要花去好几百万,而程序设计的费用却只会多不会少。”

巴科斯的目标是设计一种用于科学计算的“公式翻译语言”(FORmula TRANslator)。他带领一个13人小组,包括有经验的程序员和刚从学校毕业的青年人,在IBM704电脑上设计出编译器软件, 于1954年完成了第一个电脑高级语言——FORTRAN语言。1957年,西屋电气公司幸运地成为FORTRAN的第一个商业用户, 巴科斯给了他们一套存储着语言编译器的穿孔卡片。 以后,不同版本的FORTRAN纷纷面世,1966年,美国统一了它的标准,称为FORTRAN 66语言。 40多年过去,FORTRAN仍然是科学计算选用的语言之一,巴科斯因此摘取了1977年度“图林奖”。

FORTRAN广泛运用的时候, 还没有一种可以用于商业计算的语言。美国国防部注意到这种情况, 1959年5月,五角大楼委托格雷斯·霍波博士领导一个委员会,开始设计面向商业的通用语言(Common Business Oriented Langauge) ,即COBOL语言。COBOL最重要的特征是语法与英文很接近, 可以让不懂电脑的人也能看懂程序;编译器只需做少许修改,就能运行于任何类型的电脑。委员会一个成员害怕这种语言的命运不会太长久, 特地为它制作了一个小小的墓碑。然而,COBOL语言却幸存下来。1963年,美国国家标准局将它进行了标准化。用COBOL写作的软件,要比其他语言多得多。

1958年,一个国际商业和学术计算机科学家组成的委员会在瑞士苏黎世开会,探讨如何改进FORTRAN,并且设计一种标准化的电脑语言,巴科斯也参加了这个委员会。1960年,该委员会在1958年设计基础上,定义了一种新的语言版本——国际代数语言ALGOL 60,首次引进了局部变量和递归的概念。 ALGOL语言没有被广泛运用,但它演变为其他程序语言的概念基础。

60年代中期, 美国达特默斯学院约翰·凯梅尼 (J. Kemeny) 和托马斯·卡茨(T.Kurtz)认为,象FORTRAN那样的语言都是为专业人员设计,而他们希望能为无经验的人提供一种简单的语言,特别希望那些非计算机专业的学生也能通过这种语言学会使用电脑。于是, 他们在简化FORTRAN的基础上, 研制出一种 “初学者通用符号指令代码”(Beginners All purpose Symbolic Intruction Code),简称BASIC。由于BASIC语言易学易用, 它很快就成为最流行的电脑语言之一,几乎所有小型电脑和个人电脑都在使用它。经过不断改进后,它一直沿用至今,出现了象QBASIC、VB等新一代BASIC版本。

1967年,麻省理工学院人工智能实验室希摩尔·帕伯特(S.Papert),为孩子设计出一种叫LOGO的电脑语言。帕伯特曾与著名瑞士心理学家皮亚杰一起学习,他发明的LOGO最初是个绘图程序,能控制一个“海龟”图标,在屏幕上描绘爬行路径的轨迹,从而完成各种图形的绘制。帕伯特希望孩子不要机械地记忆事实,强调创造性的探索。他说:“人们总喜欢讲学习,但是,你可以看到,学校的多数课程是记忆一些数据和科学事实,却很少着眼于真正意义上的学习与思考。 ” 他用LOGO语言启发孩子们学会学习,在马萨诸塞州列克星敦,一些孩子用LOGO语言设计出了真正的程序,使LOGO成为一种热门的电脑教学语言。

1971年,瑞士联邦技术学院尼克劳斯·沃尔斯(N. Wirth)教授发明了另一种简单明晰的电脑语言,这就是以帕斯卡的名字命名的PASCAL语言。PASCAL语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。它一出世就受到广泛欢迎,迅速地从欧洲传到美国。沃尔斯一生还写作了大量有关程序设计、算法和数据结构的著作,因此,他获得了1984年度“图林奖”。

1983年度的 “图林奖” 则授予了AT&T贝尔实验室的两位科学家邓尼斯·里奇 (D.Ritchie)和他的协作者肯·汤姆森(K. Thompson),以表彰他们共同发明著名的电脑语言C。C语言现在是当今软件工程师最宠爱的语言之一。

里奇最初的贡献是开发了UNIX *** 作系统软件。他说,这里有一个小故事:他们答应为贝尔实验室开发一个字处理软件,要求购买一台小型电脑PDP-11/20,从而争取到10万美元经费。可是当机器购回来后,他俩却把它用来编写UNIX系统软件。UNIX很快有了大量追随者,特别是在工程师和科学家中间引起巨大反响,推动了工作站电脑和网络的成长。1970年,作为UNIX的一项“副产品”,里奇和汤姆森合作完成了C语言的开发,这是因为研制C语言的初衷是为了用它编写UNIX。这种语言结合了汇编语言和高级语言的优点,大受程序设计师的亲睐。

1983年,贝尔实验室另一研究人员比加尼·斯楚士舒普 (B.Stroustrup),把C语言扩展成一种面向对象的程序设计语言C++。如今,数以百万计的程序员用它来编写各种数据处理、实时控制、系统仿真和网络通讯等软件。斯楚士舒普说:“过去所有的编程语言对网络编程实在太慢,所以我开发C++,以便快速实现自己的想法,也容易写出更好的软件。”1995年,《BYTE》杂志将他列入“计算机工业20个最有影响力的人”的行列。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11464889.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存