求大神帮忙

[复制链接]
1253|9
 楼主| 1394592555 发表于 2014-7-21 14:55 | 显示全部楼层 |阅读模式
刚到公司,正在学习msp430,公司安排了个任务,用msp430f149做一个6*6的按键+5个LED灯(可控)+一个串口,比较简单但是现在还不会,求大神帮忙,
 楼主| 1394592555 发表于 2014-7-21 14:56 | 显示全部楼层
非常感谢
dirtwillfly 发表于 2014-7-21 20:36 | 显示全部楼层
有啥困难吗?
 楼主| 1394592555 发表于 2014-7-22 09:33 | 显示全部楼层
恩,困难大大的,关键是我还不会,在网上找的都是4*4的,还不会写6*6,所以现在基础很差,需要大神帮忙,写一个让我学习一下,完全自学,感觉入门有点难啊
smilingangel 发表于 2014-7-22 22:25 | 显示全部楼层
我还是觉得你先找MSP430单片机的技术支持的提供下开发历程的吧,这个很简单的啦。
houjiakai 发表于 2014-7-22 22:54 | 显示全部楼层
百度的
houjiakai 发表于 2014-7-22 22:54 | 显示全部楼层
网上没有方案吗
 楼主| 1394592555 发表于 2014-7-23 16:49 | 显示全部楼层
没有,都是4*4的而且好多弄不对
 楼主| 1394592555 发表于 2014-7-23 16:52 | 显示全部楼层
其实6*6的按键对照着4*4的写出来了但是我想通过两个数码管显示出来再加上串口,真不会啊,虚妄大神能帮助一下我这个小菜鸟
 楼主| 1394592555 发表于 2014-7-23 17:41 | 显示全部楼层
  1. #include <msp430x14x.h>
  2. typedef unsigned char uchar;
  3. typedef unsigned int uint;   /***************全局变量***************/
  4. uchar key_pressed; //按键是否被按下:1--是,0--否
  5. uchar key_val;//存放键值
  6. uchar key_flag;//按键是否已放开:1--是,0--否
  7. uchar key_map[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
  8. /*******************************************
  9. 函数名称:Init_Keypad
  10. 功 能:初始化扫描键盘的IO端口
  11. 参 数:无
  12. 返回值 :无
  13. ********************************************/
  14. void Init_Keypad(void)
  15. {
  16.   P1DIR=0X3f;  //P1.0-P1.5设置为输出
  17.   P1OUT |=0X3f;  //置P1.0-P1.5为高电平
  18.   P2DIR=0XC0;    //P2.6-P2.7设置为输出
  19.   P2OUT |=0XC0;  //置P2.6-P2.7为高电平
  20.   key_flag=0;
  21.   key_pressed=0;
  22.   key_val=0;
  23. }
  24. /*******************************************
  25. 函数名称:Check_Key
  26. 功 能:扫描键盘的IO端口,获得键值
  27. 参 数:无
  28. 返回值 :无
  29. ********************************************/
  30. void check_key(void)
  31. {
  32.   uchar row,col,tmp1,tmp2;
  33.   tmp1=0x20;
  34.   for(row=0;row<6;row++)  //行扫描
  35.   {
  36.     P1OUT=0X3F;   //P1.0-P1.5全输出1
  37.     P1OUT -=tmp1; //P10-P1.5输出六位中有一个为0
  38.     tmp1>>=1;
  39.     if((P2IN&0X3F)<0X3F)  //是否P2IN的P2.0-P2.5中有一个为0
  40.     {
  41.       tmp2=0x01;  //tmp2用于检测出哪一位为0
  42.    for(col=0;col<6;col++)
  43.    {
  44.      if((P2IN&tmp2)==0x00)
  45.      {
  46.        key_val=key_map[row*6+col];
  47.        return;
  48.      }
  49.      tmp2<<=1;
  50.    }
  51.     }
  52.   }
  53. }
  54. /*******************************************
  55. 函数名称:delay
  56. 功 能:延时约15ms,完成消抖功能
  57. 参 数:无
  58. 返回值 :无
  59. ********************************************/
  60. void delay()
  61. {
  62.   uint tmp;
  63.   for(tmp=12000;tmp>0;tmp--);
  64. }

  65. /*******************************************
  66. 函数名称:Key_Event
  67. 功 能:检测按键,并获取键值
  68. 参 数:无
  69. 返回值 :无
  70. ********************************************/

  71. void key_event(void)
  72. {
  73. uchar tmp;
  74. P1OUT&=0X00;  //设置P1OUT全是0,等待按键输入
  75. tmp=P2IN;  //获取P2IN
  76. if((key_pressed==0x00)&&((tmp&0x3f)<0x3f))
  77. {
  78.   key_pressed=1;
  79.   delay();
  80.   check_key();
  81. }
  82. else if((key_pressed==1)&&((tmp&0x3f)==0x3f))
  83. {
  84.   key_pressed=0;
  85.   key_flag=1;
  86. }
  87. else
  88. {
  89.   _NOP();
  90. }
  91. }
  92.    


这样改能实现6*6么?大神帮忙看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部