




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
STM32大作業(yè)報告學生姓名:學號:所在院系:光電信息與計算機工程學院專業(yè)班級: 授課教師: 完成時間:2016年 、八、亠刖言隨著科學技術的不斷進步,嵌入式近些年來逐漸興起,其領域比較新,發(fā)展非常迅速,由于它屬于新興領域, 接觸的人并不是很多,但是嵌入式在各種電子設備上的應用越來越越廣泛,并且各種電子設備也在朝著嵌入式微系統(tǒng),智能化的方向前進。 STM32系列是基于專為要求高性能、低成本、低功耗的嵌入式應用專門設計的 ARMCortex-M內(nèi)核。作為21世紀的人才,為了與社會實際需要相銜接,提高我們的學習興趣,利用 STM32系列單片機進行了一次嵌入式系統(tǒng)設計。摘要在本次作業(yè)中采用STM32系列中的STM32F103RCT6微控制器芯片,采用ALIENTEK戰(zhàn)艦STM32開發(fā)板,使用MiniSTM32開發(fā)板上的LCD接口,來點亮TFTLCD,實現(xiàn)觸摸屏功能。精品資料精品資料課程設計任務要求本次的課程設計目的是實現(xiàn)一個經(jīng)典的貪吃蛇游戲,整個游戲?qū)崿F(xiàn)功能分別為:1、 初始化程序。2、 隨機紅點、左轉(zhuǎn)、右轉(zhuǎn)、判斷邊框。二、系統(tǒng)硬件設計MCIFO^*「]:*問詳工E生上[wi『I1 IKLMOTlIN1MCIFO^*「]:*問詳工E生上[wi『I1 IKLMOTlIN1淚€5rAiit1111間p> ||lkukr°ItLfe_1v(XA*e*hiktetFasnISTK.P|—IA一■jl'liMty>音4WlMi帕3.—KRJCSW424-Kill_.jTXI> iP*>—rbPAlS±VUn?JiHP1耳LLI>DI嚴斗Tll^tr:J1■PA12IUM1IIiinn:4'■j■LCTBumLLpMub■nnziiriKllANTlni+U8LJ3W*2HXkc^CVKmitwicmMtSTHliAlM'l!l,KIAMIIFC2.UXI2H'lAIM11Y5SAttHFAkiremqti血jcu?』n/iiriijciimiiMiLEniwu£rxA&KOnMlADllTIM:tlirUMl4112tx^ixjrihCmiTiefAAl-tRX烏Lx%TIM?_(H*TiMt*猶PA4--SFIIFA^SPIIFAESPIIElAfM-bTHACi-VOO*斕OJfllW11HWKbD5HiiTltU.CI^Fiocnr*ffilIM1tIHUM(IHJ島IXISTLTBI4amFH1IXI^MH-A^PIIMKdll由SlJPE4KVTltSTAPlgMISOJBl'JTIKbSnSOKiiaaEX.piniimsBIMBkxsrHucmijPtllOJTTXSDIOixPtIkLU~ltXSIMUmMRF^isjmiynubssius?LK
vpoP4iic<\rxrcuiFEH.X.IMtflWTIMIlH4MISO剛XtTlhD<l|i|/TIMiBk-INMTHPIl5)SI.AIK?■riM/rHrnMrCHINH4AIMHKiADCIimClAIMKlim^CH^IIMML-rtZNrBIADCUJ1WCIHTIWL1ETNraiBcxjn~fftKiEXlSilUtruniX*sli-^ii.'vssw$1W2WtiJT斷pasm:iHJCTniinupa*i.Trstimi~nuPA4-T1MIOHIWOC1I4&IHK>DIMLXTIMKClEWt*ITPC"125J-nrr.|.<MlKIIMHIHISIMM*Hl!l<SI!l?譚舊IN】MiriMI111軌runsnzmisoiiminunJWlVsPliMKl]SiARTlMlJUIK枷側FB_N$SI±S2_*¥BO.SMAJ'TNI_BKJ^上ICtJUgfTirT|whIBMra*LCPt*gI4K1HI誹ra.LCDmrmFB4-..i::q11也訂STMIL—甘JIlH.'SIKPC12JKLSOLi(l勺叭unTi4LollsIX、>■RSJV豈gkhiTriire15LQI5im-aMJlHn(1>tillJijrbi2-I:PGJO11121114
Jh硬件設計原理圖根據(jù)此硬件設計圖再結合軟件設計就能做出此游戲三、系統(tǒng)軟件實現(xiàn)此次的課程設計在于開發(fā)個貪吃蛇游戲,其流程圖如下圖所示
為方便介紹,此軟件實現(xiàn)只給出主要程序部分:1、本例程提供了硬件平臺的初始化GPIO是常規(guī)輸入/輸出端口,STM32F103RCT6有PA、PB、PC、PD、PE共5個16位的GPIOoSTM32的GPIO都可編程,具有很多復用功能。GPIO可以配置為很多總模式,這些模式有:輸入浮空、輸入上拉、輸入下拉、模擬輸入、開漏輸入、推挽輸出、推挽復用、開漏復用。通過對GPIO寄存器編程,可以設置每個端口的工作模式。24C02EEPROM是開發(fā)板板載的2Kbit(256個字節(jié))EEPROM,型號為:24C02,用于掉電數(shù)據(jù)保存。因為STM32內(nèi)部沒有EEPROM,所開發(fā)板外擴了24C02,用于存儲重要數(shù)據(jù),用來做IIC實驗,該芯片直接掛在STM32的IO口上。IIC(Inter—IntegratedCircuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設備。它是由數(shù)據(jù)線SDA和時鐘SCL構成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進行雙向傳送,高速IIC總線一般可達400kbps以上。IIC總線在傳送數(shù)據(jù)過程中共有三種類型信號,它們分別是:開始信號、結束信號和應答信號。開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結束信號:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送數(shù)據(jù)。應答信號:接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單元發(fā)出一個應答信號,CPU接收到應答信號后,根據(jù)實際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應答信號,由判斷為受控單元出現(xiàn)故障。/********************************************************************名 稱:AT24CXX_Init(void)功 能:初始化IIC接口********************************************************************///初始化IIC接口voidAT24CXX_Init(void){IIC_Init();}voidIIC_Init(void){GPIO_InitTypeDefGPIO_InitStructure;//RCC->APB2ENR|=1<<4;//先使能外設IOPORTC時鐘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;}/********************************************************************名 稱:voidCMLCD_Init(void)*功 能:初始化觸摸屏的硬件接口********************************************************************/voidCMLCD_Init(void){GPIO_InitTypeDefGPIO_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.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);//初始化GPIOC0313GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_1;//初始化GPIOC21GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空輸入GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);TPEN=1;}2、貪吃蛇功能控制SPI是串行外設端口,是一種同步串行外設端口,它可以使MCU與各種外圍設備以串行方式進行通信、交換信息。STM32的SPI支持全雙工同步傳輸,可選擇以8或16位傳輸幀格式進行傳輸,支持多種模式。USART為STM32的同步異步接收器。它提供了一種靈活的方法與使用異步串行數(shù)據(jù)格式的外部設備之間進行全雙工數(shù)據(jù)交換。USART利用分數(shù)波特率發(fā)生器提供寬范圍的波特率選擇。另外,它還允許多處理器通信。USART也可以使用DMA方式直接將接受的數(shù)據(jù)存儲到內(nèi)存或從內(nèi)存中批量發(fā)送數(shù)據(jù),也支持多種中斷方式。TFT-LCD即薄膜晶體管液晶顯示器。其英文全稱為:ThinFilmTransistor-LiquidCrystalDisplay。TFT-LCD與無源TN-LCD、STN-LCD的簡單矩陣不同,它在液晶顯示屏的每一個象素上都設置有一個薄膜晶體管(TFT),可有效地克服非選通時的串擾,使顯示液晶屏的靜態(tài)特性與掃描線數(shù)無關,因此大大提高了圖像質(zhì)量。TFT-LCD也被叫做真彩液晶顯示器。ALIENTEK提供的2.8寸TFTLCD模塊,其驅(qū)動芯片有很多種類型,比如有:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/SPFD5408/SSD1289/1505/B505/C505/NT35310/NT35510等。LED(DS0和DS1)。其電路在ALIENTEKMiniSTM32開發(fā)板上默認是已經(jīng)連接好了的。DS0接PA8,DS1接PD2。*名 稱:intmain(void)*功 能:主函數(shù)******************************************************************#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"stdlib.h"http://畫一個大點(2*2的點)//x,y:坐標//color:顏色voidTP_Draw_Big_Point(u16x,u16y,u16color){POINT_COLOR=color;LCD_DrawPoint(x,y);//中心點LCD_DrawPoint(x+1,y);LCD_DrawPoint(x,y+1);LCD_DrawPoint(x+1,y+1);intmain(void){u8sta,sta1;u16rand_color;delay_init();//延時函數(shù)初始化uart_init(9600);//串口初始化為9600LED_Init();//初始化與LED連接的硬件接口LCD_Init();time_init();CMLCD_Init();//觸摸屏初始化AT24CXX_Init();//eeprom初始化sta1=TP_Get_Adjdata();if(!sta1)sta=CMLCD_Adjust();if(sta){TP_Save_Adjdata();//校準成功就保存參數(shù)LCD_ShowString(40,40,100,16,16,"SUCCESSFUL!");}elseLCD_ShowString(40,40,100,16,16,"NOSUCCESSFUL!");}}TABCHISHE_Init();while(1){delay_ms(500);//產(chǎn)生隨機坐標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_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);//關中斷防止中斷服務函數(shù)對顯示坐標的影響snake.eat_sta=show(snake.d1);disappear(snake.d2,turn);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //開中斷}}/********************************************************************名 稱:voidTABCHISHE_Init(void)*功 能:貪吃蛇初始化********************************************************************/voidTABCHISHE_Init(void){Shuzu_Init(turn);//轉(zhuǎn)向數(shù)組初始化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,"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;snake.d2=0;snake.x1=128;snake.x2=snake.x1+snake.size;snake.y1=160;snake.y2=snake.y1+snake.size;snake.X1=112;snake.X2=snake.X1+snake.size;snake.Y1=160;snake.Y2=snake.Y1+snake.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_x,snake.rand_y,snake.rand_x+snake.size,snake.rand_y+snake.size,RED);}/********************************************************************名 稱:voiddisappear(u8d,u16turn[MAX][3])*功 能:貪吃蛇移動尾部消失格子********************************************************************///新消失的一格//參數(shù):往左消失,往右消失voiddisappear(u8d,u16turn[MAX][3]){inti=0;if(d==0) //默認方向為從左到右{snake.X1=snake.X1+snake.size;snake.X2=snake.X2+snake.size;LCD_Fill(snake.X1,snake.Y1,snake.X2,snake.Y2,WHITE); //新顯示的一格}elseif(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); //新顯示的一格}elseif(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); //新顯示的一格elseif(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++) //先判斷是否是轉(zhuǎn)方向點{if(snake.X1==turn[i][0]&&snake.Y1==turn[i][1]){snake.d2=turn[i][2];turn[i][0]=400; //轉(zhuǎn)向完畢清除記錄的坐標(將坐標變?yōu)長CD以外區(qū)域)turn[i][1]=400;break;}}}/********************************************************************名 稱:u8show(u8d)*功 能:貪吃蛇移動前部新增格子******************************************************************//新顯示的一格//參數(shù):往左顯示,往右顯示u8show(u8d){staticu8i=0;u16color,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,"NOSUCCESSFUL!");printf("color%xcolor1%x\r\n",color,color1);printf("shezhuangziji0\r\n");delay_ms(5000);TABCHISHE_Init();elseif(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,"NOSUCCESSFUL!");printf("color%xcolor1%x\r\n",color,color1);printf("shezhuangziji1%d%d%d\r\n",snake.d1,snake.d2,d);delay_ms(5000);TABCHISHE_Init();d=snake.d1;printf("%d%d%d\r\n",snake.d1,snake.d2,d);}}elseif(d==2){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,"NOSUCCESSFUL!");printf("color%xcolor1%x\r\n",color,color1);printf("shezhuangziji2\r\n");delay_ms(5000);TABCHISHE_Init();d=snake.d1;}}elseif(d==3){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,"NOSUCCESSFUL!");printf("color%xcolor1%x\r\n",color,color1);printf("shezhuangziji3\r\n");delay_ms(5000);TABCHISHE_Init();if((snake.y1==0&&d==1)||(snake.x1==0&&d==2)||(snake.y2==280&&d==3)||(snake.x2==240&&d==0))//蛇撞到墻了{LCD_ShowString(40,40,100,16,16,"NOSUCCESSFUL!");printf("shezhuangqiang\r\n");delay_ms(5000);TABCHISHE_Init();d=snake.d1;}if(snake.rand_x==snake.x1&&snake.rand_y==snake.y1) //判斷是否增加長度即碰到隨機點{i=1;if(snake.d2==0){snake.X1-=16;snake.X2-=16;}//在尾端增加一格elseif(snake.d2==1){snake.Y1+=16;snake.Y2+=16;}elseif(snake.d2==2){snake.X1+=16;snake.X2+=16;}elseif(snake.d2==3)snake.length++;LCD_ShowxNum(56,303,snake.length,3,12,0x80);}if(d==0) //默認方向為從左到右{snake.x1=snake.x1+snake.size;snake.x2=snake.x2+snake.size;LCD_Fill(snake.x1,snake.y1,snake.x2,snake.y2,BLUE); //新顯示的一格}elseif(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); //新顯示的一格}elseif(d==2)//方向為右到左{snake.x1=snake.x1-snake.size;snake.x2=snake.x2-snake.size;LCD_Fill(snake.x1,snake.y1,snake.x2,snake.y2,BLUE); //新顯示的一格}elseif(d==3)//方向為上到下{snake.y1=snake.y1+snake.size;snake.y2=snake.y2+snake.size;if(i==1){i=0;return1;}return0;}/********************************************************************名 稱:voidCM_Scan()*功 能:觸摸屏掃描函數(shù)******************************************
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務外包方的協(xié)議3篇
- 小學生文明交通承諾3篇
- 幼兒園語言教研組長工作總結(3篇)
- 房產(chǎn)獨家銷售授權獨家委托3篇
- 吊車施工環(huán)境保護合同3篇
- 農(nóng)村房屋使用權轉(zhuǎn)讓合同范本3篇
- 高考物理試題的命題特點及解題策略研究
- 新疆商貿(mào)物流集團國際商貿(mào)城招聘筆試真題2024
- 加工訂貨承包合同范本(4篇)
- 2024年南通市通州區(qū)教育體育系統(tǒng)招聘學前教育備案制教師考試真題
- 第18課《井岡翠竹》課件-2024-2025學年統(tǒng)編版語文七年級下冊
- 公立醫(yī)院成本核算指導手冊
- MOOC 中醫(yī)與辨證-暨南大學 中國大學慕課答案
- 年產(chǎn)10噸功能益生菌凍干粉的工廠設計改
- 智能健身鏡行業(yè)分析及案例
- 中聯(lián)HIS系統(tǒng)掛號收費 操 作 說 明
- HIT(肝素誘導的血小板減少癥)課件
- Mayo肘關節(jié)功能評分
- 螺栓加工工序卡(共7頁)
- 《焦慮癥基礎知識》PPT課件.ppt
- 基于鉆石模型的南通紡織產(chǎn)業(yè)競爭力分析
評論
0/150
提交評論