74LS164 for stm32 源码下载

  在单片机系统中, 如果并行口的IO资源不够,而串行口又没有其他的作用, 那么我们可以用74LS164来扩展并行IO口,节约单片机资源。

      74LS164是一个串行输入并行输出的移位寄存器。并带有清除端。
      其中: Q0—Q7 并行输出端 。 A,B串行输入端。 MR 清除端, 为0时,输出清零。 CP 时钟输入端。

74LS164引脚定义:
image

74LS164逻辑表:

image

相关原理:

image

 

74LS164.c

---------------------------------------------------------------------------------------------------------------------------------------------

 

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

#include "74LS164.h"
/* 延时模块82615468 sp-320-12
 * */
static void delay(u32 t)
{
	u32 i;
	while(t--)
		for (i = 0; i < 1; i++);
}


void Ls164Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(LS164_CLK_GPIO_CLK | LS164_DATA_GPIO_CLK, ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = LS164_CLK_PIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(LS164_CLK_GPIO, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = LS164_DATA_PIN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(LS164_DATA_GPIO, &GPIO_InitStructure);
	LS164_CLK_H();
	LS164_DATA_H();
	
}
void Ls164Send(u8 data)
{
	u8 k;
	for(k = 8; k > 0; k--)
	{
		LS164_CLK_L();
		delay(1);
		if(data & 0x01)
			LS164_DATA_H();
		else
			LS164_DATA_L();
		LS164_CLK_H();        
		delay(1);
		data >>= 1;
	}	
}


/*                          _____________________________________________________________
  164SendTime1 Line0  0bit |                                                             |
               Line1  1bit |                                                             |
               Line2  2bit |                                                             |
               Line3  3bit |                                                             |
               Line4  4bit |                                                             |
               Line5  5bit |                                                             |
               Line6  6bit |                                                             |
               Line7  7bit |                                                             |
  164SendTime0 Line8  0bit |                                                             |
               Line9  1bit |                                                             |
               Line10 2bit |                                                             |
               Line11 3bit |                                                             |
               Line12 4bit |                                                             |
               Line13 5bit |                                                             |
               Line14 6bit |                                                             |
               Line15 7bit |_____________________________________________________________|                          
 */

void LedLineOut(u8 LineN)
{
	u16 LineData;
	LineN %= 16;                   //行取值范围
	LineData = ~(0x0001 << LineN); //取反低电平有效
	Ls164Send(LineData & 0xff);    //第1片164(Line0~7)
	Ls164Send(LineData >> 8);      //第0片164(Line8~15)
}



//end of file	
	

74LS164.h

---------------------------------------------------------------------------------------------------------------------------------------------------------------

 

#ifndef __74LS164_H__
#define __74LS164_H__

#define	 LS164_CLK_PIN    	      GPIO_Pin_4
#define  LS164_CLK_GPIO           GPIOA
#define  LS164_CLK_GPIO_CLK       RCC_APB2Periph_GPIOA
#define  LS164_CLK_H()            GPIOA->BSRR = LS164_CLK_PIN
#define  LS164_CLK_L()		        GPIOA->BRR = LS164_CLK_PIN

#define	 LS164_DATA_PIN    	      GPIO_Pin_5
#define  LS164_DATA_GPIO          GPIOA
#define  LS164_DATA_GPIO_CLK      RCC_APB2Periph_GPIOA
#define  LS164_DATA_H()           GPIOA->BSRR = LS164_DATA_PIN
#define  LS164_DATA_L()		        GPIOA->BRR = LS164_DATA_PIN

void Ls164Send(u8 data);
void Ls164Init(void);
void LedLineOut(u8 LineN);
#endif

 

 

74LS164 for stm32 源码下载

posted on 2013-09-11 22:16  Worldsing  阅读(1183)  评论(0编辑  收藏  举报