版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PAGE1院系:計(jì)算機(jī)科學(xué)學(xué)院專業(yè):自動(dòng)化__年級(jí):2008級(jí)課程名稱:嵌入式技術(shù)與應(yīng)用指導(dǎo)教師:張志俊組號(hào):組員:覃靜2011年11月1日實(shí)驗(yàn)題目:USB接口實(shí)驗(yàn)一、設(shè)計(jì)要求利用EduKit-M3實(shí)驗(yàn)平臺(tái)的五個(gè)按鍵實(shí)現(xiàn)標(biāo)準(zhǔn)的USB接口游戲桿功能。二、硬件電路實(shí)現(xiàn)在EduKit-M3實(shí)驗(yàn)平臺(tái)上已有一個(gè)簡易的游戲桿,其SELECTION、DOWN、RIGHT、LEFT和UP鍵分別與處理器的PD12、PD14、PE1、PE0、PD8引腳相連;處理器的USB接口已經(jīng)轉(zhuǎn)換電路連接到CN1連接器。三、軟件程序設(shè)計(jì)該程序的結(jié)構(gòu)比較復(fù)雜,除了庫文件以及USB函數(shù)庫文件之外,還包含8個(gè)源文件,其中STM32F10x.s是啟動(dòng)代碼。下面分別為其他7個(gè)函數(shù):1、main.c——該函數(shù)中主要包含2個(gè)函數(shù),其中main函數(shù)初始化系統(tǒng)以及USB接口,之后不斷查詢游戲桿是否有動(dòng)作,如果有動(dòng)作則根據(jù)動(dòng)作向USB緩沖器發(fā)出相關(guān)數(shù)據(jù);Delay函數(shù)用于延遲。intmain(void){#ifdefDEBUGdebug();#endifSet_System();USB_Interrupts_Config();Set_USBClock();USB_Init();while(1){ if(JoyState()!=0){Joystick_Send(JoyState());}}}voidDelay(vu32nCount){for(;nCount!=0;nCount--);}#ifdefDEBUG2、usb_desc.c——該文件中沒有任何函數(shù),只是包含一些定義USB設(shè)備的描述符常數(shù),由于游戲桿是標(biāo)準(zhǔn)USB設(shè)備,因此比較容易得到相關(guān)的參數(shù)。若要開發(fā)非標(biāo)準(zhǔn)的USB設(shè)備,則還需要開發(fā)PC上運(yùn)行的非標(biāo)準(zhǔn)設(shè)備的驅(qū)動(dòng)程序。3、stm32f10x_it.c——該文件中包含USB中斷服務(wù)程序,由于USB中斷有很多情況,這里的中斷服務(wù)程序只是調(diào)用usb_Istr.c文件中的USB_Istr函數(shù),由USB_Istr函數(shù)再做輪詢處理。4、usb_Istr.c——該文件中只有一個(gè)函數(shù),即USB中斷的USB_Istr函數(shù),該函數(shù)對(duì)各類引起USB中斷的事件作輪詢處理。voidUSB_Istr(void){wIstr=_GetISTR();#if(IMR_MSK&ISTR_RESET)if(wIstr&ISTR_RESET&wInterrupt_Mask)/*Right_button+Left_button*/GPIO_InitStructure.GPIO_Pin=JOY_LEFT_BUTTON|JOY_RIGHT_BUTTON;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOC,&GPIO_InitStructure);}voidSet_USBClock(void){/*SelectUSBCLKsource*/RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);/*EnableUSBclock*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB,ENABLE);}voidUSB_Interrupts_Config(void){NVIC_InitTypeDefNVIC_InitStructure;#ifdefVECT_TAB_RAM/*SettheVectorTablebaselocationat0x20000000*/NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);#else/*VECT_TAB_FLASH*//*SettheVectorTablebaselocationat0x08000000*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);#endifNVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN_RX0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}voidUSB_Cable_Config(FunctionalStateNewState){if(NewState!=DISABLE){GPIO_ResetBits(GPIOD,GPIO_Pin_9);}else{GPIO_SetBits(GPIOD,GPIO_Pin_9);}}u8JoyState(void){/*"right"keyispressed*/if(!GPIO_ReadInputDataBit(GPIOE,JOY_RIGHT)){returnRIGHT;}/*"left"keyispressed*/if(!GPIO_ReadInputDataBit(GPIOE,JOY_LEFT)){returnLEFT;}/*"up"keyispressed*/if(!GPIO_ReadInputDataBit(GPIOD,JOY_UP)){returnUP;}/*"down"keyispressed*/if(!GPIO_ReadInputDataBit(GPIOD,JOY_DOWN)){returnDOWN;}/*"sel"keyispressed*/if(!GPIO_ReadInputDataBit(GPIOD,JOY_SEL)){returnSEL;}if(!GPIO_ReadInputDataBit(GPIOC,JOY_LEFT_BUTTON)){returnLEFT_BUTTON;}if(!GPIO_ReadInputDataBit(GPIOC,JOY_RIGHT_BUTTON)){returnRIGHT_BUTTON;}/*Nokeyispressed*/else{return0;}}voidJoystick_Send(u8Keys){u8Mouse_Buffer[4]={0,0,0,0};s8X=0,Y=0,BUTTON=0;switch(Keys){caseLEFT:X+=CURSOR_STEP;break;caseRIGHT:X-=CURSOR_STEP;break;caseUP:Y-=CURSOR_STEP;break;caseDOWN:Y+=CURSOR_STEP;break;caseSEL:BUTTON=BUTTON|0x01;break;caseLEFT_BUTTON:BUTTON=BUTTON|0x01;break;caseRIGHT_BUTTON:BUTTON=BUTTON|0x02;break;default:return;}/*preparebuffertosend*/Mouse_Buffer[0]=BUTTON;Mouse_Buffer[1]=X;Mouse_Buffer[2]=Y;/*copymousepositioninfoinENDP1TxPacketMemoryArea*/UserToPMABufferCopy(Mouse_Buffer,GetEPTxAddr(ENDP1),4);if(Mouse_Buffer[0]!=0){Mouse_Buffer[0]=0;UserToPMABufferCopy(Mouse_Buffer,GetEPTxAddr(ENDP1),4);}/*enableendpointfortransmission*/SetEPTxValid(ENDP1);}四、運(yùn)行過程(1) 使用KeiluVision3,通過一根USB電纜連接EduKit-M3實(shí)驗(yàn)平臺(tái)的CN1;(2) 打開實(shí)驗(yàn)例程目錄USB_TEST子目錄下的USB.Uv2例程,編譯鏈接工程;(3) 點(diǎn)擊MDK的Debug菜單,點(diǎn)擊Start/StopDebugSession;或者將程序燒寫到EduKit-M3實(shí)驗(yàn)平臺(tái)上,重啟EduKit-M3實(shí)驗(yàn)平臺(tái);(4) 分別使用EduKit-M3實(shí)驗(yàn)平臺(tái)上的Joystick的5個(gè)鍵,觀察PC機(jī)屏幕的鼠標(biāo),如果鼠標(biāo)跟隨Joystick的按鍵動(dòng)作而移動(dòng),則表明程序運(yùn)行成功。注意:運(yùn)行程序前請(qǐng)確保跳線JP1的2-3連接。五、實(shí)驗(yàn)心得對(duì)嵌入式利用EduKit-M3實(shí)驗(yàn)平臺(tái)的五個(gè)按鍵實(shí)現(xiàn)標(biāo)準(zhǔn)的USB接口游戲桿功能。實(shí)驗(yàn)題目:TFT-LCD實(shí)驗(yàn)(擴(kuò)展LCD顯示)一、設(shè)計(jì)要求1、在液晶屏幕上顯示自己的名字;2、在液晶屏幕上顯示直線;3、在液晶屏幕上顯示圓4、將16*16點(diǎn)陣改為24*24的,并在液晶屏幕上顯示。二、硬件電路設(shè)計(jì)圖10-1-2LCD驅(qū)動(dòng)電路連接圖三、實(shí)驗(yàn)原理液晶屏(LCD:LiquidCrystalDisplay)主要用于顯示文本及圖形信息。液晶顯示屏具有輕薄、體積小、低耗電量、無輻射危險(xiǎn)、平面直角顯示以及影像穩(wěn)定不閃爍等特點(diǎn),因此在許多電子應(yīng)用系統(tǒng)中,常使用液晶屏作為人機(jī)界面。液晶顯示屏按顯示原理分為STN和TFT兩種:STN(SuperTwistedNematic,超扭曲向列)液晶屏STN液晶顯示器與液晶材料、光線的干涉現(xiàn)象有關(guān),因此顯示的色調(diào)以淡綠色與橘色為主。STN液晶顯示器中,使用X、Y軸交叉的單純電極驅(qū)動(dòng)方式,即X、Y軸由垂直與水平方向的驅(qū)動(dòng)電極構(gòu)成,水平方向驅(qū)動(dòng)電壓控制顯示部分為亮或暗,垂直方向的電極則負(fù)責(zé)驅(qū)動(dòng)液晶分子的顯示。STN液晶顯示屏加上彩色濾光片,并將單色顯示矩陣中的每一像素分成三個(gè)子像素,分別通過彩色濾光片顯示紅、綠、藍(lán)三原色,也可以顯示出色彩。單色液晶屏及灰度液晶屏都是STN液晶屏。TFT(ThinFilmTransistor,薄膜晶體管)彩色液晶屏隨著液晶顯示技術(shù)的不斷發(fā)展和進(jìn)步,TFT液晶顯示屏被廣泛用于制作成電腦中的液晶顯示設(shè)備。TFT液晶顯示屏既可在筆記本電腦上應(yīng)用(現(xiàn)在大多數(shù)筆記本電腦都使用TFT顯示屏),也常用于主流臺(tái)式顯示器。分65536色及26萬色,1600萬色三種,其顯示效果非常出色。TFT的顯示采用“背透式”照射方式——假想的光源路徑不是像STN液晶那樣從上至下,而是從下向上。這樣的作法是在液晶的背部設(shè)置特殊光管,光源照射時(shí)通過下偏光板向上透出。由于上下夾層的電極改成FET電極和共通電極,在FET電極導(dǎo)通時(shí),液晶分子的表現(xiàn)也會(huì)發(fā)生改變,可以通過遮光和透光來達(dá)到顯示的目的,響應(yīng)時(shí)間大大提高到80ms左右。本系統(tǒng)采用的液晶屏為SPI接口的TFT屏幕,像素為128×160。圖10-1-1TFT液晶屏外形四、軟件程序設(shè)計(jì)1、顯示自己的名字intmain(void){#ifdefDEBUGdebug();#endifDemo_Init();LCD_Display_Color(0x0000);//RADLCD_Display_Color(0xffff);Lcd_DspHz16(6,0,"覃靜");while(1){}}2、畫線修改畫線的函數(shù)LCD_DrawLine,之后再main函數(shù)中直接調(diào)用即可。voidLCD_DrawLine(u8Xpos,u16Ypos,u16Length,u8Direction){u32i=0;//LCD_Display_Color(BackColor);if(Direction==Horizontal){for(i=0;i<Length;i++){LCD_DisplayPoint(Xpos+i,Ypos,TextColor);}}else{for(i=0;i<Length;i++){LCD_DisplayPoint(Xpos+i,Ypos+(i*160/250),TextColor);}}}3、畫圓在main函數(shù)中調(diào)用畫圓函數(shù)LCD_DrawCircle,可隨意輸入圓的橫縱坐標(biāo)和半徑值。voidLCD_DrawCircle(u8Xpos,u8Ypos,u8Radius){s32D;/*DecisionVariable*/u32CurX;/*CurrentXValue*/u32CurY;/*CurrentYValue*/D=3-(Radius<<1);CurX=0;CurY=Radius;//LCD_Display_Color(BackColor);while(CurX<=CurY){LCD_DisplayPoint(Xpos+CurX,Ypos+CurY,TextColor);LCD_DisplayPoint(Xpos+CurX,Ypos-CurY,TextColor);LCD_DisplayPoint(Xpos-CurX,Ypos+CurY,TextColor);LCD_DisplayPoint(Xpos-CurX,Ypos-CurY,TextColor);LCD_DisplayPoint(Xpos+CurY,Ypos+CurX,TextColor);LCD_DisplayPoint(Xpos+CurY,Ypos-CurX,TextColor);LCD_DisplayPoint(Xpos-CurY,Ypos+CurX,TextColor);LCD_DisplayPoint(Xpos-CurY,Ypos-CurX,TextColor);if(D<0){D+=(CurX<<2)+6;}else{D+=((CurX-CurY)<<2)+10;CurY--;}CurX++;}}4、點(diǎn)陣修改(1)、在LCD上顯示一串24×24的文本voidLcd_DspHz24(u8Line,u8Column,u8*Pu8FontStr){u32i,j,k,x,y,xx,iOffStr;u8qm,wm,x0,y0;u32ulOffset;u8hzbuf[72],u8Mode;x0=Column*24;//xcoordinateofstartpointy0=Line*24;//ycoordinateofstartpointfor(iOffStr=0;iOffStr<strlen((constchar*)Pu8FontStr);){x0=iOffStr*8;if(((u8)(*(Pu8FontStr+iOffStr)))<161){if((u8)(*(Pu8FontStr+iOffStr))>127){break;}LCD_DisplayChar(y0,x0,*(Pu8FontStr+iOffStr));iOffStr++;//asciionlyoccupyonebyte}else{//getthezoneandtheposition./* qm=*(Pu8FontStr+iOffStr)-160;//161;wm=*(Pu8FontStr+iOffStr+1)-160;ulOffset=(u32)((qm-1)*94+wm-1)*32;//counttheoffsetinspiflash.thenreadone32Bytefromspiflash,putinfointohzbufSPI_FLASH_BufferRead(hzbuf,HZAdsInSpiFlash+ulOffset,HZbuffsize); *///diaplayalltheinfo.for(i=0;i<24;i++){for(j=0;j<3;j++){//u8Mode=hzbuf[i*3+j];//getthefontmodeu8Mode=g_ucAscii24x24[i*3+j];for(k=0;k<8;k++){if(u8Mode&(0x80>>k)){LCD_DisplayPoint(x0+j*8+k,y0+i,TextColor);}}}}iOffStr+=3;}}}(2)、自行創(chuàng)立的24*24的‘覃’字的點(diǎn)陣華文新魏字庫constuc8g_ucAscii24x24[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xe0,0x00,0xf8,0xe0,0x07,0x84,0x60,0x06,0x3c,0x60,0x06,0x78,0x60,0x06,0x06,0x60,0x06,0x3f,0x60,0x07,0xfc,0x20,0x05,0x29,0x20,0x04,0x69,0x20,0x04,0xc9,0x20,0x07,0x87,0xa0,0x04,0x00,0x20,0x07,0xff,0x20,0x07,0xc0,0x20,0x04,0x01,0xe0,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};(3)、main函數(shù)中的調(diào)用Lcd_DspHz16(7,0,"覃");intmain(void){#ifdefDEBUGdebug();#endif/*InitializetheDemo*/Demo_Init();/*SPI_LCD_DrawPict(0X10000,0,0,0x7f,0x9f);Delay(100);SPI_LCD_DrawPict(0X20000,0,0,0x7f,0x9f);Delay(100);*/LCD_Display_Color(0x0000);//RADLCD_Display_Color(0xffff);/*Lcd_DspH
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度合作社農(nóng)村旅游合作合同范本3篇
- 2025年度生豬銷售與市場拓展服務(wù)合同3篇
- 家庭教育在學(xué)前兒童語言發(fā)展中的作用
- 2025年度食品包裝袋定制與品牌推廣合同3篇
- 小學(xué)數(shù)學(xué)中的科技元素與教育內(nèi)容整合
- 2024年適用股權(quán)轉(zhuǎn)讓三方具體合同版
- 二零二五年度寶雞購房合同售后服務(wù)及保修范本3篇
- 2025年度辦公耗材一站式采購與供應(yīng)鏈優(yōu)化合同3篇
- 小學(xué)體育課的情境教學(xué)法研究
- 2024年鈦電極項(xiàng)目可行性研究報(bào)告
- 數(shù)學(xué)-2025年高考綜合改革適應(yīng)性演練(八省聯(lián)考)
- 市場營銷試題(含參考答案)
- 2024年醫(yī)療器械經(jīng)營質(zhì)量管理規(guī)范培訓(xùn)課件
- 景區(qū)旅游安全風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2023年新高考(新課標(biāo))全國2卷數(shù)學(xué)試題真題(含答案解析)
- 事業(yè)單位工作人員獎(jiǎng)勵(lì)審批表
- DL-T 1476-2023 電力安全工器具預(yù)防性試驗(yàn)規(guī)程
- 眼科護(hù)理的國內(nèi)外發(fā)展動(dòng)態(tài)和趨勢
- 雞場養(yǎng)殖情況記錄登記表
- 高壓配電柜系列產(chǎn)品出廠檢驗(yàn)規(guī)范
- 節(jié)流孔板孔徑計(jì)算
評(píng)論
0/150
提交評(píng)論