IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 74LS165芯片单颗与级联的万能代码|2021-10-6 -> 正文阅读

[嵌入式]74LS165芯片单颗与级联的万能代码|2021-10-6


前言

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};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();


  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, LS165_CLK_Pin | LS165_YW_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin : PtPin */
  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);

  /*Configure GPIO pins : PAPin PAPin */
  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英文数据手册

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:59:53  更:2021-10-07 13:59:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:38:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码