51单片机:IO口扩展芯片用法(74HC165,74HC595)
IO口扩展芯片,主要是解决单片机IO口太少。
74HC165:数据从并转串
74HC595:数据从串转并
两种芯片,都是通过时序电路,加上移位功能,进行数据传输
74HC165:数据从并转串。以下实例,实现8个独立按键,控制数码管的8段
#include <reg52.h>
#include <intrins.h> typedef unsigned char u8;
typedef unsigned int u16; void delay( u16 i ){
while( i-- );
} #define GPIO_DIG P0 sbit IN_SG = P1^;
sbit IN_DATA = P1^;
sbit IN_CLK = P3^; u8 read_74HC165(){
u8 indata;
u8 i;
IN_SG = ; //先置入数据
_nop_(); //等待一个机器周期
IN_SG = ; //芯片切入 移位功能
_nop_(); indata = ;
for( i = ; i < ; i++ ){ //在时序电路作用下,移动8次,得到一个字节数据
indata = indata << ;
IN_CLK = ;
_nop_(); indata |= IN_DATA;
IN_CLK = ;
}
return indata;
} void main (){
u8 hc165_data;
GPIO_DIG = 0x0;
while( ) {
hc165_data = read_74HC165();
if( hc165_data != 0xFF ) {
GPIO_DIG = ~hc165_data;
}
}
}
74HC595:数据从串转并,以下程序,实现流水灯效果
#include <reg52.h>
#include <intrins.h> typedef unsigned char u8;
typedef unsigned int u16; void delay( u16 i ){
while( i-- );
} #define GPIO_DIG P0 sbit SRCLK = P3^; //移位寄存器时钟
sbit STORE_RCLK = P3^; //存储寄存器时钟
sbit SER = P3^; //串口输入数据 void hc595_send_data( u8 input_data ) {
u8 i;
SRCLK = ;
STORE_RCLK = ;
for( i = ; i < ; i++ ){
SER = input_data >> ; //从最高位开始传送
input_data <<= ; //把次高位移到最高位 SRCLK = ; //时序脉冲
_nop_();
_nop_();
SRCLK = ;
}
STORE_RCLK = ; //时序脉冲
_nop_();
_nop_();
STORE_RCLK = ; //把寄存器的数据 送到输出口
} void main (){
u8 led_num;
led_num = 0x01; //先让D11点亮
while( ) {
hc595_send_data( led_num );
led_num = _crol_( led_num, );
delay( );
delay( );
}
}
51单片机:IO口扩展芯片用法(74HC165,74HC595)的更多相关文章
- 如何检测 51单片机IO口的下降沿
下降沿检测,说白了就是满足这样一个逻辑,上次检测是1,这次检测是0,就是下降沿. 从这个条件可知,要确保能够正确检测到一个下降沿,负脉冲的宽度,必须大于一个检测周期,当负脉冲宽度小于一个检测周期,就有 ...
- 关于51单片机P0口的结构及上拉问题
1.P0作为地址数据总线时,V1和V2是一起工作的,构成推挽结构.高电平时,V1打开,V2截止:低电平时,V1截止,V2打开.这种情况下不用外接上拉电阻.而且,当V1打开,V2截止,输出高电平的时候, ...
- 51单片机GPIO口模拟串口通信
51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: 深入C语言(20) 作者同 ...
- 单片机IO口驱动能力
以STM32的IO口为例,最大的输出电流和灌入电流在芯片手册上都有说明.单个IO口一般都是十几mA到几十mA,同时总的VDD电流也有限制,大概为150mA.所以单片机驱动外设时,如果不是信号型而是功率 ...
- 关于51单片机IO引脚的驱动能力与上拉电阻
单片机的引脚,可以用程序来控制,输出高.低电平,这些可算是单片机的输出电压.但是,程序控制不了单片机的输出电流. 单片机的输出电流,很大程度上是取决于引脚上的外接器件. 单片机输出低电平时,将允许外部 ...
- 关于51单片机IO引脚的驱动能力与上拉电阻设计方案
转载自:http://bbs.dianyuan.com/article/20312-2 单片机的引脚,可以用程序来控制,输出高.低电平,这些可算是单片机的输出电压.但是,程序控制不了单片机的输出电流. ...
- STM32系列单片机IO口模式设置
STM32单片机的每组IO口都有4个32位配置寄存器用于配置GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR和GPIOx_PUPDR,2个32位数据寄存器用于配置输入和 ...
- 实验1 单片机IO口应用及数码管显示
1. 单片机驱动蜂鸣器的实验: a) 说明:Lab51单片机实验板的蜂鸣器连接到单片机的P1.5 b) 基本要求:控制蜂鸣器每2秒响0.5秒. #include &l ...
- 单片机小白学步系列(二十) IO口原理
IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比較长的篇幅介绍IO口的原理. 也是查阅了不少资料,确保内容正确无误,花了非常长时间写的. IO口原理原本须要涉及非常多深入的知识,而这里尽最大 ...
随机推荐
- redis & memcache 性能比较
redis和memcache非常像的,都是key,value的方式,将数据存放内存中.最近在学习redis,在网上看了一些这方面的资料,有三种观点: redis读写内存比memcache快 memca ...
- 2017年全国大学生物联网设计竞赛(TI杯)华东分赛区决赛总结
全国大学生物联网设计竞赛(TI杯)是由教育部高等学校计算机类教学指导委员会主办.上海交通大学电子信息与电气工程学院承办.德州仪器半导体技术公司(TI)协办的赛事,自2014年设立以来,一直是物联网领域 ...
- JVM之虚拟机类加载机制
有兴趣可以先参考前面的几篇JVM总结: JVM自动内存管理机制-Java内存区域(上) JVM自动内存管理机制-Java内存区域(下) JVM垃圾收集器与内存分配策略(一) 我们知道,在编写一 ...
- Go语言数组
目录 声明数组 数组在内存的结构 初始化数组 使用数组 函数间传递数组 数组使用注意事项 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列(这是一种同构的数据结构);这种类型可以是任意的原始类 ...
- 《http权威指南》读书笔记16
概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...
- java.util.regex包下的Pattern类和Matcher类的使用总结
一.介绍 Java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现1.Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不 ...
- Struts框架(6)---action接收请求参数
action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...
- [NewLife.XCode]数据模型文件
NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含 ...
- Core2.0知识整理
概述 Commond-Line ASP.NET结构文件 Startup 配置文件 中间件和依赖注入 依赖注入原理 框架自带的依赖注入(IServiceCollection) 依赖注入生命周期 依赖注入 ...
- 【原创】sizeof运算符总结
sizeof运算符返回一条表达式或一个类型名字的所占字节数,返回值为size_t的常量表达式,注意:sizeof右结合,且为编译时计算,而非运行时 两种形式:sizeof (type)和sizeof ...