模拟乒乓球游戏机控制电路课程设计.docx
《模拟乒乓球游戏机控制电路课程设计.docx》由会员分享,可在线阅读,更多相关《模拟乒乓球游戏机控制电路课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
模拟乒乓球游戏机控制电路课程设计
一、基本设计要求
二、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);
}
八、参考文献
※单片机原理与应用李精华主编※高等教育出版社※
※单片机原理与应用张洪润编著※清华大学出版社※
※电路分析基础付玉明主编※中国水利水电出版社※