MSP430单片机按键程序

发布者:吾道明亮最新更新时间:2018-01-29 来源: eefocus关键字:MSP430  单片机  按键程序 手机看文章 扫描二维码
随时随地手机看文章

MSP430单片机按键程序

#include  
#include "key.h" 

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 > 0;i--) ;//延时一点时间 

int KeyProcess(void) 

    int nP10; 
    int nP11; 
    int nP12; 
    int nP13; 
    int nRes = 0; 
    //P1.4输出低电平 
    P1OUT &= ~(BIT4); 
    nP10 = P1IN & BIT0; 
    if (nP10 == 0) nRes = 13; 
    nP11 = (P1IN & BIT1) >> 1; 
    if (nP11 == 0) nRes = 14; 
    nP12 = (P1IN & BIT2) >> 2; 
    if (nP12 == 0) nRes = 15; 
    nP13 = (P1IN & BIT3) >> 3; 
    if (nP13 == 0) nRes = 16; 
    //P1.5输出低电平 
    P1OUT &= ~(BIT4); 
    nP10 = P1IN & BIT0; 
    if (nP10 == 0) nRes = 9; 
    nP11 = (P1IN & BIT1) >> 1; 
    if (nP11 == 0) nRes = 10; 
    nP12 = (P1IN & BIT2) >> 2; 
    if (nP12 == 0) nRes = 11; 
    nP13 = (P1IN & BIT3) >> 3; 
    if (nP13 == 0) nRes = 12; 
    //P1.6输出低电平 
    P1OUT &= ~(BIT4); 
    nP10 = P1IN & BIT0; 
    if (nP10 == 0) nRes = 5; 
    nP11 = (P1IN & BIT1) >> 1; 
    if (nP11 == 0) nRes = 6; 
    nP12 = (P1IN & BIT2) >> 2; 
    if (nP12 == 0) nRes = 7; 
    nP13 = (P1IN & BIT3) >> 3; 
    if (nP13 == 0) nRes = 8; 
    //P1.7输出低电平 
    P1OUT &= ~(BIT4); 
    nP10 = P1IN & BIT0; 
    if (nP10 == 0) nRes = 1; 
    nP11 = (P1IN & BIT1) >> 1; 
    if (nP11 == 0) nRes = 2; 
    nP12 = (P1IN & BIT2) >> 2; 
    if (nP12 == 0) nRes = 3; 
    nP13 = (P1IN & BIT3) >> 3; 
    if (nP13 == 0) nRes = 4; 

    P1OUT = 0x00;//恢复以前值。 

    //读取各个管脚的状态 
    nP10 = P1IN & BIT0; 
    nP11 = (P1IN & BIT1) >> 1; 
    nP12 = (P1IN & BIT2) >> 2; 
    nP13 = (P1IN & BIT3) >> 3; 
    for(;;) 
    { 
        if(nP10 == 1 && nP11 == 1 && nP12 == 1 && nP13 == 1) 
        { 
            //等待松开按键 
            break; 
        } 
    } 
    return nRes; 

// 处理来自端口 1 的中断 
#if __VER__ < 200 
    interrupt [PORT1_VECTOR] void PORT_ISR(void) 
#else 
    #pragma vector=PORT1_VECTOR 
    __interrupt void PORT_ISR(void) 
#endif 

    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 


key.h

void Init_CLK(void);
int KeyProcess(void);
void Delay(void);
int KeySCAN(void);
void Init_Port(void);


关键字:MSP430  单片机  按键程序 引用地址:MSP430单片机按键程序

上一篇:MSP430单片机按键中断程序
下一篇:基于TMS320C6x11系列DSP的图像获取方案

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

