普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3232|回复: 1

74HC165扩展i/o口

 关闭 [复制链接]

3

主题

4

帖子

25

积分

新手上路

Rank: 1

积分
25
发表于 2017-7-22 18:41:24 | 显示全部楼层 |阅读模式
/**************************************************************************************
*                              单片机IO扩展--74HC165实验                                                                                                  *
实现现象:下载程序后,按下独立按键可以点亮对应的led
                        K1--led1
                        K2--led2
                        K3--led3
                        ...
                        K8--led8
                       
注意事项:必须将74HC165模块的JP165短接片短接,否则不会出现现象                                                                                                                                                          
***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

//--定义使用的IO口--//
#define GPIO_LED P0
sbit    IN_PL   = P1^6;   
sbit    IN_Data = P1^7;    //数据通过P1.7脚移进单片机内处理
sbit    SCK    = P3^6;




/*******************************************************************************
* 函 数 名         : Read74HC165
* 函数功能                   : 使用165读取一个字节数据
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

u8 Read74HC165(void)
{  
  u8 i;
  u8 indata;
               
   IN_PL = 0;
   _nop_();        //短暂延时 产生一定宽度的脉冲
   IN_PL = 1;           //将外部信号全部读入锁存器中
   _nop_();

   indata=0;   //保存数据的变量清0  
   for(i=0; i<8; i++)
    {
          indata = indata<<1;           //左移一位
          SCK = 0;   //时钟置0         
      _nop_();
          indata |= IN_Data;
      SCK = 1;   //时钟置1          
        }

   return(indata);         
}


/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{       
        u8 h165Value;

        GPIO_LED = 0;
        while(1)
        {
                h165Value = Read74HC165();
                if(h165Value != 0xFF)
                {
                        GPIO_LED = ~h165Value;
                }       
        }                       
}
引出端符号
CLK,CLK INH 时钟输入端(上升沿有效)
A-H 并行数据输入端
SER 串行数据输入端
QH 输出端
Q__H 互补输出端
SH/L__D__ 移位控制/置入控制(低电平有效)

那么,下面这部分是构造了一个上升沿,还是检测?如果要检测一个上升沿该如何写?
  for(i=0; i<8; i++)
    {
          indata = indata<<1;           //左移一位
          SCK = 0;   //时钟置0         
      _nop_();?
          indata |= IN_Data;
      SCK = 1;   //时钟置1          


回复

使用道具 举报

2

主题

3

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2017-7-23 08:19:40 | 显示全部楼层
STK由0变为1,是构造一个上升沿。检测就读P3^6存在A 再读P3^6存在B A>B? 是,下降沿 A<B 是,上升沿
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-25 23:29 , Processed in 0.094325 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表