历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2020年01月09日 | MSP430矩阵及独立键盘

2020-01-09 来源:eefocus

  在学习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单片 机中讲的 也多啦,但是第一次看到板子是结合独立按键和矩阵键盘一起的 ,,日、、看来软件的功能是宇宙级别的呀。。。

推荐阅读

史海拾趣

问答坊 | AI 解惑

请高手帮助分析这个电路,

file:///C:/Documents%20and%20Settings/Administrator/桌面电路输入为峰峰值为500mv左右的正旋波频率是70Hz左右(分E1E2两路),E0为接地端,在E1出输入正弦波,经过几级放大(U3用的是LM258P,U4用的是LM119)后在E7最右端(经上拉电阻后接单片机 ...…

查看全部问答>

如何区分系统中扩展的存储器是程序存储器还是数据存储器

如何区分系统中扩展的存储器是程序存储器还是数据存储器…

查看全部问答>

关于AT^SCFG命令问题,望高手指点

AT^SCFG中可以进行URC destination interface 设置。以下为发送命令格式: Write Command Configure URC destination interface: AT^SCFG=\"URC/DstIfc\"[, ] Response(s) ^SCFG: \"URC/DstIfc\", OK ERROR +CME ERROR URC destination i ...…

查看全部问答>

一个奇怪的问题,关于ADS里程序的运行速度,以及RAM,FLASH中的运行速度

我用的是三星的44b0,最近在调系统响应时间的时候发现怪问题 同样一段普通循环程序在三种情况下的运行时间不一样,我的44b0主频为64M,程序大致如下 开定时器 for(i=0;i…

查看全部问答>

STM32 USB 使用同一個ENDP連續發送IN data

各位前輩們,請問有人做過在同個end point下連續發送data的經驗嗎?我知道在發完一個data之後,會進到isr也就是EPx_IN_Callback()裡,目前我的做法是在Send data之後,設定一個flag variable = 1, 之後就在main loop裡while等到前一個data傳完之後 ...…

查看全部问答>

基于AD7280A的电池管理系统(DIY完成)

   为时两个多月的ADI实验室电路DIY已经过去大半了,只剩下最后的几天时间了,我的《基于AD7280A的电池管理系统》也接近尾声,在这两个月的时间里,我从了解adi实验电路到最终制作pcb和调试,都得到了EEWORLD网友和版主的大力支持,尤其 ...…

查看全部问答>

电路设计漫谈之你练到了第几层?

小熊在一些网站上发现了一些比较好的博文,比方说:电路设计漫谈就是一个比较好的博文,笔者收集的电路设计漫谈共有10篇,笔者会陆续定期推出每一篇,暂定为每周至少有一篇,有兴趣而且觉得对自己有意义的就可以坚持看笔者的博文。现在开始进入我们 ...…

查看全部问答>

磁卡的工作原理和其识别的原理是怎么样的

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 磁卡的工作原理和其识别的原理是怎么样的 前些天对磁卡产生了好奇,在网上搜索相关的识别原理图以及控制电路图似乎没找到什么。请问哪位能指点指点?假如对商品条码的识别相关的条码扫描器 ...…

查看全部问答>

【课程推荐】开关电源设计——PCB热管理

EEworld大学堂上线了一门新的电源课程:《PCB 热管理》。本课程介绍了电源设计中的一个重要环节:PCB热设计。介绍了PCB热设计中常见的概念,术语和半导体器件中常用热参数的含义。着重介绍了管理热性能的方法,并以实例的方式给出了设计指引和建议 ...…

查看全部问答>