搜索
bottom↓
回复: 1

MSP430 矩阵键盘 if函数问题

[复制链接]

出0入4汤圆

发表于 2014-2-14 20:51:36 | 显示全部楼层 |阅读模式
  我写的矩阵键盘的程序有个问题
int KeyProcess()
{
  int nRes = 0;;

  //判断S1~S4
  P1OUT = 0xe0;
  if (m10IN == 0)         我按下了这个对应按键 ,我一步一步仿真到这边了,这条语句也执行了为真
    nRes = 1;            然后就执行了这条语句,这条语句执行完之后我发现  监视里面  nRes  是个无效的值   压根没有赋值,  最后nRes 的值是到最后没有按键按下的时候通过  else  赋值为0。请叫各位大神这是个什么情况   (我先没有用中断做)
                           







#include "io430.h"
#define led20 P2OUT_bit.P0
#define led21 P2OUT_bit.P1
#define led22 P2OUT_bit.P2
#define m10IN P1IN_bit.P0
#define m11IN P1IN_bit.P1
#define m12IN P1IN_bit.P2
#define m13IN P1IN_bit.P3

#define m14OUT P1OUT_bit.P4
#define m15OUT P1OUT_bit.P5
#define m16OUT P1OUT_bit.P6
#define m17OUT P1OUT_bit.P7

void Delay();
void int_port();
int KeyScan();
int KeyProcess();
void Display(int i);

/******************************************
延时函数
*******************************************/
void Delay(void)
{
  unsigned int i;
  for(i=0;i<100;i++);
  
}



/******************************************
显示函数
*******************************************/
void Display(int i)
{
  int j;
  for(j=i;j>0;j--)
  {
    led20 = 0;
    led21 = 0;
    led22 = 0;
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    led20 = 1;
    led21 = 1;
    led22 = 1;
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
    Delay();
  }
  
  return;
  
}



/******************************************
端口初始化
*******************************************/
void int_port()
{  
  P1SEL = 0;  //将P1设置成IO口功能
  P1DIR = 0x00;
  P1DIR = 0xf0;  //将P1.0 1.1 1.2 1.3 设置成输入IO,将1.4 1.5 1.6 1.7设置成输出方向
  P1OUT = 0x00;
  
  P2SEL = 0;
  P2DIR = 0x07;
  P2OUT = 0x07;
  
  
  return ;
  
}




/******************************************
键盘扫描程序
*******************************************/
int KeyScan()
{
  int nRes = 0;
  P1OUT = 0x00;
  for(;;)
  {
    //读取各个管脚的状态
    if(m10IN == 0 || m11IN == 0 || m12IN == 0 || m13IN == 0)//检测是否有按键按下
    {
      break;
      
    }   
  }
  
  Delay();
  
  if(m10IN == 0 || m11IN == 0 || m12IN == 0 || m13IN == 0)//检测是否有按键按下
    {
      
      nRes = KeyProcess();
      
    }   
  else return -1;
  
  return nRes;
  
  
}




/******************************************
键盘分析程序
*******************************************/
int KeyProcess()
{
  int nRes = 0;;

  //判断S1~S4
  P1OUT = 0xe0;
  if (m10IN == 0)
    nRes = 1;
  if (m11IN == 0)
    nRes = 2;
  if (m12IN == 0)
    nRes = 3;
  if (m13IN == 0)
    nRes = 4;


  //判断S5~S8
   P1OUT = 0xd0;
  if (m10IN == 0)
    nRes = 5;
  if (m11IN == 0)
    nRes = 6;
  if (m12IN == 0)
    nRes = 7;
  if (m13IN == 0)
    nRes = 8;

  
  
  //判断S9~S12
  P1OUT = 0xb0;
  if (m10IN == 0)
    nRes = 9;
  if (m11IN == 0)
    nRes = 10;
  if (m12IN == 0)
    nRes = 11;
  if (m13IN == 0)
    nRes = 12;
  

  
  //判断S13~S16
   P1OUT = 0x70;
  if (m10IN == 0)
    nRes = 13;
  if (m11IN == 0)
    nRes = 14;
  if (m12IN == 0)
    nRes = 15;
  if (m13IN == 0)
    nRes = 16;
  else nRes = 0;
  P1OUT = 0x00;
  
  
  //按键释放
  for(;;)
  {
     if (m10IN == 1 && m11IN == 1 && m12IN == 1 && m13IN == 1)
     {
       break;
     }
   
  }

   Display(nRes);
  

  
  return nRes;
  
  
}

int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
  BCSCTL1 = 0x47;  //最高时钟
  BCSCTL2 = 0x80;  
  int_port();
  
  while(1)
  {
    KeyScan();
  }
  
  
  return 0;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入4汤圆

 楼主| 发表于 2014-2-14 22:55:21 | 显示全部楼层
受字数限制   我删除了  函数的声明 和一些注释
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 21:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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