MSP430矩阵及独立键盘

简介:   在学习MSP430的时候,总是有很多东西记不住,同时又是英文的资料,好多东西也是没怎么看透,英文虽过六级但是看英文资料还是有一种想睡的冲动啊,在学习键盘的时候,我的这块板子有些不同,矩阵键盘和独立键盘公用的,组合式的按键。

  在学习MSP430的时候,总是有很多东西记不住,同时又是英文的资料,好多东西也是没怎么看透,英文虽过六级但是看英文资料还是有一种想睡的冲动啊,在学习键盘的时候,我的这块板子有些不同,矩阵键盘和独立键盘公用的,组合式的按键。。这是为了节约硬件的成本啊 。。。

  
  #define keyin    (P1IN & 0x0f)    //低四位保持不变,高4位清零,这个宏定义就是这个意思。

再写主函数的时候有这个语句:    P1DIR = BIT7;               //设置P1.0~P.3为输入状态,P.7为输出
                  P1OUT = 0;          //前面两句确定P1.0~P1.3是独立按键

这是用软件的方式把矩阵键盘独立化,当然P1=BIT7;这一句也可以把BIT7改为BITX(4~7),,这样是确定第几行是独立按键。确实节约了硬件成本啊 。

对于用按键的指示显示到数码管上,就说下数码管的初始化:如下语句

    P4DIR = 0xff;       //P4口对应段选信号
    P5DIR = 0xff;       //P5口对应位选信号
    P4OUT = 0x3f;
    P5OUT = 0xf7;       //4句初始化数码管的IO

有原理图可以知道,在P4.P5输出的时候是说明在第几位数码管上显示。

if(keyin != 0x0f)       //如果有键被按下,说明keyin中有低电平,进入语句中。
        {
            delay();            //延时消抖,人按键是个机械的过程,需要延时来解决,也可以减少硬件的弊端。
            if(keyin != 0x0f)   //再次检测按键状态
            {

    }

while(keyin != 0x0f);   //等待按键被放开,这相当于_nop()一个空语句,如果按键放开,keyin都是高,跳出,如果成立,则在WHILE语句里,说明按键没放开。

下面的程序也就是几种情况啦,用switch语句就可以解决。。。

 

还有一种方式是用中断的方式来读取四个独立式按键的键值还有解决一些其它问题。例如:

void main( void )
{  
    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
    BoardConfig(0x88);          //打开数码管,关闭流水灯和电平转换
    
    P1IES = 0x0f;               // P1.0~P1.3选择下降沿中断
    P1IE = 0x0f;                // 打开中断使能
    P1DIR = BIT7;               //设置P1.0~P.3为输入状态,P.7为输出
    P1OUT = 0;
    P4DIR = 0xff;
    P5DIR = 0xff;
    P4OUT = 0x3f;
    P5OUT = 0xf7;
    _EINT();                    //打开全局中断控制位
    while(1)
    {
        LPM1;
        P4OUT = scandata[KeyVal];
    }
}

至于4X4键盘,在51和AVR单片 机中讲的 也多啦,但是第一次看到板子是结合独立按键和矩阵键盘一起的 ,,日、、看来软件的功能是宇宙级别的呀。。。

相关文章
|
7月前
|
存储 监控 Go
【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式
【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式
107 0
|
7月前
|
数据采集 网络协议 安全
Bently Nevada 132417-01 输入/输出模块4通道监视器输入/输出模块体系触点 行程倍增 用于将3500架置于行程中的描述
Bently Nevada 132417-01 输入/输出模块4通道监视器输入/输出模块体系触点 行程倍增 用于将3500架置于行程中的描述
|
7月前
|
Linux C++ iOS开发
NI和EttusResearchUSRP设备之间的区别
NI和EttusResearchUSRP设备之间的区别
102 2
|
7月前
|
传感器 算法
LabVIEW开发无刷直流电机磁场定向控制器(FOC)/空间矢量控制器
LabVIEW开发无刷直流电机磁场定向控制器(FOC)/空间矢量控制器
67 2
|
7月前
|
监控
Parker COMPAX servo 数字伺服驱动器/控制器
COMPAX 系列数字伺服驱动器/控制器为要求苛刻的运动控制应用提供高功率解决方案,连续功率可达 35 千瓦/峰值功率可达 70 千瓦。它支持 120VAC - 460VAC 输入,具有用户友好的伺服管理器软件,可简化设置。COMPAX 可通过 ASCII、二进制或现场总线协议进行通信,并可通过可选升级和反馈设备满足特定需求。该系统提供用于单轴/多轴控制的独立选件或模块选件,包括套准、运动曲线和专用选件等高级功能。该系统可确保对电气问题和过热进行全面保护,并完全符合 CE 标准。它与各种无刷伺服电机兼容,并支持线性伺服电机。设计紧凑,配有 LED 显示屏,用于监控诊断和错误状态。
|
7月前
|
C语言
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
|
算法 芯片
METSO DPU-MR 映射工具寻址的最小功能单元
METSO DPU-MR 映射工具寻址的最小功能单元
152 0
METSO  DPU-MR 映射工具寻址的最小功能单元
|
芯片 内存技术
PM902F 3BDH001000R0005 具有完全独立的输入数据线
PM902F 3BDH001000R0005 具有完全独立的输入数据线
108 0
PM902F 3BDH001000R0005 具有完全独立的输入数据线
西门子S7-300开关量模块和模拟量模块通道地址如何分配?
根据机架上模块的类型,地址可以设定为输入I或输出O。数字量I/O模块每个槽占4个字节地址,也就是32个I/O点,1个字节8个位所以4个字节32个位。
西门子S7-300开关量模块和模拟量模块通道地址如何分配?
西门子S7-200 SMART PID回路控制,如何调用向导生成的子程序编程
在编程软件STEP7-Micro/WIN SMART的指令树中,展开调用子例程文件夹,选择初始化PID向导子程序拖放到主程序中,该子程序有多个接口参数,切换到该子程序窗口,程序注释中指出需要在每个扫描周期使用SM0.0从主程序中调用该子程序,变量表给出有关接口参数的含义和取值范围。
西门子S7-200 SMART PID回路控制,如何调用向导生成的子程序编程