chenbingjy

个性签名:为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

  • 2020-07-23
  • 回复了主题帖: MDK里*.axf文件是干嘛的

    流年u7 发表于 2020-7-23 19:13 如果MDK没有勾选生成HEX,那么调试烧录时用的就是.axf文件
    谢谢!

  • 发表了主题帖: MDK里*.axf文件是干嘛的

    请问高手,keil里这个*.axf文件有什么用?谢谢

  • 2020-07-15
  • 回复了主题帖: ADI正式收购Maxim之旧时记忆

    美信不是美国的吗?

  • 2020-07-14
  • 回复了主题帖: STLINK不能识别芯片

    本帖最后由 chenbingjy 于 2020-7-14 15:55 编辑 用STM32 ST-LINK Utility可以升级。 可就是连不上器件。 我把两个仿真器图片发上来。 这个是坏的。   这个是好的。   这个坏的,我看了一下,20针插孔左边那里有一个R1没焊。不知道有没有影响。 这个两个仿真器不一样,一个5月,一个7月。2019年7月生产的是不好的那个。

  • 回复了主题帖: STLINK不能识别芯片

    我重刷固件,提示The content of the ST-LINK is corrupt。 这怎么办呀?谢谢

  • 2020-07-13
  • 回复了主题帖: 再问矩阵键盘的问题

    huo_hu 发表于 2020-7-13 18:21 建议你不要搞状态机,功能套死了以后不好改
     谢谢!我考虑考虑

  • 回复了主题帖: 再问矩阵键盘的问题

    damiaa 发表于 2020-7-13 15:54 消抖要在多次中断中完成。 程序搞复杂了。
    谢谢!消抖具体怎么在多次中断中完成?说说思路。 我程序复杂是有原因的,列线不在一组IO口上。

  • 回复了主题帖: 再问矩阵键盘的问题

    dingzy_2002 发表于 2020-7-13 11:20 ①轻触按键一般是需要消除抖动程序的。 ②检测抖动间隔时间(我自己的程序)一般是20mS~50mS; ③抖 ...
    谢谢!我检测抖动不是靠延时。程序里us级的延时不是消抖,是等待电平稳定。

  • 回复了主题帖: 再问矩阵键盘的问题

    nmg 发表于 2020-7-13 09:25 再插入代码可以试试那个代码插入功能,代码部分的可读性会高些。   好久不见的矩阵键盘啊,现在 ...
    好的。 试验机上用

  • 回复了主题帖: 再问矩阵键盘的问题

    nmg 发表于 2020-7-13 09:25 再插入代码可以试试那个代码插入功能,代码部分的可读性会高些。   好久不见的矩阵键盘啊,现在 ...
    好的。试验机上用。

  • 回复了主题帖: 再问矩阵键盘的问题

    freebsder 发表于 2020-7-12 20:50 哪颗片子?看看有没有硬件去抖,会方便很多。
    STM32F103VCT6

  • 2020-07-12
  • 回复了主题帖: 再问矩阵键盘的问题

    huo_hu 发表于 2020-7-12 18:10 没有按键中断的时候你怎么实现扫描的?
    那时候也有这种情况

  • 2020-07-11
  • 发表了主题帖: 再问矩阵键盘的问题

    我用STM32写了个矩阵键盘的程序,原来是查询方式,现在改成定时器方式。   原理图:
    void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); }
    /******************************************************************************* * 函数名 : Timer4_Init_Config * 描述 : Timer4初始化配置 * 输入 : 无 * 输出 : 无 * 返回 : 无  * 说明 : 无 *******************************************************************************/ void Timer4_Init_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能Timer1时钟 //设置在下一个更新事件装入活动的自动重装载寄存器周期的值(计数到200为20ms) TIM_TimeBaseStructure.TIM_Period = 199; TIM_TimeBaseStructure.TIM_Prescaler = 7199; //设置用来作为TIMx时钟频率除数的预分频值(10KHz的计数频率) TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = TIM_CKD_DIV1 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE ); //使能TIM2指定的中断 TIM_Cmd(TIM4, ENABLE); //使能TIMx外设 } /******************************************************************************* * 函数名 : TIM4_IRQHandler * 描述 : 定时器2中断断服务函数 * 输入 : 无 * 输出 : 无 * 返回 : 无  * 说明 : 无 *******************************************************************************/ void TIM4_IRQHandler(void) { if(TIM_GetITStatus(TIM4, TIM_IT_Update) == SET) { TIM_ClearITPendingBit(TIM4, TIM_IT_Update); if(KeyFlag == 1) { hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); if (hangvalue != 0x3f) // 读出的不是0x3f说明有按键被按下 { keynum = 0; keyvalue = 0; KeyFlag = 2; GPIO_ResetBits(GPIOE,GPIO_Pin_6); //PE.6输出低  GPIO_SetBits(GPIOE,GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3); delay_us(XD); hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0300)>>5); switch (hangvalue) { case 0x0F: keyvalue=4; break; case 0x17: keyvalue=5; break; case 0x1b:  keyvalue=1; break; case 0x1d: keyvalue=2; break; case 0x1e:  keyvalue=3; break; default: break; } if(keyvalue==0) { GPIO_ResetBits(GPIOE, GPIO_Pin_5 );  GPIO_SetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_4 | GPIO_Pin_3); delay_us(XD); hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0300)>>5); switch (hangvalue) { case 0x0F: keyvalue=9; break; case 0x17: keyvalue=10; break; case 0x1b:  keyvalue=6; break; case 0x1d: keyvalue=7; break; case 0x1e:  keyvalue=8; break; default: break; } } if(keyvalue==0) { GPIO_ResetBits(GPIOE, GPIO_Pin_4 );  GPIO_SetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_3 | GPIO_Pin_5); delay_us(XD); hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); // 第一回合中算出行号 switch (hangvalue) { case 0x1F: keyvalue=14; break; case 0x2F: keyvalue=15; break; case 0x37:  keyvalue=16; break; case 0x3B: keyvalue=11; break; case 0x3D:  keyvalue=12; break; case 0x3E:  keyvalue=13; break; default: break; } } if(keyvalue==0) { GPIO_SetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_4 | GPIO_Pin_5); GPIO_ResetBits(GPIOE, GPIO_Pin_3 );  delay_us(XD); hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); switch (hangvalue) { case 0x1F: keyvalue=20; break; case 0x2F: keyvalue=21; break; case 0x37:  keyvalue=22; break; case 0x3B: keyvalue=17; break; case 0x3D:  keyvalue=18; break; case 0x3E:  keyvalue=19; break; default: break; } } GPIO_ResetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3); //PE.6,5,4,3 输出低  delay_us(XD); hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); while (hangvalue != 0x3f) { delay_us(20); hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); } KeyFlag=0; keynum = keyvalue; if(S0_State == (S_INIT|S_CONN)) { S0_Data&=~S_TRANSMITOK; Write_SOCK_Data_Buffer(0, &keynum, 1);//指定Socket(0~7)发送数据处理,端口0发送23字节数据 } } else KeyFlag = 0; } GPIO_ResetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3); //PE.6,5,4,3 输出低  delay_us(XD); hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); if (hangvalue != 0x3f) // 读出的不是0x3f说明有按键被按下 { KeyFlag = 1; } else KeyFlag = 0; // led^=0x01; // GPIO_WriteBit(GPIOE,GPIO_Pin_7,led); } }
    按下按键测试,通过网口打印出来:
    可以看到,有的按键打印两次,实际按下一次。 还有的正确键值后面跟着一个0. 请高手指教,如何解决?谢谢!

  • 回复了主题帖: T6963C负向显示的问题

    freebsder 发表于 2020-7-11 15:13 负向就是反色吧,黑变白白变黑。
    是的。

  • 2020-07-10
  • 回复了主题帖: 矩阵键盘的问题

    宋元浩 发表于 2020-7-9 22:48 https://github.com/nimaltd/KeyPad  可以参考这个代码
    谢谢

  • 2020-07-09
  • 发表了主题帖: 矩阵键盘的问题

    我写了个矩阵键盘的程序,效果不太好。   原理图: 代码: //初始化PA8和PD2为输出口.并使能这两个口的时钟      //LED IO初始化 void KEY_Init(void) {    GPIO_InitTypeDef  GPIO_InitStructure;    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);  //使能PB,PE端口时钟  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;   //开漏输出    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO口速度为50MHz  GPIO_Init(GPIOE, &GPIO_InitStructure);      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 ;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //浮空输入  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO口速度为50MHz  GPIO_Init(GPIOE, &GPIO_InitStructure);    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //浮空输入  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO口速度为50MHz  GPIO_Init(GPIOB, &GPIO_InitStructure);         }   unsigned char GetKey(void) { unsigned char keyvalue = 0; uint16_t hangvalue=0;   GPIO_ResetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3);   //PE.6,5,4,3 输出低  hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); if (hangvalue != 0x3f)        // 读出的不是0x3f说明有按键被按下 { delay_ms(20); //延时消抖 hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); if (hangvalue != 0x3f)        // 读出的不是0x3f说明有按键被按下 { GPIO_ResetBits(GPIOE,GPIO_Pin_6);   //PE.6输出低  GPIO_SetBits(GPIOE,GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3);   hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0300)>>5); //hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); switch (hangvalue) { case 0x0F:   keyvalue=4;   break; case 0x17: keyvalue=5; break; case 0x1b:  keyvalue=1; break; case 0x1d: keyvalue=2; break; case 0x1e:  keyvalue=3; break; default: break; } if(keyvalue==0) { GPIO_ResetBits(GPIOE, GPIO_Pin_5 );  GPIO_SetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_4 | GPIO_Pin_3); hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0300)>>5); switch (hangvalue) { case 0x0F: keyvalue=9; break; case 0x17: keyvalue=10; break; case 0x1b:  keyvalue=6; break; case 0x1d: keyvalue=7; break; case 0x1e:  keyvalue=8; break; default: break; } } if(keyvalue==0) { GPIO_ResetBits(GPIOE, GPIO_Pin_4 );  GPIO_SetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_3 | GPIO_Pin_5); hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); // 第一回合中算出行号 switch (hangvalue) { case 0x1F: keyvalue=14; break; case 0x2F: keyvalue=15; break; case 0x37:  keyvalue=16; break; case 0x3B: keyvalue=11; break; case 0x3D:  keyvalue=12; break; case 0x3E:  keyvalue=13; break; default: break; } } if(keyvalue==0) { GPIO_SetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_4 | GPIO_Pin_5); GPIO_ResetBits(GPIOE, GPIO_Pin_3 );  hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); switch (hangvalue) { case 0x1F: keyvalue=20; break; case 0x2F: keyvalue=21; break; case 0x37:  keyvalue=22; break; case 0x3B: keyvalue=17; break; case 0x3D:  keyvalue=18; break; case 0x3E:  keyvalue=19; break; default: break; } } GPIO_ResetBits(GPIOE,GPIO_Pin_6 | GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3);   //PE.6,5,4,3 输出低  hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); while (hangvalue != 0x3f) { hangvalue=(GPIO_ReadInputData(GPIOE)&0x07)+((GPIO_ReadInputData(GPIOB)&0x0380)>>4); } return keyvalue; } return 0; } return 0; } 有的按键检测不准: 按键1,2,3,4,5,是1,2,3,4,5 按键6,7,8,9,10,是1,2,3,9,10 按键11,12,13,14,15是1,2,3,14,15. 按键16,17,18,19,20是16,1,2,3,20 请问高手,哪里有错?谢谢!

  • 2020-07-07
  • 回复了主题帖: 电子工程师高考都选什么专业?

    chunyang 发表于 2020-7-7 17:52 我们当地所有中小学的规矩是尽量男女同桌,这样可以防止学生上课说悄悄话。所以从小学到高中,我的同桌都 ...
    太幸福了。

  • 回复了主题帖: 电子工程师高考都选什么专业?

    chunyang 发表于 2020-7-7 17:27 在我同学中,我同桌算是跟土木这行有点关联的唯一一个女生,专业好像是路桥建设。她毕业就改行了,先是留 ...
    大神同桌是个女的。我也有三个女同桌,班里只有我一个男生有女同桌。 我高考胡乱选了几个,都忘了,录取的是工业自动化。

  • 回复了主题帖: 有心人天不负,高考加油!

    板凳,高考都没多少印象了。

  • 2020-07-06
  • 回复了主题帖: 985研究生,37岁失业了,该怎么办?

    换工作频繁,简历可以改一下,不一定照实写

统计信息

已有643人来访过

  • 芯币:466
  • 好友:12
  • 主题:561
  • 回复:1848
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


289887903 2018-7-13
你好    请教在android上怎么实现SO 库的调用 实现读取二代证照片信息   QQ 289887903
石玉 2016-5-17
chenbingjy: 你好!你QQ多少?方便想你请教Linux下编译安卓开发内核?谢谢!
扣扣971586331,我只是在linux下编译过安卓
查看全部