模拟乒乓球游戏机控制电路课程设计.docx

上传人:b****5 文档编号:6363046 上传时间:2023-01-05 格式:DOCX 页数:12 大小:180.11KB
下载 相关 举报
模拟乒乓球游戏机控制电路课程设计.docx_第1页
第1页 / 共12页
模拟乒乓球游戏机控制电路课程设计.docx_第2页
第2页 / 共12页
模拟乒乓球游戏机控制电路课程设计.docx_第3页
第3页 / 共12页
模拟乒乓球游戏机控制电路课程设计.docx_第4页
第4页 / 共12页
模拟乒乓球游戏机控制电路课程设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

模拟乒乓球游戏机控制电路课程设计.docx

《模拟乒乓球游戏机控制电路课程设计.docx》由会员分享,可在线阅读,更多相关《模拟乒乓球游戏机控制电路课程设计.docx(12页珍藏版)》请在冰豆网上搜索。

模拟乒乓球游戏机控制电路课程设计.docx

模拟乒乓球游戏机控制电路课程设计

 

一、基本设计要求

二、STC89C52芯片介绍

三、程序流程图

四、“乒乓球”比赛系统数码管部分

五、“乒乓球”比赛系统模拟“兵乓球”部分

六、“乒乓球”比赛系统控制开关部分

七、程序设计

八、参考文献

一、基本设计要求:

1、设计一个由甲、乙双方参赛。

2、用8个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其启动的方向可以由任意一方开始。

3、当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。

若击中,则球向相反方向移动;若未击中,则对方得1分。

由失分的一方开球。

4.设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局,一局到的时候蜂鸣器响起,并显示局数之比。

5、随时可以复位比赛,比赛的比分和状态可以复位。

摘要:

为了实现模拟乒乓球比赛的过程和规则,我们采用了STC89C52单片机来控制模拟,采用用8个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,用蜂鸣器来实现响铃,比赛双方用按钮开关来模拟启动球拍击球,用数码管来显示比赛分数,和局数之比。

关键词:

AT89C51LED蜂鸣器。

二、芯片介绍

2.1、89C52芯片介绍

STC89C52是51系列单片机的一个型号,它是ATMEL公司生产的。

STC89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。

 STC89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,STC89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

 兼容MCS51指令系统·8k可反复擦写(>1000次)FlashROM

  ·32个双向I/O口·256x8bit内部RAM

  ·3个16位可编程定时/计数器中断·时钟频率0-24MHz

  ·2个串行中断·可编程UART串行通道

  ·2个外部中断源·共5个中断源

  ·2个读写中断口线·3级加密位

  ·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能

STC89c52为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。

功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

P0口

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

P2口

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。

  Flash编程或校验时,P2亦接收高位地址和一些控制信号。

P3口是一组带有内部上拉电阻的8位双向I/O口。

P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻

  辑门电路。

对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。

此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

  P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

RST

复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/PROG

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。

该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

PSEN

程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。

在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。

XTAL1

振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2

振荡器反相放大器的输出端。

特殊功能寄存器

在STC89C52片内存储器中,80H-FFH共128个单元为特殊功能寄存器(SFE),SFR的地址空间映象如表2所示。

并非所有的地址都被定义,从80H—FFH共128个字节只有一部分被定义,还有相当一部分没有定义。

对没有定义的单元读写将是无效的,读出的数值将不确定,而写入的数据也将丢失。

不应将数据“1”写入未定义的单元,由于这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单元数值总是“0”。

STC89C52除了与STC89C51所有的定时/计数器0和定时/计数器1外,还增加了一个定时/计数器2。

定时/计数器2。

  STC89C52有256个字节的内部RAM,80H-FFH高128个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128字节的RAM和特殊功能寄存器的地址是相同的,但物理上它们是分开的。

  当一条指令访问7FH以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128字节RAM还是访问特殊功能寄存器。

如果指令是直接寻址方式则为访问特殊功能寄存器。

定时器0和定时器1:

  STC89C52的定时器0和定时器1的工作方式与STC89C51相同。

定时器2

  定时器2是一个16位定时/计数器。

定时器2由两个8位寄存器TH2和TL2组成,在定时器工作方式中,每个机器周期TL2寄存器的值加1,由于一个机器周期由12个振荡时钟构成,因此,计数速率为振荡频率的1/12。

  在计数工作方式时,当T2引脚上外部输入信号产生由1至0的下降沿时,寄存器的值加1,在这种工作方式下,每个机器周期的5SP2期间,对外部输入进行采样。

若在第一个机器周期中采到的值为1,而在下一个机器周期中采到的值为0,则在紧跟着的下一个周期的S3P1期间寄存器加1。

