栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

74LS165芯片单颗与级联的万能代码|2021-10-6

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

74LS165芯片单颗与级联的万能代码|2021-10-6

文章目录
  • 前言
  • 一、代码
    • 1.引脚配置:
    • 2.替换
    • 3.延时函数
    • 4.数据读取
    • 5.函数使用
  • 总结


前言

74LS165芯片单颗与级联的万能代码


一、代码 1.引脚配置:

32单片机引脚配置:
74LS165 串行数据输出(9脚|Q7) 配置为输入
74LS165 时钟(2脚|CP) 配置为输出
74LS165 移位控制/置入控制(1脚|PL) 配置为输出
51单片机引脚定义
根据实际接线定义到对应的IO口即可

32单片机引脚配置如下:

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();


  
  HAL_GPIO_WritePin(GPIOA, LS165_CLK_Pin | LS165_YW_Pin, GPIO_PIN_SET);

  
  GPIO_InitStruct.Pin = LS165_DATA_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(LS165_DATA_GPIO_Port, &GPIO_InitStruct);

  
  GPIO_InitStruct.Pin = LS165_CLK_Pin | LS165_YW_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

51单片机引脚配置如下:

sbit ls165_PL = P1^0;	//移位控制/置入控制
sbit ls165_CP = P1^1;	//时钟
sbit ls165_DATA = P1^2;	//数据输出
//IO口根据个人实际接线更改
2.替换

32单片机引脚操作替换

#define LS165_PL_0 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET)
#define LS165_PL_1 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)

#define LS165_CP_0 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET)
#define LS165_CP_1 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET)

#define LS165_data HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) //读取

#define data_bit 1 //165级联数

51单片机引脚操作无需写替换只需替换下列代码即可

#define uint8_t unsigned char
#define uint16_t unsigned int
#define data_bit 1 //165级联数 
3.延时函数
void delay(uint8_t i)
{
  while (i--)
    ;
}
4.数据读取
uint8_t LS165_Read(uint8_t bit)
{
  uint8_t State[data_bit]; //数据
  delay(10);               //稍做延时
  LS165_PL_0;              //置位,读入8位并行数据
  delay(10);
  LS165_PL_1;                           //移位,封锁并行输入,串行转换开始
  for (size_t i = 0; i < data_bit; i++) //根据级联数进行重复操作
  {
    LS165_CP_1;                    //初始化时钟
    State[i] = 0;                  //数据初始化
    for (size_t j = 0; j < 8; j++) //循环8次
    {
      State[i] = State[i] << 1;       //数据左移一位,保存数据
      if (LS165_data == GPIO_PIN_SET) //判断数据引脚状态|GPIO_PIN_SET = 1
      {
        State[i]++;
      }
      LS165_CP_0; //拉低时钟线
      delay(10);
      LS165_CP_1; // 上升沿, 数据移位, 读取下一位
      delay(10);
    }
  }
  return (State[bit - 1]); //返回所选级联芯片的数据
}

注:上方for语句中的 size_t类型 它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。
如果这个有报错就添加 cstddef头文件(应该可以解决QAQ)
size_t类型 一键直达

5.函数使用
uint8_t DATA = 0;
DATA = LS165_Read(?);//?为选择读取芯片的8位数据  1就是选择第一个芯片的数据,以此类推
//函数前面加 "~" 就是取反8位数据 即源数据 为 0x00 ~ 取反后为 0xFF
//数据也可直接赋值给整组的端口
总结

我怕自己忘记,先发个帖,如有需要请随意使用.
附件:74LS165英文数据手册

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298253.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号