74HC165A STM32代码

#74HC165A STM32代码

注意第一个数据应在CLK还没产生上升沿时读取。

#define DATA_SIZE                    (8)
#define PL_Pin(a)               	 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, (GPIO_PinState)a)
#define CLK_Pin(a)               	 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, (GPIO_PinState)a)
#define DO_Pin()               	     HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)

uint32_t read_74hc165a_data(void)
{
  uint32_t data=0;
  uint8_t pin_res = 0;
  CLK_Pin(0);
  PL_Pin(1);
  delay_ms(1);
  uint8_t pin_sta[DATA_SIZE]={0};
  pin_res = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)&0x01;
  data=data|pin_res;
  pin_sta[0] = pin_res; 
  for(uint8_t i=1;i<DATA_SIZE;i++)
  {
    delay_ms(1);
    CLK_Pin(1);
    delay_ms(1);
    pin_res = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)&0x01;
    data=(data<<1)|pin_res;
    pin_sta[i] = pin_res;    
    CLK_Pin(0);    
  } 
  delay_ms(1);
  PL_Pin(0);
  printf("%d %d %d %d %d %d %d %d\r\n",pin_sta[0],pin_sta[1],pin_sta[2],pin_sta[3],pin_sta[4],pin_sta[5],pin_sta[6],pin_sta[7]);
  return data;
 
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用74HC595驱动四位数码管的STM32F103库代码: ```c #include "stm32f10x.h" #define DATA_PIN GPIO_Pin_7 #define LATCH_PIN GPIO_Pin_6 #define CLOCK_PIN GPIO_Pin_5 void HC595_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = DATA_PIN | LATCH_PIN | CLOCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } void HC595_WriteByte(unsigned char data) { GPIO_ResetBits(GPIOB, LATCH_PIN); for (int i = 0; i < 8; i++) { if (data & 0x80) GPIO_SetBits(GPIOB, DATA_PIN); else GPIO_ResetBits(GPIOB, DATA_PIN); GPIO_SetBits(GPIOB, CLOCK_PIN); GPIO_ResetBits(GPIOB, CLOCK_PIN); data <<= 1; } GPIO_SetBits(GPIOB, LATCH_PIN); } void HC595_DisplayDigit(unsigned char digit, unsigned char position) { static const unsigned char digitCode[] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F, // 9 0x77, // A 0x7C, // b 0x39, // C 0x5E, // d 0x79, // E 0x71 // F }; unsigned char code = digit < sizeof(digitCode) ? digitCode[digit] : 0; code |= position << 6; HC595_WriteByte(code); } void HC595_DisplayNumber(unsigned int number) { unsigned char digit[4]; digit[3] = number % 10; digit[2] = (number / 10) % 10; digit[1] = (number / 100) % 10; digit[0] = (number / 1000) % 10; HC595_DisplayDigit(digit[0], 0); HC595_DisplayDigit(digit[1], 1); HC595_DisplayDigit(digit[2], 2); HC595_DisplayDigit(digit[3], 3); } ``` 使用方法: ```c int main(void) { HC595_Init(); while (1) { for (int i = 0; i < 10000; i++) { HC595_DisplayNumber(i); for (int j = 0; j < 100000; j++); } } } ``` 其中,`HC595_DisplayDigit`函数用于在指定位置显示一个数字,`HC595_DisplayNumber`函数用于在四个位置上分别显示一个数字。在`main`函数中,可以使用`HC595_DisplayNumber`函数不断循环显示数字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值