MSP430 按键程序范例(附原理图)

发布者:平稳心绪最新更新时间:2016-08-15 来源: eefocus关键字:MSP430  按键程序 手机看文章 扫描二维码
随时随地手机看文章
#i nclude

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
}

MSP430 按键程序范例(附原理图) - 流水无痕 - 流水的博客

MSP430 按键程序范例(附原理图) - 流水无痕 - 流水的博客

MSP430 按键程序范例(附原理图) - 流水无痕 - 流水的博客

关键字:MSP430  按键程序 引用地址:MSP430 按键程序范例(附原理图)

上一篇:MSP430F14-直接IO口按键检处理程序
下一篇:msp430精确测低频

推荐阅读最新更新时间:2024-03-16 15:05

基于MSP430FW427的无磁水表设计方案
  1 MSP430FW42x单片机介绍   MSP430FW42x系列单片机是TI公司针对电子式流量与旋转运动检测最新开发的专用MCU芯片,它将超低功耗MCU、旋转扫描接口(SCAN IF)和液晶显示LCD驱动模块完美地结合在一起。该器件的超低功耗结构和流量检测模块不仅延长了电池的寿命,同时还提高了仪表的精度与性能。MSP430FW42x的典型应用包括热量仪表、热水和冷水仪表、气体仪表和工业流量计、风力计以及其他旋转检测应用。   2 流量测量的原理   2.1 基本原理   一个由叶轮或螺旋齿轮构成的机械装置把流体流动转换为转动,这种转换能够实现对流体流量的测量。   把一个谐振回路中的电感置于叶轮的上方可以检测到叶轮
[单片机]
基于<font color='red'>MSP430</font>FW427的无磁水表设计方案
MSP430单片机比较器A模块
首先,整个比较器A的工作必需由CAON位置为1时才能工作的,此位属CACTL1控制寄存器。单片机上电时此位是为0的,也就是说比较器是不工作的。 以下大概讲述几个部分电路的功能和一些相关信息。 模拟输入电路: 外部模拟引脚信号CA0,CA1(正负端)可以分别由P2CA0,P2CA1位控制开或关。经过软件的设置可以分别与内部的几个基准电压进行比较(0.5VCC,0.25VCC,三极管门值电压)或外部其中的电压进行比较。 应用的硬件比较可以分为以下三种组合: 两个外部引脚输入信号进行比较 其中一个外部引脚信号与内部的0.5VCC或0.25VCC比较 其中一个外部引脚信号与内部基准电压比较 参考电压发生器 参考电压电路是可以由CARS
[单片机]
MSP430——AD10的DTC问题
今晚终于把MSP430单片机的AD10的连续转换调试出来了。 AD单通道单次转换一次是没有问题的。 ADC10CTL0 = SREF_1+ADC10SHT_2 + REFON+ADC10ON+ ADC10IE ; ADC10AE0 |= 0x40; ADC10CTL1 = INCH_6; ADC10CTL0 |= ENC + ADC10SC; 设置AD转换,选择通道6,使能通道6的模拟输入,及一些相关信息。最后开启AD转换。 接下来尝试AD单通道连续转换。 ADC10CTL0|=SREF_0+ADC10SHT_2+MSC+ADC10IE+ADC10ON; ADC10CTL1|=INCH_6+SHS_0+ADC10SS
[单片机]
MSP430按键中断
#include msp430f149.h typedef unsigned char uchar; typedef unsigned int uint; #define keyin (P1IN & 0X0F) #define wei_h P5OUT |= BIT5 #define wei_l P5OUT &= BIT5 #define duan_l P6OUT &= ~BIT6 #define duan_h P6OUT |= BIT6 uchar table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
[单片机]
裸奔程序之外部中断检测按键
开发环境:ADS1.2 实验实验功能:在TQ2440开发板上,利用外部中断模式检测按键是否按下, 如果某按键被按下则点亮对应某个LED。 #include 2440addr.h #include option.h //这个文件中定义了中断服务程序的起始地址 #define LED1_ON (rGPBDAT &=~(1 5)) #define LED1_OFF (rGPBDAT |=(1 5) ) #define LED2_ON (rGPBDAT &=~(1 6)) #define LED2_OFF (rGPBDAT |=(1 6)) #defin
[单片机]
裸奔<font color='red'>程序</font>之外部中断检测<font color='red'>按键</font>
如何在FreeRTOS下实现低功耗——MSP430F5438平台
0.前言 MCU实现低功耗本质而言便是停止MCU工作,通过中断的方式重新唤醒MCU,这些中断可以包括外部IO中断,UART接收中断,定时器中断等等。如果结合嵌入式操作系统,可以在空任务或者空任务钩子函数中进入低功耗模式,在系统滴答时钟中断服务函数中重新回到正常工作模式。利用操作系统进入和退出低功耗模式,需要熟悉嵌入式操作系统的空任务和系统滴答时钟中断,下面结合MSP430F5438和FreeRTOS总结一下如何使用嵌入式操作系统实现低功耗工作。 1.进入低功耗模式 多数嵌入式操作系统都包含一个空任务,空任务优先级最低且一直保持就绪状态,空任务可以用于统计CPU使用率,或者让MCU进入低功耗状态。如果不想修改空任务,还可
[单片机]
如何在FreeRTOS下实现低功耗——<font color='red'>MSP430</font>F5438平台
基于MSP430的数据采集系统设计
1 引 言 在科学研究及其他各种领域中,数据采集和监测已经成为日益重要的检测技术。 在许多工业测控机械、医疗仪器以及消费电子产品中,都对数据采集系统的实时性与功耗提出了更高的要求:即在满足微功耗、微型化的总体设计原则的基础上,又要能实时反映现场采集数据的变化。这就对系统的功耗、采样速度、数据存储和传输速度等提出了更高的要求。然而,随着半导体与微控制器技术的飞速发展,各种微电子器件性能不断提升,功耗却不断降低。技术的进步使得高速度、低功耗的数据采集系统得以实现。 本文设计的数据采集与显示系统采用TI公司研制的MSP430系列超低功耗单片机作为核心控制元件,实现了数据的高速采集与显示。 系
[单片机]
基于<font color='red'>MSP430</font>的数据采集系统设计
采用MSP430设计的12位心电(ECG)放大器
作者Email: newtonian@263.net 摘要:本文介绍了心电放大器的基本电路构成,以及采用TI公司的MSP430系列单片机对心电信号进行模数转换处理的方法,还着重探讨了采用带硬件乘法器的MSP430F14X系列单片机对心电信号进行滤波处理的方法,并给出了相应的实验结果。 人体心肌产生的电信号传导到体表之后,由于在体表分布的不同而产生电位差,将这种电压只有mV级别的电位差放大并绘制成图,就得到了心电图(ECG)。心电图在心血管疾病的临床诊断中有非常重要的作用。通常采用的心电图按照导联数分有单导联,三导联,五导联以及十二导联等等;按照精度分常用的有8位和12位精度等等。单导联,精度低的心电图常用于进行心电监控以及心
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved