碰数电子玩具的设计Word文档格式.docx
- 文档编号:16707948
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:18
- 大小:2.83MB
碰数电子玩具的设计Word文档格式.docx
《碰数电子玩具的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《碰数电子玩具的设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
游戏时间(计时时间)设为1分钟。
3)、计时开始1分钟内按下“停止”键,停止计时,三个数码管显示的数字停留在最后一次显示的数字上,若三位数码管显示的数字一样,比如:
222,444,666等,则游戏胜利,播放欢快的音乐;
若三位数字不完全一样,则游戏失败,播放悲伤的音乐。
4)、重新按下“开始”键后,重新计时,三位数码管重新从0开始显示。
5)、若1分钟到了,还没有按下“停止”键,停止计时,同时系统发出“gameover”的语音。
2设计方案
2.1基本方案
按照实验设计[1]的要求,采用at89c51单片机[2]作为主控芯片,结合两种七段数码管、语音芯片、按键、喇叭、74hc573[3]等进行实验设计。
通过对单片机的编程,实现一分钟的定时效果并显示出来,三个数码管以不同的速率运转,循环显示0-9十个数字,通过对相应端口的按键控制使其能够重复利用,控制单片机端口条件控制语音芯片。
具体的来说,一个两位的数码管显示出一分钟的计时情况,计时结束后单片机激活语音芯片,使其发出游戏时间结束的语音;
三个一位的七段数码管以不同的速率运行,循环显示出0-9,并用一个按键控制该三个数码管的运行与停止,另一个数码管进行清零操作。
当按键按下是三个数码管停止时,若显示的三个数据相同则播放游戏成功的语音;
反之播放游戏失败的语音。
一分钟计时时间内,可重复进行碰数游戏,一旦游戏成功或游戏时间结束则该游戏结束。
这样就基本能够实现该碰数电子玩具的相应功能。
系统原理框图[4]如下:
图1原理框图
2.2适度发挥
1)、将一个开始按键和一个停止按键改为一个按键控制游戏的开始与停止,另一个按键进行清零操作;
2)、将一分钟的定时采用两位数码管实时显示出来,效果清晰可见;
3)、不用蜂鸣器而改用语音芯片,效果更好。
3设计原理分析
3.1主要硬件介绍
3.1.1at89c51单片机
本次设计我们采用的是单片机AT89C51作为主芯片。
Atmel公司的AT89C51是一种低功耗、高性能的片内含有4kB快闪可编程/擦除只读存储器(FPER—OM)的8位CMOS微控制器,使用高密度、非易失存储器技术制造,并且与80C51引脚和指令系统完全兼容。
AT89C51具有40管脚,有P0,P1,P2,P3四个主要I/O口,每个口都分为八位,其中以P3口功能最强大,是单片机的主要功能口,AT89C51的引脚图如图1所示:
图2 AT89C51的引脚图
3.1.2语音芯片
图3语音芯片引脚图
本芯片工作电压宽1.8V---5.5V的工作范围静态电流小于等于1UA
1脚是去耦(可以接一个104对地)可以不接
4脚电源正极5脚电源负极
6脚可以定义输入(来控制语音)也可以定于输出
7脚只能作为输入
8脚可作为输入也可以作为输出
6脚7脚和8脚都可以定义一下功能
1:
触发脚和正电源接触一次播放一编,在播放的时候重新触发[5]不会停止或打断(或者几遍默认是一遍有要求请说明)若接在高电平上也不会一直播放
2:
触发脚和正电源接触一次播放一编,在播放的时候重新触发会打断然后重新播放,若接在高电平上也不会一直播放
3:
触发一下播放下一种声音(适合有几种声音文件的)
4:
触发脚接在高电平上会一直循环的播放离开高电平后播放完本次后停止
5:
触发脚接在高电平上会一直循环的播放离开高电平后立即停止播放
6:
触发脚和电源正极接触一次就会播放播放完会自己停下来,但是播放的时候再接触一次就会停止
7:
触发脚和电源正极接触一下会一直循环播放再接触一次会停下来(需要外接一个电子元件)
8:
当电源接通后会播放一段音乐,播放完后触发其他的脚位也播放其他音乐
与单片机连接串口识别来控制语音的种类(请向本公司申请另一份关于此功能的说明书)
3.1.374hc573锁存器
74HC573的八个锁存器都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D)输入而变。
当使能为低时,输出将锁存在已建立的数据电平上。
输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。
这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。
特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器。
图474hc573引脚图
3.2系统程序介绍
3.2.1初始化计数器
voidinit_sys(void)
{
TMOD=0x01;
//定时器T0工作在方式1[6]
TH0=(65536-10000)/256;
//预先设定定时器初值为10ms
TL0=(65536-10000)%256;
EA=1;
//开启总中断
ET0=1;
//允许T0中断
TR0=1;
//定时器0启动计数
}
3.2.2按键扫描
voidkeyscan(void)
{
staticbytess=0;
if(key1==0)
{
delay(3);
if(key1==0&
&
(fail_flg||win_flg))
{
num_0=0;
num_1=0;
num_2=0;
music1=0;
music2=0;
music3=0;
ss=0;
fail_flg=0;
game_time=60;
start_flg=0;
win_flg=0;
time_flg=0;
while(!
key1);
}
}
if(key2==0)
if(key2==0&
!
fail_flg&
win_flg)
{
ss++;
time_flg=1;
if(ss%2==0)
{
start_flg=0;
//游戏暂停
if(ss!
=0&
num_1==num_2&
num_0==num_1)
win_flg=1;
//有按键按下+数字1等于数字2等于数字3
if(win_flg)
{
music1=1;
music2=0;
}
elseif(!
music1=0;
music2=1;
music3=0;
}
else
start_flg=1;
//游戏开始
music1=0;
music2=0;
key2);
该程序实现的功能:
按键1:
当游戏成功或者游戏时间结束时,按下按键1,进行清零并初始化相应的参数;
按键2:
首次按下按键2,游戏开始运行,再次按下游戏停止,这样可在一分钟定时时间内循环利用,当显示的三个数据都相同时,表示游戏成功,music1语音响起;
反之表示游戏失败的music2语音响起。
3.2.3数码管显示
voidled_show(void)
display(num_0,2);
//显示游戏数字1
delay(50);
display(num_1,3);
//显示游戏数字2
display(num_2,4);
//显示游戏数字3
display(game_time/10,0);
//显示游戏时间
display(game_time%10,1);
voiddisplay(bytenum,bytewei)
{
P3=addr[wei];
P0=led[num];
P3口设置的为位选,P0口设置的为段选。
0和1位显示的是游戏时间,2、3、4位显示的为三个以不同速率循环显示0-9的数据。
3.2.4中断函数
voidtimer0()interrupt1
staticbytett_0=0;
//10ms
if(time_flg&
win_flg)//游戏时间+!
成功
systemtime++;
if(start_flg&
fail_flg)tt_0++;
//游戏开始+!
失败
if(tt_0>
5)
{
tt_0=0;
num_0++;
if(num_0>
9)
{
num_1++;
if(num_1>
num_1=0;
num_2++;
if(num_2>
9)num_2=0;
if(systemtime>
100)//100*10ms
systemtime=0;
game_time--;
if(game_time<
1)game_time=0;
游戏开始后,三个数码管以不同速率循环显示0-9,并通过定时器进行一分钟定时。
通过初始化的10ms乘以systemtime100再乘以设定的game_time60从而实现一分钟定时。
3.2.5主函数
voidmain(void)[7]
{
init_sys();
music1=0;
music2=0;
music3=0;
while
(1)[8]
keyscan();
led_show();
if(!
game_time)//游戏时间为0
fail_flg=1;
music3=1;
}
首先进行初始化,将music赋予低电平,然后再while循环里调用按键扫描函数、数码管显示函数。
游戏时间结束,进行中断操作,并通过给music3赋予高电平,使其发出游戏结束的语音。
4软硬件设计和调试
4.1软件仿真
4.1.1总的设计流程图
图5总的设计流程图
接上电源之后进行初始化,当按键1按下,数码管以不同速率循环显示0-9.再次按下按键1数码管显示此时的数据,比较三个数据。
如果都相同,则游戏成功,否则游戏失败。
在规定的游戏时间内,如果失败可重复进行游戏,指导游戏成功或游戏时间结束。
当游戏成功或游戏结束,按下按键2进行清零或者说初始化,以便重复进行游戏。
4.1.2总的仿真电路图
图6仿真电路图
该仿真电路图采用at89c51单片机、6位7段数码管、排阻、两个按键、三个发光二极管组合而成。
从左向右数,6位数码管前两位用于一分钟计时的实时显示,最后三位用于不同速率循环显示0-9,而中间一位作为前两者的分界线,便于区分且观察效果较好。
三个发光二极管代表三种不同的语音,绿色的代表成功的语音,红色的代表失败的语音,黄色的代表游戏结束的语音。
相应发光二极管点亮,就表示相应语音想起。
4.1.3软件仿真运行及调试
1)软件运行系统上电初始化,60秒倒计时准备,三个不同速率循环显示0-9进行“000”的初始化。
图7初始化电路图
2)按下开始按键,游戏开始进行60秒倒计时,同时最后三位数码管以不同速率循环显示0-9,再次按下该按键显示如下,红灯亮(发出失败的语音),游戏失败。
倒计时未结束是,可重复进行以上操作直至游戏成功或时间结束。
图8游戏失败电路图
3)按下停止键,数据显示如下,绿灯亮(发出成功的语音),游戏成功。
图9游戏成功电路图
4)游戏时间结束,计时显示为“00”,而最后三位停留在实时显示的数据。
图10时间结束电路图
5)当游戏成功或者游戏时间结束,按下另一个按键进行清零操作。
再按以上操作可循环重复运行。
图11清零后电路图
4.2硬件运行与调试
4.2.1硬件焊接
1)实际焊接电路图
图12实际焊接电路图
为了符合设计要求并结合开发板将实际焊接电路图完善如上图所示。
由于单片机端口不够用,采用两个74hc573进行端口扩展端口。
为了实现效果好,采用三个单独分离的一位数码管。
4.2.2硬件结果及调试
1)游戏初始化,发出初始化成功提示音。
图13初始化实物图
2)游戏运行,按下停止键,显示如下,发出失败的语音。
图14游戏失败实物图
3)游戏运行,按下停止键,显示如下,发出游戏成功的语音。
图15游戏成功实物图
4)当游戏时间结束后,显示如下,发出游戏结束的语音。
图16游戏结束实物图
5)当游戏时间结束或者游戏成功,按下清零按键,显示如下。
图17清零后实物图
5总结思考
1)、在焊接的过程中一定要认真仔细,这样可以减少不必要的错误产生;
在焊接导线时,先给导线镀锡是极为方便焊接的,包线时要选择包线钳合适的空洞;
2)、在实际的操作过程中,要能够把所学的或者查阅的知识灵活运用起来,这也是一种能力,一种值得我去进一步学习和掌握的能力。
3)、对于我而言,该碰数电子玩具的设计,看似比较简单,实则要通过很多很多的知识点以及硬件常识再加上不断地修改仿真调试才能做出来。
这些工作包括定时器的运用,数码管的扫描显示,按键的扫描与运用,相关的芯片的掌握与发挥等等。
4)、通过这次的设计,我充分的认识到学无止境,要想将设计做好做精必须学习并掌握有足够的知识,否则就会非常的吃力。
不管做什么都要认真去做,要坚持下去,只有这样才有可能成功。
5)、总而言之,这次的设计遇到了很多的问题,但通过查阅资料以及实时的仿真调试加上老师和同学们的指导,虽然很吃力但还是做出来了。
付出才会有收获。
参考文献
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子玩具 设计