付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、STM32大作业报告学生姓名:学 号:所在院系: 光电信息与计算机工程学院专业班级:授课教师:完成时间: 2021年刖百随着科学技术的不断进步,嵌入式近些年来逐渐兴起,其领域比拟新,开展非常迅速, 由于它属于新兴领域, 接触的人并不是很多, 但是嵌入式在各种电子设备上的应用越来越越 广泛,并且各种电子设备也在朝着嵌入式微系统,智能化的方向前进.STM32系列是基于专为要求高性能、低本钱、低功耗的嵌入式应用专门设计的ARM Cortex-M 内核.作为21世纪的人才,为了与社会实际需要相衔接,提升我们的学习兴趣,利用 STM32系列单片机 进行了一次嵌入式系统设计.摘要在本次作业中采用STM32
2、系列中的STM32F103RCT6微限制器芯片,采用 ALIENTEK战舰STM32开发板,使用 MiniSTM32开发板上的LCD接口,来 点亮TFTLCD ,实现触摸屏功能.精品资料精品资料课程设计任务要求本次的课程设计目的是实现一个经典的贪吃蛇游戏,整个游戏实现功能分别 为:1、初始化程序.2、随机红点、左转、右转、判断边框.二、系统硬件设计MCU1 ,EEETVCC1JGNULCD 19Fl.mim fwi inMM U1UalnI LI,I 兄PAliI'3HC 宜胃非iaH:u 段KLM口n IHUI KlVANTl EH US匚MX咻MCH H ! I I IM J I口
3、 MtST AfM'IO'* FTI'JUM-II PCWCIJ-H3/AIM H V5SA VEKM1VUJWIIW UH WKb D5 Hii TIMkd Cle'lftOCT* ffti l?t 1 人队 T1M4?H: KIXI STLTBU Cl IIIPH11 IS ! sMIU M-l- sH>M 5» 叫 mntwwii misoJWJmm SdLiESJ a m.' I1M! FFIll K SFHU CMIJ PL I TX snio IX Pt I k LU-ltXSI»i DJFAimKI f AIMU
4、llM CHI I 1H VM tI ft! hi J. IXSIKH11plrAh-MKlTlMi OLtllMJ 诩 PA2L1 TX *IX l.TlMi EHlTcNRE A pH / TIM:工 | HTtu1!L I空上口 SPif m. Kf£":n w M2 faTF F = ufiL_UA klM-ranwrirun ex.1vssWb中貂 XH> PAiPli PA1-SPII F.ii.SPIIaFk “Mi: W 41k 4 rLM 工MI9DAIK TIMS <11.1 Tlkh BKJNFISJlTUymi PSS125? M、 fA
5、UJTcX 牌工LK vpoP*ll ITM丸MiARHimi i -.fix iish i ihMl Ik 峭 HX I RRHH nsll 1114MTTiFII M4H1AIX7 TIM? 4HLTIMI CHINH4ADCI4K3ADCI5PH'iAIK t4TIM5 CH- 'llMM心 rei ADC.-U tmi cih ti nmparmli H3LTnu nu PAM. Trs TIM itiuPiU-TlMI OH1rHm iK*TIJbt C1U5IHK> DIgriMN-tlU 的WK.TIMN CICMt* ITFlr-|,2 硼 K IIMJ4
6、 匚HI 量HU IM rtPMSNj 硼TM 口哨 Mi riMU.CU run &H2 M1S0IIHI rich; ftlVSTtt SC K IJSJ IR TlMle 口 浦is疑 12S2_*等i _bkh“1 1icn wn ;6J 'i相 制h讣帆er 1rp 市eLs版忖<KHUN K.im D?弱 M16g,晅 一ft*雨!:h r卜加IWLCD- ID4 JTRSTg - - 1FQ: :m;5L91Lg g J I DUS4理»KE2UCWXi 11 w也星:PC ID LCD HL慢1 感 4 LK Kka叫;m 1,1 fcn m也;
7、JrAH I'lll* '1MM tf不4-1klI 1 SB &喇Ik;不1仙,Hf*u -n( T?b4L *轲 JJ晒出ULMJicidnLU、 式P K5F5PC 7u p- tt R利口二ThINI* 雨 1Pi r 11,Bl 5UPlPI?叫 1:fTil-J .< P CH-I1 4Ijy MJLtP4TFu2 ?硬件设计原理图根据此硬件设计图再结合软件设计就能做出此游戏.三、系统软件实现此次的课程设计在于开发个贪吃蛇游戏,其流程图如下列图所示延时初始化生成.LED初始化程序流程图为方便介绍,此软件实现只给出主要程序局部: 1、本例程提供了硬件平台
8、的初始化GPIO 是常规输入/输出端口,STM32F103RCT6 有 PA、PB、PC、PD、 PE共5个16位的GPIO oSTM32的GPIO都可编程,具有很多复用功能.GPIO 可以配置为很多总模式,这些模式有:输入浮空、输入上拉、输入下拉、模拟输 入、开漏输入、推挽输出、推挽复用、开漏复用.通过对 GPIO存放器编程,可 以设置每个端口的工作模式.24C02 EEPROM是开发板板载的 2Kbit 256个字节EEPROM ,型号 为:24C02 ,用于掉电数据保存.由于 STM32内部没有EEPROM,所开发板 外扩了 24C02 ,用于存储重要数据,用来做IIC实验,该芯片直接挂
9、在 STM32 的IO 口上.IICInter - Integrated Circuit总线是一种由 PHILIPS 公司开发的两线式申 行总线,用于连接微限制器及其外围设备. 它是由数据线SDA和时钟SCL构 成的串行总线, 可发送和接收数据.在 CPU与被控IC之间、IC与IC之 间进行双向传送,高速IIC总线一般可达400kbps以上.IIC总线在传送数据 过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号.开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据. 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据.应答信号:接收数据的IC
10、在接收到8bit数据后,向发送数据的IC发 出特定的低电平脉冲,表示已收到数据.CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是 否继续传递信号的判断.假设未收到应答信号,由判断为受控单元出现故障./* * 名 称:AT24CXX_Init(void)*功 能:初始化IIC接口*;/初始化IIC接口void AT24CXX_Init(void)IIC_Init();void IIC_Init(void)GPIO_InitTypeDef GPIO_InitStructure;RCC->APB2ENR|=1<<4;/ 先使能
11、外设 IO PORTC 时钟RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);IIC_SCL=1;IIC_SDA=1;/* * 名 称:void
12、 CMLCD_Init(void)*功 能:初始化触摸屏的硬件接口*/ void CMLCD_Init(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); 使能 PORTC 时GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_3|GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; / 设置成推免输出GPIO_InitStructure.GPI
13、O_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2|GPIO_Pin_1; / 初始化 GPIOC 2 1GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;/ 浮空输入GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);TPEN=1;2、贪吃蛇功能限制SPI是串行外设端口,是一种同步串行外设端口,它可以使 MCU与各种外 围设备以串行方式进行
14、通信、交换信息. STM32的SPI支持全双工同步传输, 可选择以8或16位传输帧格式进行传输,支持多种模式.USART为STM32的同步异步接收器.它提供了一种灵活的方法与使用异 步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范围的波特率选择.另外,它还允许多处理器通信.USART也可以使用DMA方式直接将接受的数据存储到内存或从内存中批量发送数据,也支 持多种中断方式.TFT-LCD即薄膜晶体管液晶显示器.其英文全称为:Thin Film Transistor-Liquid CrystalDisplay .TFT-LCD 与无源 TN-LCD、STN-
15、LCD 的简 单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管TFT,可有效地克服非选通时的申扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提升了图像质量.TFT-LCD也被叫做真彩7晶显示器.ALIENTEK提供的 2.8寸TFTLCD模块,具驱动芯片有很多种类型,比方 有:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP453 5/SPFD5408/SSD1289/1505/B505/C505/NT35310/NT35510等.LED DS0和 DS1.其电路在 ALIENTEK MiniSTM32
16、 开发板上默认是 已经连接好了的.DS0接PA8 , DS1接PD2./* 名称:int main(void)*功能:主函数*/*#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include "lcd.h"#include "tanchishe.h"#include "cmlcd.h"#include "timeit.h"#include &qu
17、ot;stdlib.h"/画一个大点(2*2的点)/x,y:坐标/color:颜色void TP_Draw_Big_Point(u16 x,u16 y,u16 color)POINT_COLOR=color;LCD_DrawPoint(x,y);/ 中央点LCD_DrawPoint(x+1,y);LCD_DrawPoint(x,y+1);LCD_DrawPoint(x+1,y+1);int main(void)(u8 sta,sta1;u16 rand_color;delay_init();延时函数初始化uart_init(9600); 串口初始化为 9600LED_Init();初
18、始化与LED连接的硬件接口LCD_Init();time_init();CMLCD_Init();/触摸屏初始化AT24CXX_Init();/eeprom 初始化sta1=TP_Get_Adjdata();if(!sta1)(sta=CMLCD_Adjust();if(sta)(TP_Save_Adjdata();校准成功就保存参数LCD_ShowString(40,40,100,16,16,"SUCCESSFUL!");)elseLCD_ShowString(40,40,100,16,16,"NO SUCCESSFUL!");)TABCHISHE_I
19、nit();while(1)(delay_ms(500);产生随机坐标if(snake.eat_sta)(snake.eat_sta=0;snake.rand_x=8*(1+(int)(29.0*rand()/(RAND_MAX+1.0);snake.rand_y=8*(1+(int)(34.0*rand()/(RAND_MAX+1.0);rand_color=LCD_ReadPoint(snake.rand_x,snake.rand_y);while(rand_color=BLUE)/随机点不能是蛇身上的点(snake.rand_x=8*(1+(int)(29.0*rand()/(RAND_
20、MAX+1.0);snake.rand_y=8*(1+(int)(34.0*rand()/(RAND_MAX+1.0);rand_color=LCD_ReadPoint(snake.rand_x,snake.rand_y);)LCD_Fill(snake.rand_x,snake.rand_y,snake.rand_x+snake.size,snake.rand_y+snake.size,RED);LED0=!LED0;预防中断效劳函数TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE );关中断对显示坐标的影响snake.eat_sta=show(snake.d1
21、);disappear(snake.d2,turn);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );开中断/* * 名 称:void TABCHISHE_Init(void)*功 能:贪吃蛇初始化*/ void TABCHISHE_Init(void) Shuzu_Init(turn); /转向数组初始化LCD_Clear(WHITE);POINT_COLOR=RED;LCD_DrawLine(0,282, 240, 282);LCD_DrawLine(120,280, 120, 320);LCD_ShowString(20,290,72,12,12,&qu
22、ot;left/down");LCD_ShowString(20,303,36,12,12,"score:");LCD_ShowString(140,290,64,12,12,"right/up");/以下为贪吃蛇程序初始化LCD_Fill(120,160,136,168,BLUE); 一开始蛇长度为 2 个 SIZEsnake.eat_sta=0;snake.length=2;LCD_ShowxNum(56,303,snake.length,3,12,0x80);snake.max=MAX;snake.size=8;snake.d1=0;sn
23、ake.d2=0;snake.x1=128;snake.x2=snake.x1+snake.size;snake.y1=160;snake.y2=snake.y1+sn ake.size;snake.X1=112;snake.X2=snake.X1+snake.size;snake.Y1=160;snake.Y2=snake.Y1+snak e.size;snake.rand_x=8*(1+(int)(29.0*rand()/(RAND_MAX+1.0);snake.rand_y=8*(1+(int)(34.0*rand()/(RAND_MAX+1.0);LCD_Fill(snake.rand
24、_x,snake.rand_y,snake.rand_x+snake.size,snake.rand_y+snake.size ,RED);/* 名称:void disappear(u8 d,u16 turnMAX3)*功能:贪吃蛇移动尾部消失格子*/新消失的一格参数:往左消失,往右消失void disappear(u8 d,u16 turnMAX3)int i=0;if(d=0)/默认方向为从左到右snake.X1=snake.X1+snake.size;snake.X2=snake.X2+snake.size;LCD_Fill(snake.X1,snake.Y1,snake.X2,snak
25、e.Y2,WHITE); 新显示的一格else if(d=1) 方向为下到上snake.Y1=snake.Y1-snake.size;snake.Y2=snake.Y2-snake.size;LCD_Fill(snake.X1,snake.Y1,snake.X2,snake.Y2,WHITE); 新显示的一格else if(d=2) 方向为右到左snake.X1=snake.X1-snake.size;snake.X2=snake.X2-snake.size;LCD_Fill(snake.X1,snake.Y1,snake.X2,snake.Y2,WHITE); 新显示的一格)else if(
26、d=3) 方向为上到下 (snake.Y1=snake.Y1+snake.size;snake.Y2=snake.Y2+snake.size;LCD_Fill(snake.X1,snake.Y1,snake.X2,snake.Y2,WHITE); 新显示的一格 ) for(i=0;i<MAX;i+)先判断是否是转方向点(if(snake.X1=turni0&&snake.Y1=turni1) (snake.d2=turni2;turni0=400;转向完毕去除记录的坐标(将坐标变为LCD以外区域)turni1=400; break;) )/* * 名 称:u8 show(
27、u8 d)*功能:贪吃蛇移动前部新增格子*/新显示的一格/参数:往左显示,往右显示u8 show(u8 d)(static u8 i=0;u16 color,color1;判断是否撞到自己的身体if(d=0)(color=LCD_ReadPoint(snake.x2+4,snake.y2-4);color1=LCD_ReadPoint(snake.x2+3,snake.y2-3);if(color=BLUE&&color1=BLUE)(LCD_ShowString(40,40,100,16,16,"NO SUCCESSFUL!");printf("
28、color%x color1%xrn",color,color1);printf("shezhuangziji0rn");delay_ms(5000);TABCHISHE_Init();d=snake.d1;)else if(d=1)(color=LCD_ReadPoint(snake.x1+4,snake.y1-4);color1=LCD_ReadPoint(snake.x1+3,snake.y1-3);if(color=BLUE&&color1=BLUE)(LCD_ShowString(40,40,100,16,16,"NO SUCC
29、ESSFUL!");printf("color%x color1%xrn",color,color1);printf("shezhuangziji1%d %d %drn",snake.d1,snake.d2,d);delay_ms(5000);TABCHISHE_Init();d=snake.d1;printf("%d %d %drn",snake.d1,snake.d2,d);)else if(d=2)(color=LCD_ReadPoint(snake.x1-4,snake.y1+4);color1=LCD_ReadPo
30、int(snake.x1-3,snake.y1+3);if(color=BLUE&&color1=BLUE)(LCD_ShowString(40,40,100,16,16,"NO SUCCESSFUL!");printf("color%x color1%xrn",color,color1);printf("shezhuangziji2rn");delay_ms(5000);TABCHISHE_Init();d=snake.d1;else if(d=3)color=LCD_ReadPoint(snake.x2-4,sna
31、ke.y2+4);color1=LCD_ReadPoint(snake.x2-3,snake.y2+3);if(color=BLUE&&color1=BLUE)LCD_ShowString(40,40,100,16,16,"NO SUCCESSFUL!");printf("color%x color1%xrn",color,color1);printf("shezhuangziji3rn");delay_ms(5000);TABCHISHE_Init();d=snake.d1;if(snake.y1=0&&am
32、p;d=1)|(snake.x1=0&&d=2)|(snake.y2=280&&d=3)|(snake.x2=240&&d=0) 蛇撞到墙了LCD_ShowString(40,40,100,16,16,"NO SUCCESSFUL!");printf("shezhuangqiangrn");delay_ms(5000);TABCHISHE_Init();d=snake.d1;if(snake.rand_x=snake.x1&&snake.rand_y=snake.y1)判断是否增加长度即碰到
33、随机点i=1;if(snake.d2=0)snake.X1-=16;snake.X2-=16; / 在尾端增加一格else if(snake.d2=1)snake.Y1+=16;snake.Y2+=16;else if(snake.d2=2)snake.X1+=16;snake.X2+=16;else if(snake.d2=3)snake.Y1-=16;snake.Y2-=16;snake.length+;LCD_ShowxNum(56,303,snake.length,3,12,0x80);)if(d=0)/默认方向为从左到右snake.x1=snake.x1+snake.size;sna
34、ke.x2=snake.x2+snake.size;LCD_Fill(snake.x1,snake.y1,snake.x2,snake.y2,BLUE); 新显示的一格)else if(d=1) 方向为下到上snake.y1=snake.y1-snake.size;snake.y2=snake.y2-snake.size;LCD_Fill(snake.x1,snake.y1,snake.x2,snake.y2,BLUE); 新显示的一格)else if(d=2) 方向为右到左snake.x1=snake.x1-snake.size;snake.x2=snake.x2-snake.size;LC
35、D_Fill(snake.x1,snake.y1,snake.x2,snake.y2,BLUE); 新显示的一格)else if(d=3) 方向为上到下snake.y1=snake.y1+snake.size;snake.y2=snake.y2+snake.size;LCD_Fill(snake.x1,snake.y1,snake.x2,snake.y2,BLUE); 新显示的一格) i=0;return 1; return 0;/* 名 称:void CM_Scan()*功 能:触摸屏扫描函数*/void CM_Scan()static u8 times=0;static u8 i=0;if(TPEN=0&&!times)times=1;if(CMLC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淮北市重点中学2026届高一下生物期末质量检测试题含解析
- 2026届云南省新平彝族傣自治县第一中学高一数学第二学期期末学业水平测试模拟试题含解析
- 辽宁省重点名校2026届高一数学第二学期期末质量检测模拟试题含解析
- 2026年园林机械行业的数字营销策略
- 内蒙古大学创业学院《影视摄像与编辑》2024-2025学年第二学期期末试卷
- 伊春职业学院《模戳印花布图案与工艺》2024-2025学年第二学期期末试卷
- 钟山职业技术学院《环境工程制图与含实训专业理论教学》2024-2025学年第二学期期末试卷
- 闽南理工学院《开发与培训》2024-2025学年第二学期期末试卷
- 厦门工学院《当代社会思朝》2024-2025学年第二学期期末试卷
- 2025-2026学年正太唱歌教学设计英语
- 和田~民丰~且末~若羌Ⅱ回750千伏输变电工程(且末~若羌段)环境影响报告书
- 2026平安集团IQ EQ题库
- 2026年南阳工艺美术职业学院单招职业倾向性测试题库含答案详解(预热题)
- 2025年哈尔滨科学技术职业学院单招职业倾向性考试题库附答案解析
- 2026年山东铝业职业学院单招综合素质考试必刷测试卷及答案1套
- 22J403-1楼梯栏杆栏板
- 高中英语必背3500单词表完整版
- 中药学考研习题
- 全套电子课件:数据结构(C语言版)(第三版)
- 最新版教科版科学四年级下册全册课件(配套新版教材)
- 某鸡舍工程施工设计方案
评论
0/150
提交评论