基于单片机控制的ADF4106锁相频率合成器设计
0 引言 在现代电子技术的设计与开发过程中,特别是在通信、雷达、航空、航天以及仪器仪表等领域,都需要进一步提高一系列高精度、高稳定度的频率源的频率精度。这样,一般的振荡器已经无法满足各种应用的发展要求,而晶体振荡器的性能虽然比较好,但其频率单一,或只能在极小的范围内进行微调。因此,本文提出了一种基于单片机AT89C2051控制的、利用锁相技术、以ADI公司生产的频率合成器芯片AD4106为核心,来实现锁相频率合成器的设计方案。 1 系统结构原理 该锁相频率合成器的具体实现结构如图1所示。本系统由频率合成器AD4106、环路滤波器、压控振荡器、晶体振荡器以及参考分频器和程序分频器共同构成锁相环路(PLL)。该环路输入端由高稳定度和高
[单片机]
基于<font color='red'>单片机</font>控制的ADF4106锁相频率合成器设计
详细介绍单片机应用技术的进展及动向
单片机在集成度、功能、性能、体系结构方面都有了飞速发展,开关电源模块已能集成一个完整的功能强大、性能优良的计算机应用系统。但目前国内许多MTD2002单片机应用单位仍停留在采用片内无ROM等低档单片机的状态,无论在MTD2002系统设计上、使用维护上、经济效益上这都是不合算的。这种状况必须改变。本文就开关电源模块单片机的发展现状进行综述,希望能对提高国内单片机技术的应用水平有所促进。   1 单片机的硬件   单片微型计算机,简称单片机,是微型计算机的一个分支。它是在一块开关电源模块芯片上集成(嵌入)了CPU、RAM和ROM存储器、I/O接口等而构成的微型计算机。因主要用于工业测控领域,故又称为微控制器或嵌入式控制器。单片
[单片机]
详细介绍<font color='red'>单片机</font>应用技术的进展及动向
单片机最小系统设计
单片机最小系统特点:系统资源完全开放,配合其它模块板或自行搭建用户电路可实现任意实验功能。接口设计灵活,使用方便(适合创新实践活动)。板上电路简洁实用,除最小系统和在线下载电路外,还有1个LED、1个按键、1个蜂鸣器、1片EEPROM存储器AT24C04(使用时只需设置相关调线),单片机引脚全部可引出使用,并留有专用LED显示接口方便与串行静态LED显示板连接。 配套模块: 串行静态LED显示板 4X4矩阵键盘 普通AD/DA转换板(ADC0832串行8位+DAC0832并行8位) 通用LCD接口板(可直接连用ATM1602B、ATM12864D、WG320240B等型号液晶显示器)
[单片机]
<font color='red'>单片机</font>最小系统设计
单片机实现喷油泵转速和提前角的高精度测量
1引言 喷油提前角是指发动机在运转中,喷油嘴向气缸开始喷油的瞬时(以喷油嘴针阀升起为标志)到活塞行至上止点时的曲轴转角。在使用中用供油提前角来代替。由于柴油机喷油泵凸轮驱动装置的磨损,提前角会发生变化。另外,发动机气缸套、活塞磨损或曲轴、连杆瓦在镗修或更换后,也会使提前角偏离正常燃烧所要求的值。因此,发动机在使用中,喷油提前角需要经常检查或调整。高精度测量提前角的值是准确调整的关键。本文介绍的用单片机测量提前角的方法,具有测量精度高、范围宽、简单的特点。 2测量原理 在试验台电机的主轴上和喷油泵分别固定一个光电传感器,光脉冲由光电电路转换成电脉冲,分别用N1和N2表示。8051单片机定时/计数器0设置为工作方式2,
[单片机]
<font color='red'>单片机</font>实现喷油泵转速和提前角的高精度测量
基于单片机的指纹门禁设计
功能: 研究内容:本课题以单片机为核心采用C语言来开发一指纹电子密码锁。系统拟在Altium Designer9开发平台上设计原理图,并绘制PCB并制成单片机开发板,然后根据原理图将相关元器件焊接到开发板上。软件部分在Keil uVision4开发平台上进行相关代码的编写和调试。然后利用串口助手工具将代码下载到开发板进行运行,观察硬件各模块是否可以正常运行。以及测试结果是否能够满足需求,便于及时调整设计。  课题的主要任务是设计出一个可以录入指纹,并可对录入指纹进行匹配比较,如果正确即可开锁。 设置有管理员密码,管理员密码内置不可修改,密码具有掉电存储功能。 输入管理员密码后进入指纹录制模式,录入自己的指纹 录制成功后,支持
[单片机]
PIC单片机引脚中断程序设计技巧
所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。三是,
[单片机]
基于单片机的车载超级电容测试系统设计
伴随着科技的进步,电动汽车技术得到迅速的发展,相比内燃机汽车,电动汽车具有零排放、高性能效率、低噪声、低热辐射、易操纵和易维护等优点,将是未来汽车发展的方向,也是现行研究的热点。 电动汽车的动力电池有如下三类:燃料电池、蓄电池和超级电容。燃料电池、蓄电池和超级电容在能量密度和功率密度上有互补性 。单一使用蓄电池、绕料电池或者超级电容,难以用作电动汽车的动力源。混合电池是一比较理想的解决方法,采用混合电池驱动系统,特别利用超级电容快速充放电能实现汽车制动能量回收,以及燃料电池超大能量密度支持汽车持久行驶,使得燃料电池/超级电容组成的混合驱动系统成为电动车驱动的最佳方案 。 对于车载用电源,为达到较高功率和能量,超级电容往往采用多块
[单片机]
基于<font color='red'>单片机</font>的车载超级电容测试系统设计
C8051F与80C51系列单片机的不同初始化对比
1 引言 近30年来,世界各主要电子元器件生产厂商纷纷推出自己各具特色的单片机产品。而在百花齐放的单片机家族中,80C5l系列一直扮演着重要的角色。该单片机在教学、科研等领域已经成为入门单片机并成为单片机应用的首选,该产品以其易读性好、扩展能力强而著称,从而成为广大从事单片机开发者最熟悉、最具代表的机型。但人们往往在熟悉80C51单片机之后又选择别的系列单片机开发产品,这是因为80C51具有运算速度慢、功耗大、内部资源少等不足,所以限制了其使用范围。Cygnal公司推出的C805lF系列单片机既弥补了80C51系列的不足,又与MCS—5l指令集兼容。C805lFxxx系列单片机是完全集成的混合信号系统级芯片,具有与8051指令
[单片机]
C8051F与80C51系列<font color='red'>单片机</font>的不同初始化对比
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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