输入捕捉
- 格式:docx
- 大小:14.34 KB
- 文档页数:2
神奇宝贝指令神奇宝贝(Pokémon)是一款由Game Freak开发并由任天堂发行的游戏系列。
玩家在游戏中扮演训练师,通过捕捉、培养和对战神奇宝贝来完成不同的任务。
为了更好地控制和训练神奇宝贝,指令是玩家们必须要了解和掌握的重要部分。
本文将详细介绍一些常用的神奇宝贝指令。
1. 抓捕指令首先是抓捕指令,玩家可以使用该指令来捕捉野外出现的神奇宝贝。
指令的格式如下:捕捉(神奇宝贝名字)例如,如果你想要捕捉皮卡丘(Pikachu),你可以输入以下指令:捕捉皮卡丘系统将根据你的操作和神奇宝贝的属性来判断捕捉的成功率。
一旦捕捉成功,你就可以将该神奇宝贝添加到你的队伍中。
2. 战斗指令战斗是神奇宝贝游戏的核心部分之一。
当你与其他训练师或野外的神奇宝贝进行对战时,你需要使用一些战斗指令来控制你的神奇宝贝。
以下是一些常用的战斗指令:•攻击指令使用该指令来让你的神奇宝贝进行攻击。
指令的格式如下:攻击(技能名字)例如,如果你的神奇宝贝会使用十万伏特(Thunderbolt)技能,你可以输入以下指令:攻击十万伏特•防御指令使用该指令来让你的神奇宝贝进行防御,减少对方的伤害。
指令的格式如下:防御•道具指令使用该指令来使用背包中的道具。
指令的格式如下:使用(道具名字)例如,如果你想要使用复活草(Revive)道具来恢复你的神奇宝贝的生命值,你可以输入以下指令:使用复活草•逃跑指令使用该指令来尝试逃离战斗。
指令的格式如下:逃跑以上是一些基本的战斗指令,你还可以通过了解更多的技能和策略来提升你的游戏技巧。
3. 交换指令除了与其他训练师进行对战外,玩家还可以与其他玩家进行神奇宝贝的交换。
交换指令可以帮助你与其他玩家进行神奇宝贝的交换。
以下是一些常用的交换指令:•抛出指令使用该指令来抛出你想要交换的神奇宝贝。
指令的格式如下:抛出(神奇宝贝名字)例如,如果你想要交换你的皮卡丘,你可以输入以下指令:抛出皮卡丘•确认指令使用该指令来确认交换请求。
Chromium网页输入事件捕捉和手势检测过程分析连续的输入事件可能会产生一定的手势操作,例如滑动手势和捏合手势。
在Chromium中,网页的输入事件是在Browser进程中捕捉的。
Browser进程捕获输入事件之后,会进行手势操作检测。
检测出来的手势操作将会发送给Render进程处理,因为它们需要应用在网页之上。
与此同时,Browser进程也会将原始的输入事件发送给Render进程处理。
本文接下来就分析Browser进程处理网页输入事件的过程。
接下来我们将以Chromium自带的Content Shell APK为例,说明Chromium的Browser进程捕获网页输入事件以及检测手势操作的过程,如图1所示:从前面文章中一文可以知道,Content Shell APK将网页渲染在一个SurfaceView控件上。
这个SurfaceView又是嵌入在一个ContentView控件里面的。
当用户在网页上触发了一个输入事件时,例如触发一个Touch事件时,这个Touch事件就会被系统分发给上述ContentView 控件处理,表现为该ContentView控件的成员函数onTouchEvent被调用。
ContentView控件得到Touch事件之后,会将它传递到Chromium的C++层去处理。
Java层的每一个ContentView控件在C++层都对应一个ContentViewCore对象。
C++层的ContentViewCore对象得到Touch事件之后,就会通过一个Gesture Dector和一个Scale Gesture Detector进行滑动(Scroll)和捏合(Pinch)手势检测。
检测出来的滑动和捏合手势将会统一保存在一个Gestrue Packet中。
这个Gestrue Packet接下来会被一个Input Router封装在一个类型为InputMsg_HandleInputEvent的IPC消息中,发送给Render进程处理。
cad对象捕捉和动态输入实验报告实验目的:掌握CAD软件中的对象捕捉和动态输入功能,能够灵活运用这些功能进行绘图和设计。
实验材料:一台已安装CAD软件的电脑。
实验步骤:1. 打开CAD软件,在新建文件中进行绘图准备。
2. 对象捕捉功能的使用:a. 在CAD软件的工具栏中,找到对象捕捉选项(常用的有端点、中点、圆心等),点击选择需要的对象捕捉点。
b. 将鼠标移动到需要捕捉的对象附近,捕捉到目标点后,会出现捕捉捷径点,点击确定捕捉。
3. 动态输入功能的使用:a. 在CAD软件的工具栏中,找到动态输入选项,点击打开或关闭动态输入面板。
b. 动态输入面板会显示当前鼠标的坐标和绘图时的长度、角度等参数。
c. 通过动态输入功能,可以在绘制过程中直接输入准确的数值,而不需要手动去测量或估算。
4. 根据需要进行绘图和设计,通过对象捕捉和动态输入功能来辅助完成各种绘图操作。
5. 实验结束后保存绘图结果。
实验注意事项:- 在使用对象捕捉功能时,要仔细选择需要捕捉的对象,避免捕捉到错误的点。
- 在使用动态输入功能时,要注意输入的数值是否准确,避免输入错误导致绘图结果出错。
- 实验过程中注意保护好绘图文件,及时保存以防止数据丢失。
实验报告内容:1. 实验目的:简述实验的目的和意义。
2. 实验步骤:详细描述实验的步骤和操作过程。
3. 实验结果:列举实验中使用对象捕捉和动态输入功能所绘制的图形,并说明每个图形的用途和特点。
4. 实验总结:总结实验过程中遇到的问题和解决方法,对对象捕捉和动态输入功能的应用进行评价,并提出改进意见。
注意:根据实际情况修改实验步骤和实验报告内容,确保符合实际需求。
芯片资料第16章定时模块1、介绍:包含8个输入捕捉/输出对比通道和一个脉冲了累加器。
输入捕捉:用于探测一个事先选择好的边缘电平,并记低其时间。
输出比较:用于产生输出信号或定时器软件延时。
脉冲累加器:作为一个简单的时间计数器或一个门控时间累加器。
(在事件模式下,共用通道7)注意:当访问计数寄存器或输入捕捉/输出对比寄存器时要注意进行一个字读取(一个时钟周期内),不然高低位不匹配!!!2、特征:(1)、8路输入捕捉/输出比较通道(2)、时钟分频器(3)、16位计数器(4)、16位脉冲累加器3、各种模式下TIM模块的活动P4604、寄存器P464(1)、TIOS:Timer Input Capture/Output Compare Select对应通道的输入捕捉/输出比较选择位0-输入捕捉,1输出比较(2)、CFORC:Timer Compare Force Register (强制输出比较)读取总为0(因为1是瞬态的)没认真看将寄存器中的对应位置位会强迫输出比较X通道立即生效,效果与一个成功的比较相同,当中断标志位不置位(TCx)。
注意:通道7的事件计数,当TTOV[7]被置位时,产生溢出,或者通道7上一个成功的输出比较,上两种情况,均优先于其它通道的输出比较。
如果强制输出比较与一个成功的输出比较同时产生,强制输出比较优先,但不将中断位置位。
(3)、OC7M:Output Compare 7 Mask Register (输出比较屏蔽寄存器)不明白…(4)、OC7D:Output Compare 7 Data Register不明白…(5)、TCNT:定时器计数寄存器分TCNTH、TCNTL 只读这个16位计数器为一个增加计数器(读取需要在一个时钟周期内完成!!!)(6)、TSCR1:Timer System Control Register 1定时器系统控制寄存器1。
TEN:时钟允许位。
1使能TSW AI、TSFRZ:等待、冻结模式下时钟是否使能;TFFCA:快速清除标志位(不建议设置)PRNT:定时器分频!!!(此位只能写入一次)(7)、TTOV:Timer Toggle On Overflow Register 1定时器溢出触发寄存器,TOVx置一时,定时器溢出时触发输出比较,这个功能只能在输出比较模式下可用,当置位,此功能优先于强制输出比较,但比通道7的事件功能低级。
stm32PWM输入捕获tm32定时器pwm输入捕获输入捕捉的功能是记录下要捕捉的边沿出现的时刻,如果你仅仅捕捉下降沿,那么两次捕捉的差表示输入信号的周期,即两次下降沿之间的时间。
如果要测量低电平的宽度,你应该在捕捉到下降沿的中断处理中把捕捉边沿改变为上升沿,然后把两次捕捉的数值相减就得到了需要测量的低电平宽度。
如果要的测量低电平太窄,中断中来不及改变捕捉方向时,或不想在中断中改变捕捉方向,则需要使用PWM输入模式,或使用两个TIM某通道,一个通道捕捉下降沿,另一个通道捕捉上升沿,然后对两次捕捉的数值相减。
PWM输入模式也是需要用到两个通道。
使用两个通道时,最好使用通道1和通道2,或通道3和通道4,这样上述功能只需要使用一个I/O管脚,详细请看STM32技术参考手册中的TIM某框图。
//0-----------------------一、概念理解PWM输入捕获模式是输入捕获模式的特例,自己理解如下1.每个定时器有四个输入捕获通道IC1、IC2、IC3、IC4。
且IC1IC2一组,IC3IC4一组。
并且可是设置管脚和寄存器的对应关系。
2.同一个TI某输入映射了两个IC某信号。
3.这两个IC某信号分别在相反的极性边沿有效。
4.两个边沿信号中的一个被选为触发信号,并且从模式控制器被设置成复位模式。
5.当触发信号来临时,被设置成触发输入信号的捕获寄存器,捕获“一个PWM周期(即连续的两个上升沿或下降沿)”,它等于包含TIM时钟周期的个数(即捕获寄存器中捕获的为TIM的计数个数n)。
6.同样另一个捕获通道捕获触发信号和下一个相反极性的边沿信号的计数个数m,即(即高电平的周期或低电平的周期)7.由此可以计算出PWM的时钟周期和占空比了frequency=f(TIM时钟频率)/n。
dutycycle=(高电平计数个数/n),若m为高电平计数个数,则dutycycle=m/n若m为低电平计数个数,则dutycycle=(n-m)/n 注:因为计数器为16位,所以一个周期最多计数65535个,所以测得的最小频率=TIM时钟频率/65535。
利用A VR(M8)的输入捕获(ICP)对万能红外线遥控器进行解码本实例程序为自创,若转载请注明出处,谢谢!小弟不久前买了一个科朗公司出版的万能电视遥控器RM-2008,用作对设备的红外遥控,折腾了几天,今天终于弄清楚了如何对该遥控器进行解码,很开心,所以把成果与各位大虾分享,有什么错误的地方请指正。
万能遥控器在使用前一般要进行设置,针对RM-2008这款万能遥控,设置方法如下:先按住“设置”键不放,再按下“电源”(“开/关”)键,工作指示灯亮起,然后释放两键,在此时进入代码输入状态,依次键入0 0 0 指示灯熄灭,设置成功!说明一下:0 0 0 编码是日立公司初期的红外编码方式,也就是网上到处都通用的红外编码方式(如下图),另外本程序只能对此编码进行解码数据头的时间:Th=9+4.5=13.5ms数据“0”的时间:T0=0.565+0.56=1.125ms数据“1”的时间:T1=1.685+0.56=2.245ms本程序通过使用输入捕获功能(ICP)捕捉红外信号的高电平脉宽,达到解码的目的;如果捕获到的脉宽是4.5ms 则表示此信号为同步码,如果捕获到的脉宽是1.685ms 的话则表示“1”否则表示“0”测试电路如下:使用DNW 串口调试软件时的效果/////////////////////////////////只有一个文件main.c/////////////////////////////////// #include <avr/io.h>#include <avr/signal.h>#include <avr/interrupt.h>#include <avr/wdt.h>#include <util/delay.h>#include <stdio.h>/*----------------------遥控操作值--------------------*/// key code (hex)#define Key_1 0x01#define Key_2 0x02#define Key_3 0x03#define Key_4 0x04#define Key_5 0x05#define Key_6 0x06#define Key_7 0x07#define Key_8 0x08#define Key_9 0x09#define Key_0 0x00#define Menu 0x5c // 菜单#define Menu_up 0x56 // 菜单上#define Menu_down 0x57 // 菜单下#define Menu_left 0x5f // 菜单左#define Menu_right 0x5b // 菜单右#define Menu_ok 0x16 // 菜单确认#define Channel_up 0x1b // 频道+ #define Channel_down 0x1f // 频道- #define Sound_up 0x1e // 音量+ #define Sound_down 0x1a // 音量- #define Open_Close 0x12 // 开/关#define Mute 0x10 // 静音#define Pic_in_pic 0x51 //画中画#define Standard 0x58 // 制式#define Return 0x52 // 返回#define Times 0x0b // 倍数#define Screen 0x16 // 屏幕#define Audio 0x1d // 伴音#define NICAM 0x13 // 丽音#define TV_Vedio 0x0f // 电视/视频#define Sleep 0x0e //睡眠/*----------------------常用参数定义-------------------*/ #define P0 0#define P1 1#define P2 2#define P3 3#define P4 4#define P5 5#define P6 6#define P7 7#define FREQ 8 //定义单片机工作频率为8M#define uint unsigned int#define uchar unsigned char#define Start_T1 TCCR1B|=_BV(CS11);TCNT1=0//复位预计分频器并开启定时器T1#define Stop_T1 TCCR1B&=~_BV(CS11) //关闭定时器T1/*-----------------IR信号指示灯操作函数---------*/#define EN_IR_LED DDRB|=_BV(P1)#define CLR_IR_LED PORTB&=~_BV(P1)#define SET_IR_LED PORTB|=_BV(P1)/*----------------------某些端口操作-------------------*/volatile unsigned char i,j,k;volatile unsigned long IRcode; //定义一个长度为4字节的无符号long 类型变量来存储代码volatile unsigned char *IRcodePointer ; //定义一个无符号的单字节指针变量,//用此地址变量来分别读取IRCode的//4个字节其中操作码为IRcodePointer[2]//用户码为IRcodePointer[0]volatile unsigned char IRReceiveEffective=0; //IR信号接收有效当程序响应接收以后请马上清零这样才会继续接收下一IR码volatile unsigned char IRReceiveCurrentBit=0; //IR信号当前接收位0时表示第0位即同步码(4.5ms高电平)volatile unsigned int Pulse_length=0; //捕获的脉冲宽度volatile unsigned char ICP_Parity=0; //捕获中断奇偶次计数1时为偶次并在此时判断脉宽volatile unsigned char Received_Key_Temp; //红外接收操作键缓存const unsigned char String[]={"You Have Press Key : "};/*----------------------串口定义-------------------*/unsigned char SetPrintfConvertMode=0; //使用printf作其他转换,并非输出到UARTvoid Uart_Init(void);int System_putchar(char c, FILE *stream);int System_getchar(FILE *stream);FILE mystd = FDEV_SETUP_STREAM(System_putchar,System_getchar,_FDEV_SETUP_RW);/*----------------------常用函数定义------------------*/void delay_nms(unsigned int ms) //N ms延时函数{for(i=0;i<ms;i++)_delay_loop_2(FREQ*250);}/*----------------------系统初始化函数定义------------------*/void IO_INIT(void){PORTB|=_BV(P0); //设置ICP引脚内部上拉经过试验验证,上拉会提高红外接收灵敏度}ISR(TIMER1_COMPA_vect){IRReceiveCurrentBit=0;//重置IR接收位为第0位,为下次接收做准备TIMSK&=~_BV(OCIE1A); //关闭溢出中断TCCR1B|=_BV(ICES1); //设置输入捕获上升沿有效ICP_Parity=0;Stop_T1;CLR_IR_LED;}ISR(TIMER1_CAPT_vect){if(!IRReceiveEffective){if(ICP_Parity==0){ICP_Parity++;TIMSK|=_BV(OCIE1A);TCCR1B&=~_BV(ICES1); //设置输入捕获下降沿有效Start_T1 ;}else{Stop_T1;ICP_Parity=0;TCCR1B|=_BV(ICES1);//设置输入捕获上升沿有效Pulse_length=ICR1;if(IRReceiveCurrentBit==0){if(Pulse_length>=3500&&Pulse_length<5500)// 如果是引导码(4.5ms) 进入下一个bit的读取IRReceiveCurrentBit++;}else if(IRReceiveCurrentBit<33) //接收32位数据{IRcode>>=1;if(Pulse_length<1900&&Pulse_length>1400) //判断是否为1 ( 1.685 ms) IRcode|=0x80000000;IRReceiveCurrentBit++;if(IRReceiveCurrentBit==33){IRReceiveCurrentBit=0; //重置IR接收位为第0位,为下次接收做准备if(IRcodePointer[0]==(unsignedchar)(~IRcodePointer[1])&&IRcodePointer[2]==(unsignedchar)(~IRcodePointer[3])){SET_IR_LED; //开启IR信号指示灯IRReceiveEffective=1; //数据有效}delay_nms(5); //因为32位数据后面还有一个信号上跳变,所以要适当延时,延时0.65ms以上即可}}}}}/////////////////////////////////////////////////////////////////int main(void){wdt_disable();IO_INIT();Uart_Init();TCCR1B=_BV(WGM12)|_BV(CS11);//采用8分频这样的话TCNT1的计数时基为1usOCR1A=8000; //TCNT1 计数上限设置IR接收超时这里设置8msTIMSK|=_BV(TICIE1);//开启输入捕获中断TCCR1B|=_BV(ICES1);//输入捕获上升沿有效EN_IR_LED; //IR信号指示灯允许CLR_IR_LED; //关闭IR信号指示灯IRcodePointer=&IRcode;sei();while(1){if(IRReceiveEffective){Received_Key_Temp=IRcodePointer[2];//把接收到的操作键放入缓存IRReceiveEffective=0; //允许下一次接收switch(Received_Key_Temp){case Key_1 : printf("\n%sKey_1",String);break;case Key_2 : printf("\n%sKey_2",String);break;case Key_3 : printf("\n%sKey_3",String);break;case Key_4 : printf("\n%sKey_4",String);break;case Key_5 : printf("\n%sKey_5",String);break;case Key_6 : printf("\n%sKey_6",String);break;case Key_7 : printf("\n%sKey_7",String);break;case Key_8 : printf("\n%sKey_8",String);break;case Key_9 : printf("\n%sKey_9",String);break;case Key_0 : printf("\n%sKey_0",String);break;case Menu : printf("\n%sMenu",String);break;case Menu_up : printf("\n%sMenu_up",String);break;case Menu_down : printf("\n%sMenu_down",String);break;case Menu_left : printf("\n%sMenu_left",String);break;case Menu_right : printf("\n%sMenu_right",String);break;case Menu_ok : printf("\n%sMenu_ok",String);break;case Channel_up : printf("\n%sChannel+",String);break;case Channel_down : printf("\n%sChannel-",String);break;case Sound_up : printf("\n%sSound+",String);break;case Sound_down : printf("\n%sSound-",String);break;case Open_Close : printf("\n%sOpen_Close",String);break;case Mute : printf("\n%sMute",String);break;case Standard : printf("\n%sStandard",String);break;case Return : printf("\n%sReturn",String);break;case Times : printf("\n%sTimes",String);break;//case Screen : printf("\n%sScreen",String);break;//Screen 与menu_ok 值相同case Audio : printf("\n%sAudio",String);break;case NICAM : printf("\n%sNICAM" ,String);break;case TV_Vedio : printf("\n%sTV_Vedio",String);break;case Sleep : printf("\n%sSleep",String);break;case Pic_in_pic : printf("\n%sPic_in_pic",String);break;default:printf("\n%sOther Key 0x%x",String,Received_Key_Temp);break;}CLR_IR_LED; //处理完数据以后关闭IR信号指示灯}}}/*----------------------串口函数实体------------------*/void Uart_Init(void){UCSRB=_BV(RXEN)|_BV(TXEN);UBRRL=25; //8M 19200stdout=&mystd;stdin=&mystd;}int System_putchar(char c, FILE *stream){if(SetPrintfConvertMode==1){}else{if (c == '\n')System_putchar('\r', stream);loop_until_bit_is_set(UCSRA, UDRE);UDR = c;}return 0;}int System_getchar( FILE *stream){loop_until_bit_is_set(UCSRA,RXC);return UDR;}/////////////////////////////////程序结束////////////////////////////。