1525|0

1668

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

MSP430的非连续的IO并口输出矩阵键盘 [复制链接]

    在做msp430f5529的时候,发现没有那么多连续的IO口输出,只有一个P3是连续的8个口都有。所以我就想能不能使用不连续的IO口,就是取P2的高4位和P4的第四位来组成一组8个并口输出的控制扫描的矩阵键盘。因为我是新手嘛而且C语言基础也不是很好,所以代码写的比较繁琐,广大的网友看看就好图个乐呵。

//这个是代码的延迟函数

#include "MSP430F235.h"
typedef unsigned char uchar;
typedef unsigned int uint;
void delayms(uint ms)
{
  uchar i;
  while(ms--)
    for(i=0;i<123;i++);
}

```c
这个是代码
  uchar key,di,gao;
  uchar key_checkdiin;
  uchar key_checkgaoin;
  uchar key_checkin;
  uchar key_check;
  P4DIR=0x0f;
  P4OUT=0xf0;
  P2DIR=0x00;
  P2OUT=0xff;
  key_checkdiin=P4IN;
  key_checkdiin&=0x00;
  key_checkgaoin=P2IN;
  key_checkgaoin&=0xf0;
  key_checkin=key_checkdiin+key_checkgaoin;
//按键扫描函数

if(key_checkin!=0xf0)
  {
    delayms(10);
    key_checkdiin=P4IN;key_checkgaoin=P2IN;
    key_checkdiin&=0x00;  key_checkgaoin&=0xf0;
    key_checkin=key_checkdiin+key_checkgaoin;
     if(key_checkin!=0xf0)
    {
      P4OUT=0x0e;
      P2OUT=0Xf0;
      di=P4IN;gao=P2IN;
      di&=0x0f;gao&=0xf0;
      key_check=di|gao;
       switch(key_check)
      {
 case 0xee:key=15;break;
 case 0xde:key=11;break;
 case 0xbe:key=7;break;
 case 0x7e:key=3;break;
      }
        P4OUT=0x0d;
      P2OUT=0Xf0;
      di=P4IN;gao=P2IN;
      di&=0x0f;gao&=0xf0;
      key_check=di+gao;
 
      switch(key_check)
      {
 case 0xed:key=14;break;
 case 0xdd:key=10;break;
 case 0xbd:key=6;break;
 case 0x7d:key=2;break;
      }
       P4OUT=0xfb;
      P2OUT=0Xff;
      di=P4IN;gao=P2IN;
      di&=0x0f;gao&=0xf0;
      key_check=di+gao;
    
      switch(key_check)
      {
 case 0xeb:key=13;break;
 case 0xdb:key=9;break;
 case 0xbb:key=5;break;
 case 0x7b:key=1;break;
      }
      P4OUT=0x07;
      P2OUT=0Xf0;
      di=P4IN;gao=P2IN;
      di&=0x0f;gao&=0xf0;
      key_check=di+gao;
   
      switch(key_check)
      {
 case 0xe7:key=12;break;
 case 0xd7:key=8;break;
 case 0xb7:key=4;break;
 case 0x77:key=0;break;
      }
    }
  }
  else 
  {
    key=0xff;
    return key;
  }
  return key;
}
//控制lcd命令的代码
void w_com(uchar com)
{
  P6DIR=0x07;//0000 0111
  P6OUT=0x04;//0000 0100
  P1OUT=com;
  P6OUT=0x00;
  delayms(1);
}
void w_dat(uchar dat)
{  P6DIR=0x07;///设置P6的低三位输出
  P6OUT=0x05;//0000 0101
  P1OUT=data;///向lcd输出数据
 P6OUT=0x01;///0000 0001
  delayms(1);
}
void lcd_ini()
{
  delayms(10);
  w_com(0x38);
  delayms(10);
  w_com(0x0c);
  delayms(10); w_com(0x06);
  delayms(10);
  w_com(0x01);  delayms(10);
  w_com(0x38);
  delayms(10);
};
主函数以后更新

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表