嵌入式实验报告-宗子轩_第1页
嵌入式实验报告-宗子轩_第2页
嵌入式实验报告-宗子轩_第3页
嵌入式实验报告-宗子轩_第4页
嵌入式实验报告-宗子轩_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE1院系:计算机科学学院专业:自动化__年级:2008级课程名称:嵌入式技术与应用指导教师:张志俊组号:组员:覃静2011年11月1日实验题目:USB接口实验一、设计要求利用EduKit-M3实验平台的五个按键实现标准的USB接口游戏杆功能。二、硬件电路实现在EduKit-M3实验平台上已有一个简易的游戏杆,其SELECTION、DOWN、RIGHT、LEFT和UP键分别与处理器的PD12、PD14、PE1、PE0、PD8引脚相连;处理器的USB接口已经转换电路连接到CN1连接器。三、软件程序设计该程序的结构比较复杂,除了库文件以及USB函数库文件之外,还包含8个源文件,其中STM32F10x.s是启动代码。下面分别为其他7个函数:1、main.c——该函数中主要包含2个函数,其中main函数初始化系统以及USB接口,之后不断查询游戏杆是否有动作,如果有动作则根据动作向USB缓冲器发出相关数据;Delay函数用于延迟。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——该文件中没有任何函数,只是包含一些定义USB设备的描述符常数,由于游戏杆是标准USB设备,因此比较容易得到相关的参数。若要开发非标准的USB设备,则还需要开发PC上运行的非标准设备的驱动程序。3、stm32f10x_it.c——该文件中包含USB中断服务程序,由于USB中断有很多情况,这里的中断服务程序只是调用usb_Istr.c文件中的USB_Istr函数,由USB_Istr函数再做轮询处理。4、usb_Istr.c——该文件中只有一个函数,即USB中断的USB_Istr函数,该函数对各类引起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);}四、运行过程(1) 使用KeiluVision3,通过一根USB电缆连接EduKit-M3实验平台的CN1;(2) 打开实验例程目录USB_TEST子目录下的USB.Uv2例程,编译链接工程;(3) 点击MDK的Debug菜单,点击Start/StopDebugSession;或者将程序烧写到EduKit-M3实验平台上,重启EduKit-M3实验平台;(4) 分别使用EduKit-M3实验平台上的Joystick的5个键,观察PC机屏幕的鼠标,如果鼠标跟随Joystick的按键动作而移动,则表明程序运行成功。注意:运行程序前请确保跳线JP1的2-3连接。五、实验心得对嵌入式利用EduKit-M3实验平台的五个按键实现标准的USB接口游戏杆功能。实验题目:TFT-LCD实验(扩展LCD显示)一、设计要求1、在液晶屏幕上显示自己的名字;2、在液晶屏幕上显示直线;3、在液晶屏幕上显示圆4、将16*16点阵改为24*24的,并在液晶屏幕上显示。二、硬件电路设计图10-1-2LCD驱动电路连接图三、实验原理液晶屏(LCD:LiquidCrystalDisplay)主要用于显示文本及图形信息。液晶显示屏具有轻薄、体积小、低耗电量、无辐射危险、平面直角显示以及影像稳定不闪烁等特点,因此在许多电子应用系统中,常使用液晶屏作为人机界面。液晶显示屏按显示原理分为STN和TFT两种:STN(SuperTwistedNematic,超扭曲向列)液晶屏STN液晶显示器与液晶材料、光线的干涉现象有关,因此显示的色调以淡绿色与橘色为主。STN液晶显示器中,使用X、Y轴交叉的单纯电极驱动方式,即X、Y轴由垂直与水平方向的驱动电极构成,水平方向驱动电压控制显示部分为亮或暗,垂直方向的电极则负责驱动液晶分子的显示。STN液晶显示屏加上彩色滤光片,并将单色显示矩阵中的每一像素分成三个子像素,分别通过彩色滤光片显示红、绿、蓝三原色,也可以显示出色彩。单色液晶屏及灰度液晶屏都是STN液晶屏。TFT(ThinFilmTransistor,薄膜晶体管)彩色液晶屏随着液晶显示技术的不断发展和进步,TFT液晶显示屏被广泛用于制作成电脑中的液晶显示设备。TFT液晶显示屏既可在笔记本电脑上应用(现在大多数笔记本电脑都使用TFT显示屏),也常用于主流台式显示器。分65536色及26万色,1600万色三种,其显示效果非常出色。TFT的显示采用“背透式”照射方式——假想的光源路径不是像STN液晶那样从上至下,而是从下向上。这样的作法是在液晶的背部设置特殊光管,光源照射时通过下偏光板向上透出。由于上下夹层的电极改成FET电极和共通电极,在FET电极导通时,液晶分子的表现也会发生改变,可以通过遮光和透光来达到显示的目的,响应时间大大提高到80ms左右。本系统采用的液晶屏为SPI接口的TFT屏幕,像素为128×160。图10-1-1TFT液晶屏外形四、软件程序设计1、显示自己的名字intmain(void){#ifdefDEBUGdebug();#endifDemo_Init();LCD_Display_Color(0x0000);//RADLCD_Display_Color(0xffff);Lcd_DspHz16(6,0,"覃静");while(1){}}2、画线修改画线的函数LCD_DrawLine,之后再main函数中直接调用即可。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函数中调用画圆函数LCD_DrawCircle,可随意输入圆的横纵坐标和半径值。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、点阵修改(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)、自行创立的24*24的‘覃’字的点阵华文新魏字库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函数中的调用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等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论