收藏 分销(赏)

MSP430_4x4阵列按键程序.doc

上传人:pc****0 文档编号:7796941 上传时间:2025-01-17 格式:DOC 页数:5 大小:39KB 下载积分:10 金币
下载 相关 举报
MSP430_4x4阵列按键程序.doc_第1页
第1页 / 共5页
MSP430_4x4阵列按键程序.doc_第2页
第2页 / 共5页


点击查看更多>>
资源描述
MSP430 4x4阵列按键程序 作者:cxjr  摘自:匠人的百宝箱      采用P1口4x4阵列参考电路       例程: //***************************************************************************** #include <msp430x14x.h> //***************************************************************************** //IO初始化程序 void Init_Port(void) {     //将P1口所有的管脚在初始化的时候设置为输入方式     P1DIR = 0;       //将P1口所有的管脚设置为一般I/O口     P1SEL = 0;         // 将P1.4 P1.5 P1.6 P1.7设置为输出方向     P1DIR |= BIT4;     P1DIR |= BIT5;  P1DIR |= BIT6;     P1DIR |= BIT7;  //先输出低电平  P1OUT = 0x00;  // 将中断寄存器清零     P1IE = 0;     P1IES = 0;     P1IFG = 0;     //打开管脚的中断功能  //对应的管脚由高到低电平跳变使相应的标志置位     P1IE |= BIT0;     P1IES |= BIT0;     P1IE |= BIT1;     P1IES |= BIT1;  P1IE |= BIT2;     P1IES |= BIT2;     P1IE |= BIT3;     P1IES |= BIT3;  _EINT();//打开中断     return; } void Delay(void) {  int i;  for(i = 100;i--;i > 0) ;//延时一点时间 } //***************************************************************************** //键处理程序 int KeyProcess(void) {     int nP10,nP11,nP12,nP13;  int nRes = 0;  //P1.4输出低电平  P1OUT &= ~(BIT4);  nP10 = P1IN & BIT0;  if (nP10 == 0) nRes = 13;  nP11 = P1IN & BIT1;  if (nP11 == 0) nRes = 14;  nP12 = P1IN & BIT2;  if (nP12 == 0) nRes = 15;  nP13 = P1IN & BIT3;  if (nP13 == 0) nRes = 16;  //P1.5输出低电平  P1OUT &= ~(BIT4);  nP10 = P1IN & BIT0;  if (nP10 == 0) nRes = 9;  nP11 = P1IN & BIT1;  if (nP11 == 0) nRes = 10;  nP12 = P1IN & BIT2;  if (nP12 == 0) nRes = 11;  nP13 = P1IN & BIT3;  if (nP13 == 0) nRes = 12;  //P1.6输出低电平  P1OUT &= ~(BIT4);  nP10 = P1IN & BIT0;  if (nP10 == 0) nRes = 5;  nP11 = P1IN & BIT1;  if (nP11 == 0) nRes = 6;  nP12 = P1IN & BIT2;  if (nP12 == 0) nRes = 7;  nP13 = P1IN & BIT3;  if (nP13 == 0) nRes = 8;  //P1.7输出低电平  P1OUT &= ~(BIT4);  nP10 = P1IN & BIT0;  if (nP10 == 0) nRes = 1;  nP11 = P1IN & BIT1;  if (nP11 == 0) nRes = 2;  nP12 = P1IN & BIT2;  if (nP12 == 0) nRes = 3;  nP13 = P1IN & BIT3;  if (nP13 == 0) nRes = 4;  P1OUT = 0x00;//恢复以前值。  //读取各个管脚的状态  nP10 = P1IN & BIT0;  nP11 = P1IN & BIT1;  nP12 = P1IN & BIT2;  nP13 = P1IN & BIT3;  for(;;)  {   if(nP10 == 1 && nP11 == 1 && nP12 == 1 && nP13 == 1)   {    //等待松开按键    break;   }  }  return nRes; } //***************************************************************************** // 处理来自端口 1 的中断 interrupt [PORT1_VECTOR] void PORT_ISR(void) {  Delay();  KeyProcess();     if(P1IFG & BIT0)     {          P1IFG &= ~(BIT0);// 清除中断标志位     }     if(P1IFG & BIT1)     {      P1IFG &= ~(BIT1);// 清除中断标志位     }     if(P1IFG & BIT2)     {      P1IFG &= ~(BIT2);// 清除中断标志位     }  if(P1IFG & BIT3)     {      P1IFG &= ~(BIT3);// 清除中断标志位     } } //***************************************************************************** //时基初始化程序 void Init_CLK(void) {   unsigned int i;   BCSCTL1 = 0X00;   //将寄存器的内容清零   //XT2震荡器开启   //LFTX1工作在低频模式   //ACLK的分频因子为1         do     {  IFG1 &= ~OFIFG;                       // 清除OSCFault标志  for (i = 0x20; i > 0; i--);                     }     while ((IFG1 & OFIFG) == OFIFG);      // 如果OSCFault =1             BCSCTL2 = 0X00;   //将寄存器的内容清零     BCSCTL2 += SELM1;  //MCLK的时钟源为TX2CLK,分频因子为1     BCSCTL2 += SELS;  //SMCLK的时钟源为TX2CLK,分频因子为1 }  
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服