




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上 海 电 力 学 院嵌入式系统课程设计报告 题目: 乒乓球的弹壁模拟演示 姓 名: 学 号: 院系: 电子与信息工程学院 专业年级: 电子信息工程2010级 同组成员: 2013 年7 月10日一、实验目的 ARM9硬件平台程序设计要求通过对ARM硬件体系结构和S3C2410实验箱硬件模块的理解,能够自行创建、设置工程和编写程序代码、编译、调试运行来实现某种简单的应用,如计算器、电子闹钟等。加强对C语言和ARM汇编指令的编程锻炼以及ARM硬件接口功能的理解。二、实验环境硬件:PC机,ARM仿真器,S32410实验箱软件:Keil uVision3、 实验内容设计题目:乒乓球的弹壁模拟演示设计要求: 在LCD 屏幕上模拟给乒乓球一初始速度,假设该环境无能量损耗,让乒乓球在该环境下进行弹壁运动。1. 基本要求(1)该环境设有上下左右四面墙,让乒乓球在该环境下自由运动,碰到墙壁则反弹,否则按照匀速方式运动。(2)在教学实验箱的LCD 上绘制四面墙和一个乒乓球,按下开始键则给乒乓球一初始速度,指定一个方向开始运动;按下停止键则停止乒乓球的运动;按下暂停键则暂停乒乓球的运动,再按该键则继续运动。2. 扩展内容(1)假设该环境有重力,让乒乓球模拟在有重力的环境下运动。(2)用键盘按键可设定乒乓球的运动速度,也可利用按键在乒乓球运动的过程中给它提速。(3) 统计乒乓球碰撞的次数,并将其在LCD 上显示出来。四、设计思路1、本次实验所需用到的硬件模块:LCD(用来显示乒乓球撞壁过程);键盘(用来控制乒乓球的运动和速度);LED(用来显示乒乓球的碰撞次数)。2、因为本次实验要使LCD显示,并通过键盘产生中断控制乒乓球的运动状态和速度,所以本次实验主要同到的.c 文件主要是keyboard.c,lcd.c,led.c和main.c,主要在这几个文件上进行编程。本次实验的关键是如何在LCD中显示乒乓球,乒乓球在碰到壁后如何实现计数加一,如何用键盘产生中断控制乒乓球的状态及速度。五、软件实现通过下面的流程图简单介绍本实验的主题软件及功能: LCD_Testlcd.cled.cmain.ckeyboard.c功能功能功能功能显示个人信息(学号),计数乒乓球反弹次数显示乒乓球弹壁模拟演示界面,主函数,显示主界面用键盘读入键值实现中断控制乒乓球的运动状态和速度显示个人信息,主要是画乒乓球和墙壁(画球子函数)6、 模块功能描述:1.主程序,显示主界面的模块int main()sys_init(); lcd_init_app();uart_printf(n LCD display Test Example (please look at LCD screen)n); lcd_clr_rect(0,0,800,480,BLACK); /倒计时3秒进入乒乓球弹壁系统的显示界面Lcd_DspHz24(280,200,GREEN,欢迎进入乒乓球弹壁模拟演示);lcd_clr_rect(0,0,800,480,BLACK);Lcd_DspAscII8x16(400,200,WHITE,3);lcd_clr_rect(300,150,600,480,BLACK);Lcd_DspAscII8x16(400,200,WHITE,2);lcd_clr_rect(300,150,600,480,BLACK);Lcd_DspAscII8x16(400,200,WHITE,1);lcd_clr_rect(300,150,600,480,BLACK); /调用数码管显示程序 ,在数码管上显示我的学号led8_test();delay(20000); /延迟两秒数码管显示零准备计数iic_write_8led(0x70, 0x17, f_szDigital0);iic_write_8led(0x70, 0x16, f_szDigital0);iic_write_8led(0x70, 0x15, f_szDigital0);iic_write_8led(0x70, 0x14, f_szDigital0);iic_write_8led(0x70, 0x13, f_szDigital0);iic_write_8led(0x70, 0x12, f_szDigital0);iic_write_8led(0x70, 0x11, f_szDigital0);iic_write_8led(0x70, 0x10, f_szDigital0); /进入乒乓球弹壁模拟演示界面Glib_Rectangle(10,10,790,470,RED);Glib_Rectangle(11,11,791,471,RED);Glib_Rectangle(15,15,785,465,BLUE);Glib_Rectangle(14,14,786,466,BLUE); Glib_Rectangle(20,20,780,460,GREEN);Glib_Rectangle(19,19,781,461,GREEN);Lcd_DspAscII8x16(550,320,GREEN,20101956); Lcd_DspAscII8x16(550,350,RED,2010072); Lcd_DspHz24(500,150,GREEN,乒乓球弹壁模拟演示);Lcd_DspHz24(525,200,BLUE,电子信息工程);Lcd_DspHz24(550,280,SH,苏辉);Glib_Rectangle(40,40,410,410,RED); /画乒乓球弹壁范围框Glib_Rectangle(39,39,411,411,RED); Glib_Rectangle(38,38,412,412,RED); Glib_Rectangle(37,37,413,413,RED); Glib_Rectangle(36,36,414,414,RED);Glib_Rectangle(35,35,415,415,RED); Glib_Rectangle(34,34,416,416,RED); Glib_Disc(50,225,10,GREEN); /在设定位置画一个模拟乒乓球模型 while(1) color_lcd_test(); /进入测试 2、 数码管显示学号子程序void led8_test(void) uart_printf(n 8-Segment Digit LED Test Example (Please look at LED)n);iic_init_8led();iic_write_8led(0x70, 0x17, f_szDigital2);iic_write_8led(0x70, 0x16, f_szDigital0);iic_write_8led(0x70, 0x15, f_szDigital1);iic_write_8led(0x70, 0x14, f_szDigital0);iic_write_8led(0x70, 0x13, f_szDigital1);iic_write_8led(0x70, 0x12, f_szDigital9);iic_write_8led(0x70, 0x11, f_szDigital5);iic_write_8led(0x70, 0x10, f_szDigital6);主要程序框图:开始Main函数显示基本信息及演示界面显示基本信息及演示界面调用color_lcd_test();12键值判断等待3没有键被按下hh模式ss模式cc模式球按照设定的方向运动调用led显示模块计数0+键值判断5复位球减速暂停球加速循环运动3、 画圆子程序void Glib_Disc(int x0,int y0,int r,int color) UINT16T x,y; UINT32T xx,rr,xt,yt,rs; UINT16T Dr4=0; yt=r; rr=r*r+1; /补偿 1 修正方形 rs=yt*3/4; /画8分之一圆弧 for (xt=0;xt(rr-xx) yt-; x=x0+xt; /第一二象限上面的弧对应屈区域涂色 y=y0-yt; Dr0=x; x=x0-xt; Dr2=x; Dr1=Dr3=y; Glib_Line(Dr0,Dr1,Dr2,Dr3,color); y=y0+yt; /第三四象限下半部分对应区域涂色 Dr0=x; x=x0+xt; Dr2=x; Dr1=Dr3=y; Glib_Line(Dr0,Dr1,Dr2,Dr3,color); x=x0+yt; /第一二象限对应下面对应涂色 y=y0-xt; Dr0=x; x=x0-yt; Dr2=x; Dr1=Dr3=y; Glib_Line(Dr0,Dr1,Dr2,Dr3,color); y=y0+xt; /第三四象限上面对应区域涂色 Dr0=x; x=x0+yt; Dr2=x; Dr1=Dr3=y; Glib_Line(Dr0,Dr1,Dr2,Dr3,color); 4、 键盘读取子程序void keypad_test(void)UINT8T keychar;if(keyscan()switch(KeyNo)case 0x0000: keychar = U; break; / FUN keycase 0x0001: keychar = D; break;case 0x0002: keychar = -; s=s-2;break;case 0x0003: keychar = 0; cc=ss=hh=0; break;case 0x0004: keychar = +; s=s+2;break;case 0x0100: keychar = *; break;case 0x0101: keychar = C; break;case 0x0102: keychar = 3; cc=1;break;case 0x0103: keychar = 2; ss=1;break;case 0x0104: keychar = 1; hh=1; break;case 0x0200: keychar = F; break;case 0x0201: keychar = B; break;case 0x0202: keychar = 6; break;case 0x0203: keychar = 5; cc=ss=hh=2; break;case 0x0204: keychar = 4; break;case 0x0300: keychar = E; break;case 0x0301: keychar = A; break;case 0x0302: keychar = 9; break;case 0x0303: keychar = 8; break;case 0x0304: keychar = 7; break;default: break;if( keychar = U)uart_printf( You have pressed key n);elseuart_printf( You have pressed key n, keychar);备注:本次设计我使用了0、1、2、3、5、+、-,共7个键,其中1、2、3用于选择三个不同运动轨迹的球的运动,5用于控制乒乓球的暂停,0用于控制乒乓球的复位,+用于控制乒乓球运行时速度的加快,-用于控制乒乓球运行时速度的减慢。5、 小球弹壁轨道的设定模块void color_lcd_test(void)int i;keypad_test(); /测试键盘是否被按下,被按下cc,ss,hh进入三个不同速度的模式,如果键盘没有被按下则原地等待while(cc) /cc模式int m0=50,n0=225,x,y;int g,h=0; int i=0;Glib_Disc(50,225,10,GREEN); /画绿球Glib_Disc(50,225,10,BLACK); /画黑球,以便在运动的过程中,不需要刷屏便可对 红球进行擦拭iic_init_8led(); /调用数码管显示 for(m0=50;m0220;m0=m0+s)n0=n0-s;Glib_Disc(m0,n0,10,GREEN); x=m0;y=n0;Glib_Disc(x,y,10,BLACK);keypad_test(); /键值判断while (cc=2) /若检测到5键被按下则暂停,在原地画一个圆Glib_Disc(m0,n0,10,GREEN);keypad_test(); Glib_Disc(x,y,10,BLACK); keypad_test(); if (cc=0) /若检测到0键被按下则跳出循环(复位) break; w=w+1; /碰撞次数在数码管上显示 i=w/100; iic_write_8led(0x70, 0x12, f_szDigital2i); h=w/10; iic_write_8led(0x70, 0x11, f_szDigital1h); g=w%10; iic_write_8led(0x70, 0x10, f_szDigitalg); if (w=150) /数码管显示达到150则清零,从零开始 w=0; for(m0=220;m0=395;m0=m0+s) n0=n0+s; Glib_Disc(m0,n0,10,GREEN); x=m0;y=n0; Glib_Disc(x,y,10,BLACK); keypad_test(); while (cc=2) Glib_Disc(m0,n0,10,GREEN); keypad_test(); Glib_Disc(x,y,10,BLACK); keypad_test();if (cc=0) break; w=w+1;i=w/100; iic_write_8led(0x70, 0x12, f_szDigital2i); h=w/10; iic_write_8led(0x70, 0x11, f_szDigital1h); g=w%10; iic_write_8led(0x70, 0x10, f_szDigitalg);if (w=150)w=0; for(n0=220;n0=55) m0=m0-s; n0=n0-s; Glib_Disc(m0,n0,10,GREEN); x=m0; y=n0; Glib_Disc(x,y,10,BLACK); keypad_test(); while (cc=2) Glib_Disc(m0,n0,10,GREEN); keypad_test(); Glib_Disc(x,y,10,BLACK); keypad_test(); if (cc=0) break; w=w+1;i=w/100; iic_write_8led(0x70, 0x12, f_szDigital2i); h=w/10; iic_write_8led(0x70, 0x11, f_szDigital1h); g=w%10;iic_write_8led(0x70, 0x10, f_szDigitalg); if (w=150) w=0; 7、 在软件调试过程中遇到的问题 本次设计综合性比较强,需要用到好几个模块,在实践过程中难免遇到问题。首先遇到的第一个问题就是如何画乒乓球模型,在原有的代码中没有画圆形的函数程序,因此需要自己编写一个画圆子程序。可是在嵌入式这么课上没有操作过,所以不知从何下手。但是在查阅资料以及在老师的帮助下解决了这个问题。在设计过程中遇到的最大问题就是在调用keypad_test(),通过读取键盘值来控制乒乓球的暂停、复位以及在运动的过程中加速减速的问题。每次通过加一个按键来实现一个功能的时候总是不能顺利完成,总是会出现各种差错。比如在设定按键来控制加速减速的时候,我定义了一个按键,然后想在乒乓球运动的for语句下面加一个键值判断,通过按键来增加乒乓球位移的量,但不知怎么的,我感觉程序没错误但实验现象却不是我想要的。后来与同学一起讨论后,我把乒乓球移位的定量换成了变量,并在keypad_test里定义这个值,通过按键来改变它,于是得到了我设想结果。 当然,在设计过程中还是有一些小问题,有的属于比较低级的错误,但遇到问题时,不论是怎样的问题,只要静下心来认真观察,一步步的更改,实在找不出错误可以通过询问老师或者同学,都会有解决的办法。八、设计总结软件演示操作方法: 通过下载编译进入主界面之后,选择1,2,3,三个键可以以不同的速度、方向开始乒乓球的弹壁模拟实验,按0键可以使运动暂停,按5键是复位。按“+”键和“-”键分别控制乒乓球在运行过程中的速度。在乒乓球碰壁的同时,数码管会显示出一共碰壁的次数。没有达到设计要求: 没有考虑重力的因素,因为不太清楚重力应该怎么去实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 可视对讲合同范本5篇
- 湖南省常德市2016年秋赛课说课稿人教版九年级上册第六单元课题2 二氧化碳制取的研究 鼎城
- 2025YY房屋租赁合同终止协议书
- 乌海事业单位笔试真题2025
- 2025基因技术服务合同书
- 任务三 了解水温控制说课稿-2025-2026学年小学信息技术(信息科技)六年级下册桂科版(信息科技)
- 2025中介借款合同范本
- 第十五课 网站的测试、发布与评价说课稿-2025-2026学年初中信息技术教科版八年级上册-教科版
- 2025买卖见证合同示范文本
- 德州事业单位笔试真题2025
- JG/T 441-2014额定电压450/750 V及以下双层共挤绝缘辐照交联无卤低烟阻燃电线
- T/CI 311-2024风力发电机组高强钢塔架焊接附属件结构疲劳性能评价方法
- 公安计算机试题及答案
- 《肠道菌群》课件
- 《中医药信息学》课件
- 铁路旅客运输服务普速列车设备设施规范课件
- 大型活动标准化执行手册
- 做账实操-桌球俱乐部账务处理流程
- 高级起重工(三级)技能认定理论考试题(附答案)
- 高效团队合作与沟通技巧事务文书
- 管理信息系统Management Information System课件
评论
0/150
提交评论