历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2019年12月11日 | 74LS164 for stm32 源码

2019-12-11 来源:eefocus

在单片机系统中, 如果并行口的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


推荐阅读

史海拾趣

Hitron公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的重要设备,具有高度的专业性和广泛的科普意义。作为信息家电的一员,机顶盒不仅实现了数模转换,让用户能够在模拟电视上观看数字电视节目,还通过接入互联网,极大地丰富了电视节目的选择,提升了观看体验。

从广义上讲,机顶盒涵盖了从模拟频道增补器到现代的数字卫星机顶盒(DVB-S)、数字地面机顶盒(DVB-T)、有线电视数字机顶盒(DVB-C)以及IPTV机顶盒等多种类型。这些机顶盒不仅接收来自有线电缆、卫星天线、宽带网络及地面广播的信号,还提供了电子节目指南、网页浏览等增值服务,使电视机成为了一个能够与用户进行互动的智能终端。

在技术层面,机顶盒的工作原理可概括为接收、解码和显示三个步骤。它首先通过内置的调谐器接收数字电视信号,随后由内部的解码器将信号转换成电视可识别的视频和音频流,最终通过电视机呈现给用户。随着技术的不断进步,机顶盒已能支持高清、甚至4K超高清视频播放,为用户带来更为细腻的画面和震撼的音效。

未来,机顶盒市场将继续保持稳定增长态势,技术创新与智能化将成为重要的发展方向。高清化、超高清化、人工智能及云计算等技术的应用,将使机顶盒不仅限于基本的电视信号接收与解码功能,而是向智能化、多功能化方向迈进,为用户提供更加便捷、智能的生活体验。

Compex Corporation公司的发展小趣事

近年来,电子行业面临着巨大的变革和挑战。新技术的不断涌现和市场的快速变化使得企业必须不断适应和创新。Compex Corporation也不例外。公司紧密关注行业动态和技术发展趋势,不断调整和优化产品结构和市场策略。同时,公司还加大了在人工智能、物联网等新兴领域的研究力度,以期在未来市场中占据先机。通过持续创新和适应变化,Compex Corporation在电子行业中保持了领先地位,并为未来的发展奠定了坚实基础。

请注意,以上故事是基于假设和可能的情况构建的,并非Compex Corporation的实际发展历史。如果需要更具体和准确的信息,建议查阅相关公司的官方资料或行业报告。

Green Solution Technology Co Ltd公司的发展小趣事

近年来,电子行业面临着巨大的变革和挑战。新技术的不断涌现和市场的快速变化使得企业必须不断适应和创新。Compex Corporation也不例外。公司紧密关注行业动态和技术发展趋势,不断调整和优化产品结构和市场策略。同时,公司还加大了在人工智能、物联网等新兴领域的研究力度,以期在未来市场中占据先机。通过持续创新和适应变化,Compex Corporation在电子行业中保持了领先地位,并为未来的发展奠定了坚实基础。

请注意,以上故事是基于假设和可能的情况构建的,并非Compex Corporation的实际发展历史。如果需要更具体和准确的信息,建议查阅相关公司的官方资料或行业报告。

CT [ Central Technologies ]公司的发展小趣事

随着国内市场的饱和,CT公司开始将目光投向国际市场。公司制定了一系列国际化发展战略,包括在海外设立研发中心、拓展销售渠道以及与国际知名企业建立战略合作关系等。通过这些举措,CT公司的产品和服务逐渐渗透到全球范围内,公司的国际影响力不断增强。

ERGOBAHCO公司的发展小趣事

进入21世纪后,电子行业面临着技术更新换代的巨大变革。ERGOBAHCO公司敏锐地捕捉到了这一变革带来的机遇和挑战,开始加大在新技术、新产品的研发力度。公司通过与高校、科研机构等合作,成功推出了一系列符合市场需求的智能化、绿色化的电子产品。这些产品不仅为公司带来了丰厚的利润回报,也进一步巩固了公司在行业内的领先地位。

EMC Component Group公司的发展小趣事

进入21世纪后,电子行业面临着技术更新换代的巨大变革。ERGOBAHCO公司敏锐地捕捉到了这一变革带来的机遇和挑战,开始加大在新技术、新产品的研发力度。公司通过与高校、科研机构等合作,成功推出了一系列符合市场需求的智能化、绿色化的电子产品。这些产品不仅为公司带来了丰厚的利润回报,也进一步巩固了公司在行业内的领先地位。

问答坊 | AI 解惑

请问有没有朋友用过PHY芯片

我现在正在调试的系统中用到了RTL8212,是一块千兆双口物理层收发器。现在他能够正常接收数据,但是却不能发送数据,发出的数据在接收方说是错误的数据包。我是用一块FPGA来控制的,现在不知道问题出在哪里,不知道是我的FPGA时序不对还是RTL8212的 ...…

查看全部问答>

有关红外遥控资料和制作

分享一些关于红外遥控和制作的资料,是我在网上找了很久才整理,下载的资料哦…

查看全部问答>

华为经典UNIX 教程

目  录 第1章 UNIX操作系统概述 6 1.1 UNIX操作系统简介 6 1.2 UNIX系统组成 6 1.3 与UNIX有关的几个名词 7 第2章 UNIX常用操作 9 2.1 启动终端 9 2.2 登录 9 2.3 UNIX命令 9 2.4 注销(退出UNIX系统) 13 第3章 UNIX文件系统 ...…

查看全部问答>

silverlight for embedded的环境搭建

请问有没有人知道啊 谢谢了…

查看全部问答>

高分问linux串口发送问题

arm+linux平台 通过 串口发送 数据 write完以后 必须sleep()发送才能成功 否则,发送的就在中间某位产生错误码,数据长的时候,总是在中间顿一下,然后发后半部分,前半部分的最后一个字节就错掉了 这是怎么回事? 太怪了 高手帮忙分析吧 …

查看全部问答>

STC单片机A/D转换程序问题

我用stc12c5608AD自带的AD做一个AD转换的程序 具体的代码如下 void ad_cov() { P1M0=P1M0||0x20; P1M1=P1M1||0x20; //选择P1.5为开漏。(做A/D使用时选择的模式) ADC_CONTR=0xc5; //540个时钟周期转换一次;ADC_FLAG=0;ADC_START=0(设置为1 ...…

查看全部问答>

自己做了板,触摸屏没反应

   自己仿着S3C2410a的开发板,根据需要自己做了一个底板(插在上面的核心板没做),画了PCB,只用了电源,串口和液晶屏(其它的没画),做好板之后又焊上器件,当把原来的核心板(系统在flash里)插在我做的板子上时,液晶可以正常开启,但是触摸时只 ...…

查看全部问答>

Vista是否支持WDM驱动?

Vista是否支持WDM驱动?还是说会出一个新的架构?…

查看全部问答>

推荐个光电式转速传感器

帮忙选一个转速传感器,要输出计数脉冲的,工作电压最好是5v的,万分感谢!!应该是从光电式传感器中选吧,一般的就行,没哟特殊要求,转速几十转每分…

查看全部问答>

RAM的配置问题

我最近调试FPGA向RAM里写数据,RAM的数据总线是72位的,地址总线为20位。由于需要给6片RAM写入相同的数据,于是进行这样的设计,外部控制平台向FPGA内部写入72为数据,数据通过6个三态门给外部RAM,通过signaltap验证时,控制平台向FPGA写入的数据 ...…

查看全部问答>