嵌入式课程设计报告模拟计算器和乒乓球游戏机文档格式.docx
- 文档编号:21315391
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:12
- 大小:1.09MB
嵌入式课程设计报告模拟计算器和乒乓球游戏机文档格式.docx
《嵌入式课程设计报告模拟计算器和乒乓球游戏机文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告模拟计算器和乒乓球游戏机文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
利用LED流水灯的流向模拟球的运动方向,击球之后,灯的运动反向。
2.击球:
甲、乙两方各有一个按键作为球拍,以按键的按下开关表示击球。
如果没有失误,则甲方击球后发光二极管向乙方移动,反之亦然。
3.失误:
接球方必须在放光二极管移动到自己方最末一个二极管时,按下击球键使球向对方移动。
如果击球过迟或者长时间没有击球,都认为是失误。
4.计分:
利用数码管显示失误的次数即分数,如果失误达到11分,则数码管熄灭表示输,同时LCD显示本局结束。
5.速度的控制,利用数字键来控制灯运动速度的增减。
2概要设计
2.1简易计算器的功能模块
该设计主要有数据的输入和数据的显示,数据的输入靠键盘实现,主要是数据的输入和运算符的输入,在输入运算符之后数码管全灭等待下一个数据的输入,按下Enter键计算两次输入数据的运算结果,再次按下Enter键重新开始下一次计算数据的输入。
能够实现数码管的动态显示。
图2.1简易计算器功能模块图
2.2乒乓球游戏机的功能模块
乒乓球游戏机的主要是球的运动部分、击球部分和失误统计部分。
球的运动部分能够实现任意球员发球,灯的运动方向不同,击球部分主要用键盘模拟球拍,在击球的时候判断是否已经超过击球时间,是否长时间没有击球,数码管主要是统计显示失误的分数,输球是刷新分数,当失误次数达到11时,熄灭掉输方的数码管,同时LCD显示本局结束。
该系统的功能模块图如下:
图2.2乒乓球游戏机功能模块图
3详细设计
3.1简易计算器的程序流程图
图3.1简易计算器程序流程图
3.2乒乓球游戏机的程序流程图
图3.2乒乓球游戏机程序流程图
3.3简易计算器的功能实现
3.3.1显示输入数据的函数
该函数主要功能是进行移位,使输入的数据能够准确显示输入的数据,而不是倒着显示。
voidmove_num(intnum)
{
inti;
for(i=num;
i>
0;
i--)
{
disp_buf[i]=disp_buf[i-1];
}
}
3.3.2显示计算结果的函数
该函数主要是用来显示计算结果,并根据输入数据的小数点位数判断结果的小数点的显示位数和位置。
对于不同的运算保持不同的精度。
Voidshow_result(floatLast_result,intpoint_position,inta)
intsum;
inti=0;
if(a==1)
disp_buf[point_position]=0;
sum=(int)Last_result;
while(sum>
0)
{
disp_buf[i]=sum%10;
sum/=10;
i++;
}
disp_buf[point_position]+=0x80;
ZLG7290_SendBuf((uint8*)disp_buf,8);
if(a==2)
disp_buf[point_position*2]=0;
0){
disp_buf[point_position*2]+=0x80;
}
3.4乒乓球游戏机的功能实现函数
3.4.1定时器的设置和中断服务函数
定时器设置为0.01秒,每0.01秒进入中断服务程序一次,在中断服务程序中进行时间的累加,到1秒中检测是否击球,没有击球就使失误分数加1。
//定时器设置
voidsettime()
//Fclk=200MHz,时钟分频配置为1:
2:
4,即Pclk=50MHz。
rTCFG0=250;
//预分频器0设置为250,取得200KHz
rTCFG1=1;
//TIMER0再取1/4分频,取得50KHz
rTCMPB0=0x0000;
//设置定时器为0
rTCNTB0=500;
//定时0.01秒
rTCON=(1<
<
1);
//更新定时器数据
0)|(1<
3);
//启动定时器
//中断服务程序
voidIRQ_Time0(void)
{
time++;
//清除中断标志
rSRCPND=1<
10;
rINTPND=rINTPND;
3.4.2发球函数的实现
该函数主要是确定发球方,进而确定球的运动方向。
voidOneStart()//甲方发球
intj;
for(j=1;
j<
=8;
j*=2)
{
LED_DispNum(j);
DelayNS(set_time);
}
voidTwoStart()//乙方发球
for(j=8;
j>
=1;
j/=2)
}
3.4.3判断失误次数的函数实现
该函数主要是计算并显示双方失误的次数,判断是否达到11次,没有达到则继续击球,否则LCD显示本局结束,输球方的数码管熄灭。
voidjisuan(interr1,interr2)//计算最后输赢
if(err1>
=11)
disp_buf[4]=0x1f;
disp_buf[5]=0x1f;
ZLG7290_SendBuf((uint8*)disp_buf,8);
DispDesktop();
//显示图片
DelayNS(100);
}
if(err2>
disp_buf[0]=0x1f;
disp_buf[1]=0x1f;
3.4.4击球函数的实现
该函数主要是实现击球的情况,同时判断击球的时间是否已经超过预设时间,如果长时间不击球则认为失误或者击球时间超过1秒也是失误,失误分数加1,调用显示函数显示当前分数。
if(key==1)//甲方打球
DelayNS(5);
if(key==1)
if(start_flag==0)
time=0;
start_flag=1;
if(time<
=100)
for(j=1;
{
LED_DispNum(j);
DelayNS(set_time);
if(j==8)
{
time=0;
player_flag=2;
}
}
else//甲方失误
error1++;
disp_buf[4]=error1%10;
disp_buf[5]=error1/10;
ZLG7290_SendBuf((uint8*)disp_buf,8);
jisuan(error1,error2);
TwoStart();
time=0;
if(key==12)//乙方打球
if(key==12)
for(j=8;
player_flag=1;
else//乙方失误
error2++;
disp_buf[0]=error2%10;
disp_buf[1]=error2/10;
OneStart();
}
}
4测试结果
4.1简易计算器的测试
测试输入两个数相乘观察结果如下:
图4.1输入数据的显示
图4.2计算结果的显示
4.2乒乓球游戏的测试
乒乓球游戏的测试中,主要测试灯的流动方向,击球之后反向运动,数码管的失误分数统计,能够动态显示计数分数,在结束时LCD屏幕的提示输方的数码管灯熄灭等。
主要显示功能如下图所示:
图4.3乒乓球运动显示
图4.4失误分数的显示
图4.5结束提示
5总结
通过本次简易计算器和乒乓球游戏机的设计,我对S3C2410实验箱的结构有了更加详细的了解,同时,也巩固了平时学习中的理论知识。
在对ZLG7290的运用中,熟悉并掌握了ZLG7290的操作原理和编程,会了键盘的消抖、连击处理等知识,简易计算器的设计完成了计算器的基本功能,能够实现加减乘除的运算,并且能够准确显示所输入的数据,得出正确的结果。
乒乓球游戏机的设计能够实现球运动方向的控制,击球之后球的运动方向反向,计算击球时间做出是否失误的判断。
失误达到11次之后显示本局结束。
6致谢
首先感谢冯老师这两周的辛勤辅导,使我对基本理论知识有了更深刻的掌握,在本次课程设计中,老师的帮助给了我很多函数实现过程中的方便方法,让我也对C语言也有了一次提高的过程。
感谢在本次课程设计中帮助我的同学。
感谢学校和院系给我这次课程设计的机会。
7参考文献
1、ARM嵌入式系统开发-软件设计与优化,AndrewN.Sloss,沈建华(译),北京航空航天大学出版社,2005;
2、ARM体系结构与编程,杜春雷,清华大学出版社,2007;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式课程设计报告 模拟计算器和乒乓球游戏机 嵌入式 课程设计 报告 模拟 计算器 乒乓球 游戏机