用74HC165读8个按键状态(转)

源:用74HC165读8个按键状态

//--------------------------------------------------------------------------
//来源:            http://hi.baidu.com/mculove/home
//程序名称:        用74HC165读8个按键状态
//晶振:            11.0592MHz;
//MCU型号:        STC89C52RC;
//电路板型号:    EBV-MV(51实验板);
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
//硬件连接:
//EBVn-[VCC]    ->    MVn-[--VCC--]
//EBVn-[GND]    ->    MVn-[//GND//]
//MVn-{EX3}-[Y0]    ->    MVn-{EX2}-[L1]
//MVn-{EX3}-[Y1]    ->    MVn-{EX2}-[L2]
//MVn-{EX3}-[Y2]    ->    MVn-{EX2}-[L3]
//MVn-{EX3}-[Y3]    ->    MVn-{EX2}-[L4]
//MVn-{EX3}-[Y4]    ->    MVn-{EX2}-[L5]
//MVn-{EX3}-[Y5]    ->    MVn-{EX2}-[L6]
//MVn-{EX3}-[Y6]    ->    MVn-{EX2}-[L7]
//MVn-{EX3}-[Y7]    ->    MVn-{EX2}-[L8]
//                     ->    MVn-{EX2}-(VCC)
//                      ->    MVn-{EX3}-(VCC)

//EBVn-[P10]        ->    MVn-{EX3}-[A]
//EBVn-[P11]        ->    MVn-{EX3}-[B]
//EBVn-[P12]        ->    MVn-{EX3}-[C]
//EBVn-[P13]        ->    MVn-{EX3}-[G1]
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
//实验结果:
//控制74HC138的[A,B,C,G1]端口,使[Y0,Y1..Y7]输出预期的值,LED实现了流水灯显示
//--------------------------------------------------------------------------

//------------------------------------------------------
//头文件;
#include <AT89X52.H>

#define HC165_nPL   P3_5
#define HC165_CK    P3_6
#define HC165_OUT    P3_7

//------------------------------------------------------
void delay(void)
{
    unsigned char i,j;
    for(i = 250;i > 0;i--)
    for(j = 200;j > 0;j--);
}

unsigned char HC165(void)
{
    unsigned char i;
    unsigned char Temp;
    HC165_CK = 1;
    HC165_nPL = 0;        //HC165读按键
    HC165_nPL = 1;        //暂停HC165读按键
    Temp = 0;
    if(HC165_OUT == 1) Temp |= 0x01;
    for(i = 0;i < 7;i++)
    {
        HC165_CK = 0;
        HC165_CK = 1;
        Temp <<= 1;
        if(HC165_OUT == 1)
        {
            Temp |= 0x01;
        }
    }
    HC165_CK = 0;
    return(Temp);
}

//------------------------------------------------------
//程序入口;
void main(void)
{
    while(1)
    {
      P1 = HC165();
      delay();
    }
}

相关下载:KEIL原工程

时间: 2024-10-12 08:46:44

用74HC165读8个按键状态(转)的相关文章

用74HC165读8个按键状态

源:用74HC165读8个按键状态 源:74LV165与74HC595 使用 74LV165说明: 74LV165是8位并行负载或串行输入移位寄存器,末级提供互补串行输出(Q7和Q7).并行负载(PL)输入为低电平时,来自D0至D7输入的并行数据会异步加载到寄存器中.输入PL为高电平时,数据在输入DS处串行输入寄存器.其随每次时钟正向跃迁向右移一位(Q0 → Q1 → Q2,以此类推).通过将Q7输出连接到后一级的DS输入,该特性可实现并行到串行转换器扩展. 时钟输入为门控或结构,允许一个输入用

[VB.NET]调用API获取/设置键盘按键状态

1.调用GetAsyncKeyState()获取指定按键的状态,GetActiveKey()检索指定范围内的按键状态 2.调用keybd_event()可合成一次击键事件,通常两次击键事件间需要设定时间间隔 3.调用MapVirtualKey()获取指定按键的硬件扫描码,传入keybd_event()第二个参数就可以对DirectInput有效. Public Class ImitateKeyClass Private Declare Sub keybd_event Lib "user32&qu

&lt;十二&gt;读&lt;&lt;大话设计模式&gt;&gt;之状态模式

对于状态模式,<<大话设计模式>>是以人从上班到下班到加班的状态来展开讲述的.状态模式其实就是某一个对象在某个过程或者时间的一个状态记录,但是这个状态的顺序不能发生变化,在程序设计方面可能要比其他模式稍微复杂点,请待我慢慢将来. 本人喜欢用代码来形象的讲述原理,可能是因为对单纯的看些理论的书有些反感或者无趣吧,我希望以后的教育也如此,要不大家都不高考了...嘿嘿说多了 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 还是代码呈现吧,概念太抽象了.

【iCore3 双核心板】例程二:读取arm按键状态

实验指导书及代码包下载: http://pan.baidu.com/s/1sjrHnM9 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229438677

按键驱动异步通知

在此以前,我们都是让应用程序主动去读按键的状态,有没有一种情况,当驱动程序有数据时,主动去告诉应用程序,告诉它,有数据了,你赶紧来读吧.这种情况在linux里的专业术语就叫异步通知. 在按键的例子中异步通知可以理解为:当按键按下时,驱动程序会提醒(即触发)应用程序(通过信号signal来实现). 举一个例子:进程之间发信号 原来我们常用  kill 这个命令 : kill       -9    pid   kill这个命令就是一个发信号 发送者  :   kill 接收者  :   pid 信

单片机TM4C123学习(二):中断与按键控制

1.按键初始化 按键K1——PD7 按键K2——PF4 按键K3——PA3 按键K4——PA2 // // key1 init // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);已经在LED init写过了,不然也是要写的 GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_7); 也就是说,按键初始化只需要(外部设备使能和)设置管脚类型为输入两个步骤. 2.中断使能 三个步骤:设置端口中断类型,使能端口中断,

四、按键控制LED灯亮灭

材料: 1.SAGOO UNO 1块: 2.按键模块 1块: 3.杜邦线若干. 步骤: 1.按照下图连接按键模块和UNO: SAGOO UNO引脚                                      按键模块引脚 3V3  <------------------------------------>    V(电源) GND <------------------------------------>    G(电源) Pin2  <----------

按键驱动程序(异步通知)

此驱动程序之前的按键驱动程序(中断方式)上加以优化.用到异步通知.对于内核来讲,既然用户想得到的是按键后的状态,那么自然不必时时都要read状态.当它检测到中断发生变主动通知用户,用户再来读.这样,用户空间.内核就可以着手干点其它的事情,而不必忙等按键按下或释放.那么就先从应用程序上面看. 怎么设置相关联到"异步通知"呢?flag = fcntl(fd, F_GETFL);fcntl(fd, F_SETFL, flag|FASYNC);这样的两句就可以将文件描述符fd与异步通知关联,到

深入浅出~Linux设备驱动之按键设备驱动

在上述的驱动系列博客中,我们已经了解了关于阻塞和非阻塞.异步通知.轮询.内存和I/O口访问.并发控制等知识,按键设备驱动相对来说是比较简单的,本章内容可以加深我们对字符设备驱动架构.阻塞与非阻塞.中断定时器等相关知识的理解.在嵌入式的系统中,按键的硬件原理简单,就是通过一个上拉电阻将处理器的外部中断引脚拉高,电阻的另一端接按钮并接地就可以实现. 1.按键的确认流程如下 2 按键驱动中的有关数据结构 2.1 按键设备结构体以及定时器 #define MAX KEY BUF 16 // 键缓冲区大小