74HC165编程篇(二)

前面已介绍过74HC165的工作原理,接下来编写用51单片机来驱动这个片子的代码并用Proteus做了仿真,这次就不使用stm32来驱动了,因为仿真软件里没有ST的单片机。

写74HC165的驱动也不难,只需根据芯片手册中的时序来编写代码,51单片机的代码已贴出,代码的注释也描述很清楚了。

#ifndef _74HC165_H
#define _74HC165_H

#include "allhead.h"

sbit HC165_PL = P2^5; //PL 并行数据输入使能,低电平有效
sbit HC165_CLK = P2^7;//CP 时钟,上升沿触发
sbit HC165_OUT = P2^4; //Q7 串行数据输出
sbit HC165_CE = P2^6;//CE 时钟使能,低电平有效

void _74hc165_init(void);
uchar _74hc165_read_byte(void);

#endif
#include "74hc165.h"

//初始化74hc165
void _74hc165_init(void)
{
	HC165_CE = 0; //初始化使能时钟,后面就不需再使能
	HC165_PL = 1; //PL拉高,不读取按键状态
	HC165_CLK = 1; //时钟拉高,便于产生上升沿
}

//74hc165读取按键状态,并行输入转串行输出
uchar _74hc165_read_byte(void)
{
	uchar i;
	uchar temp = 0;
	
	HC165_PL = 0; //PL拉低,读取按键状态
	HC165_PL = 1; //PL拉高,停止按键读取
	
	if(HC165_OUT == 1)//等于1即并行输入D7引脚的按键被按下
		temp |= 0x01;   //最低位置1表示按键被按下,反之则按键没被按下
	for(i = 0; i < 7; i ++) //循环7次,依次把次高位移到最高位
	{
		temp = temp << 1;
		HC165_CLK = 0; //HC165_CLK = 0 ——> HC165_CLK = 1 产生上升沿,次高位D(n-1)移到高位D(n)
		_nop_();
		_nop_();
		HC165_CLK = 1;
		
		if(HC165_OUT == 1)
			temp |= 0x01;
	}
	
	return temp; //返回当前按键状态
}

仿真图片:

仿真文件下载:

链接:https://pan.baidu.com/s/1f5y2GUcva1vJzet3ENe1Xg 
提取码:4xcu 
 

  • 26
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值