33dfa24918ea360d
获得 6 次赞
帮助过5人
我在要用到5个独立按键所以就想着用5个外部中断,但是在实际操作中,我发现外部中断不能很好的触发和运行,有时按下按键不能触发,需要多按几次,但是有时候按一下触发好几次,一开始我以为是按键抖动问题,但是加了延时和消抖还是没有什么效果,还有一个就是我触发中断后,等一会它自己就又触发一次,很郁闷。这都是什么情况引起的。我现在程序是用的UCOSII系统,中断也是加在这里面的。我还是按照没有系统写的中断服务程序。void EXTIX_Init(void){ EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIOENABLE);//外部中断,需要使能AFIO时钟 KEY_Init();//初始化按键对应io模式 //GPIOA.0 中断线以及中断初始化配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOAGPIO_PinSource0); EXTI_InitStructure.EXTI_Line=EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 //GPIOA.1 中断线以及中断初始化配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOAGPIO_PinSource1); EXTI_InitStructure.EXTI_Line=EXTI_Line1; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 //GPIOA.4 中断线以及中断初始化配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOAGPIO_PinSource4); EXTI_InitStructure.EXTI_Line=EXTI_Line4; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 //GPIOA.4 中断线以及中断初始化配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOAGPIO_PinSource5); EXTI_InitStructure.EXTI_Line=EXTI_Line5; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 GPIO_EXTILineConfig(GPIO_PortSourceGPIOAGPIO_PinSource6); EXTI_InitStructure.EXTI_Line=EXTI_Line6; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按键所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //使能按键所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn; //使能按键所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; //子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); } void EXTI0_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line0)==1) { DelayXms(10); if(KEY0==0)//判断某个线上的中断是否发生 PBout(0)=~PBout(0); } EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI0线路挂起位}void EXTI1_IRQHandler(void){ DelayXms(10); if(KEY1==0)//判断某个线上的中断是否发生 { PBout(6)=~PBout(6); PBout(7)=~PBout(7); PBout(8)=~PBout(8); PBout(9)=~PBout(9); } EXTI_ClearITPendingBit(EXTI_Line1); //清除EXTI0线路挂起位}void EXTI4_IRQHandler(void){ DelayXms(10); while(KEY2==0); DelayXms(10); if(KEY2==0)//判断某个线上的中断是否发生 { PBout(6)=~PBout(6); PBout(7)=~PBout(7); PBout(8)=~PBout(8); PBout(9)=~PBout(9); } EXTI_ClearITPendingBit(EXTI_Line4); //清除EXTI0线路挂起位} void EXTI9_5_IRQHandler(void){ DelayXms(10); while(KEY3==0); while(KEY4==0); DelayXms(10); if(KEY3==0)//判断某个线上的中断是否发生 PBout(8)=~PBout(8); EXTI_ClearITPendingBit(EXTI_Line5); //清除 LINE 上的中断标志位 if(KEY4==0)//判断某个线上的中断是否发生 PBout(9)=~PBout(9); EXTI_ClearITPendingBit(EXTI_Line6); //清除 LINE 上的中断标志位}
我手里有一个一个之前买的一根HDMI转VGA的转接头,没有音频,现在想加个音频输出口,里面的芯片用的是AG6200,网上查询资料无果,自己动手测引脚,终于找到一个引脚对地有变化的号,接上一个小喇叭,可以出声音,但是里面的杂声很大,声音特别不好。然后用电压表测量该引脚对地有直流1.4V-1.8V的变化电压,我应该怎么做电路调节一下输出的音质。也不知道自己找对引脚了吗?由AG6200的PDF请分享下,谢谢
我在使用ESP8266做物联网设备时,需要使用微信上的Airkiss对设备进行配置,现在出现各种问题,主要就是在断开网络后重新配置时配置不上,有什么好的办法吗,主要的程序思路麻烦请详细说下,谢谢
现在可与做到对红色物体的大体识别,我是通过对配个像素点的值和我要的颜色判断然后在屏幕上打印黑白点(转换二值的方法)我i想把周围的噪点去掉,还有很多的独立噪点还有对物体进行圈框和标出物体大致的中心点求大神指点迷津,给出程序参考,谢谢
我想用RGB转换成HLS或者HSV的格式 但是一开始怎么把RGB565的像素点转换成值域为0-255的三原色值 像素点来自摄像头0V7725模块求一个算法程序 最好有注释 在线等 着急啊 下面是我把RGB转成HLS的程序 可参考 int r g b;int h l s;int max min dif;r = color_rgb->Red; //红色g = color_rgb->Green;//绿色b = color_rgb->Blue; //蓝色max = maxOf3Values( r g b );min = minOf3Values( r g b );dif = max - min;//计算l,亮度l = ( max + min ) * 240 / 255 / 2;//计算h,色度if( max == min )//无定义{ s = 0;h = 0;}else{//计算色度if( max == r ){if( min == b )//h介于0到40{h = 40 * ( g - b ) / dif;}else if( min == g )//h介于200到240{h = 40 * ( g - b ) / dif + 240;}}else if( max == g ){h = 40 * ( b - r ) / dif + 80;}else if( max == b ){h = 40 * ( r - g ) / dif + 160;}//计算饱和度if( l == 0 ){s = 0;}else if( l <= 120 ){s = dif * 240 / ( max + min );}else{s = dif * 240 / ( 480 - ( max + min ) );} } color_hls->Hue = h; //色度 color_hls->Lightness = l; //亮度 color_hls->Saturation = s; //饱和度注:程序来自网上资料