由于识别1至0的跳变需要2个机器周期(24个振荡周期),因此,最高计数速率为振荡频率的1/24。

为确保采样的正确性,要求输入的电平在变化前至少保持一个完整周期的时间,以保证输入信号至少被采样一次。

管脚图如下:

 

三、程序流程图:

右拍先发球开始:

按SB4开始右向左移动

SB1是否

等于0

SB2是否

等于0

SHU1加1

SHU1是否等于21

SHU1=0、SHU2=0、c++、蜂鸣器响起

SHU2加1

SHU2是否等于21

SHU1=0、SHU2=0、d++、蜂鸣器响起

右向左移动

NO

YESYES

左向右移动

NO

YES

YES

左拍先发球开始:

左向右移动

NO

YESYES

右向左移动

NO

YES

YES

四、乒乓球比赛系统数码管部分

整个过程由STC89C52单片机控制,对分数的显示我们用数码管,数码管有发光亮度强的优点,能够满足我们的要求通过控制数码管的段,就可以控制数码管的数学的显示,我们采用了动态方式来控制数码,该方式是通过让数码管快速切换显示,人眼分辨不出来,不仅节约电能,而且还能够节约单片机的端口,从而减少程序的复杂性。

用P0口来控制数码管段显,用P2口的低三位控制数码管的位选,采用74LS138译码器,可以节省单片机得端口。

数码管电路图如下图所示:

五、乒乓球比赛系统模拟“兵乓球”部分

STC89C52单片机有价格低,抗干扰能力强的优点,所以完成能够满足我们的要求,我们用单片机的P1控制8个LED的开关,通过对P1口的控制就能控制LED,由于P1口内部没有上拉电阻,不能良好的驱动LED,LED显示亮度会很暗,所以我们在外部添加了上拉电阻。

依次对P0口给值0X01、0X02、0X04、0x08、0x10、0X20、0X40、0X80便可以控制灯得流水。

P2.5控制蜂鸣器,如下图所示:

 

六、“乒乓球”比赛系统控制开关部分

P3.0来控制LED由左到右的开关(即左拍)、P3.1来控制LED由左到右的开关(即右拍),P3.2来控制左向右的开始发球,P3.3来控制右向左的开始发球。

整体图如下所示:

(实际中只用到S1、S2、S3、S4)

七、程序设计

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitSB1=P3^0;//按键定义

sbitSB2=P3^1;//按键定义

sbitSB3=P3^2;//按键定义

sbitSB4=P3^3;//按键定义

sbitMic=P2^5;//蜂鸣器定义

ucharcount=0;

uchari,j,shu1,shu2,a,b,c,d,shi,shi1,ge,ge1;

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示

dengcode[]={0x7f,0xbf,0xdf,0xef,

0xf7,0xfb,0xfd,0xfe};//流水灯显示

voiddelay(uintx)//延时程序

{uchary;

while(x--)

for(y=0;y<125;y++);

}

voidtimer0()//计数器程序

{TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//开总中断

ET0=1;

TR0=1;

}

//数码管显示程序

voiddesplay(uchara,ucharb,ucharc,uchard)

{

P0=table[c];//局比分数

P2=0;

delay(5);

P0=table[d];

P2=1;

delay(5);

shi1=a/10;//左拍得分数

P0=table[shi1];

P2=3;

delay(5);

ge1=a%10;

P0=table[ge1];

P2=4;

elay(5);

shi=b/10;//右拍得分数

P0=table[shi];

P2=6;

delay(5);

ge=b%10;

P0=table[ge];

P2=7;

delay(5);

}

voidyidong(ucharfang)//左右移动程序

{for(i=0;i<8;i++)

{delay(100);

if(fang==0)P1=dengcode[i];

elseP1=dengcode[7-i];

}

}

voidmic()//蜂鸣器程序

{Mic=1;

delay(3000);

Mic=0;

}

voidmain()//主程序

{timer0();

while

(1)

{if(SB1==0&&P1==0X7f)yidong(0);

if(SB1==1&&P1==0X7f)

{shu2++;

if(shu2==21)

{shu1=0;shu2=0;d++;mic();

}

yidong(0);

}

if(SB2==0&&P1==0Xfe)yidong

(1);

if(SB2==1&&P1==0Xfe)

{shu1++;if(shu1==21)

{shu1=0;shu2=0;c++;mic();

}

yidong

(1);

}

if(SB3==0)yidong

(1);

if(SB4==0)yidong(0);

}

}

voidtimer1()interrupt1//中断程序

{TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

desplay(shu1,shu2,c,d);

}

 

八、参考文献

※单片机原理与应用李精华主编※高等教育出版社※

※单片机原理与应用张洪润编著※清华大学出版社※

※电路分析基础付玉明主编※中国水利水电出版社※

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 交通运输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1