你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32驱动74HC165原理图加程序

[复制链接]
STMCU小助手 发布时间:2022-4-22 22:00
一、原理图

SZJL)IGLR562[WW_@34@7WI.png

二、时序图

VV~Q~AU8M{{Z1VY~P9PQS$R.png
三、驱动源码


  1. void couple_init(void)
  2. {
  3.         GPIO_InitTypeDef  GPIO_InitStructure;

  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);         //使能PB,PE端口时钟

  5.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  6.         
  7.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                                 
  8.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                  
  9.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  10.         GPIO_Init(GPIOB, &GPIO_InitStructure);

  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                                 
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  14.         GPIO_Init(GPIOB, &GPIO_InitStructure);        
  15.         GPIO_SetBits(GPIOB,GPIO_Pin_6);

  16.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                                 
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
  18.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  19.         GPIO_Init(GPIOC, &GPIO_InitStructure);        
  20.         GPIO_SetBits(GPIOC,GPIO_Pin_0);        
  21. }
  22. void couple_delay(u8 i)
  23. {
  24.         while(i--);
  25. }
  26. u16 read_couple(void)
  27. {
  28.         u8 i;
  29.         u16 temp = 0;

  30.         couple_ld = 0; //PL拉低,读取按键状态
  31.         couple_ld = 1; //PL拉高,停止按键读取

  32.         if(couple_dat == 1)        //等于1即并行输入D7引脚的按键被按下
  33.                         temp |= 0x01;         //最低位置1表示按键被按下,反之则没按键被按下
  34.         for(i = 0; i < 15; i ++)  //因为最高位不用移位即可读取,故循环(16-1)次,依次把次高位移到最高位,第一级74HC165优先读取
  35.         {
  36.                 temp = temp << 1;

  37.                 couple_clk = 0; //HC165_CLK = 0 ——> HC165_CLK = 1 产生上升沿,次高位D(n-1)移到高位D(n)
  38.                 couple_delay(10);
  39.                 couple_clk = 1;

  40.                 if(couple_dat == 1)
  41.                         temp |= 0x01;
  42.         }

  43.         return temp;
  44. }


复制代码

收藏 评论1 发布时间:2022-4-22 22:00

举报

1个回答
戎戎 回答时间:2022-11-17 18:18:42
wwrrrrr

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版