求430按键中断扫描程序

2019-03-24 15:53发布

中断,4*4的!求教! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
Feeling_atHome
1楼-- · 2019-03-25 03:07
 精彩回答 2  元偷偷看……
水货老手
2楼-- · 2019-03-25 08:28
< :TI_MSP430_内容页_SA7 --> 贴出来大家学习下嘛,高手!
彪悍的熊猫
3楼-- · 2019-03-25 12:47
只说说几个函数吧
首先把IO口初始化    设置好中断使能   是上升沿还是下降沿中断
一个按行扫描键值的函数     一个确定是否有按键按下的函数
然后中断里消抖    将键值保存在设置好的缓冲寄存器里   清除中断标志就行了
Evil维
4楼-- · 2019-03-25 15:07
 精彩回答 2  元偷偷看……
水货老手
5楼-- · 2019-03-25 16:02
怎么给分的?标个价,说个给分的方法,我给!
shelher
6楼-- · 2019-03-25 18:47
把我以前看过的给你一份了

/***********************************************
程序功能:扫描4X4键盘并将键值在数码管上显示
------------------------------------------------
跳线设置:将跳线座J3上的短路帽拔下
------------------------------------------------
测试说明:按动K1~K16按键,观察数码管显示,聆听
          按键时蜂鸣器是否发声
************************************************/
#include <msp430x16x.h>
#include "BoardConfig.h"
#include "Keypad.h"
#include "gdata.h"

/********************主函数********************/
void main(void)
{
   // uint i;
    BoardConfig(0x80);            //打开数码管、流水灯,关闭电平转换        
    WDTCTL = WDT_ADLY_1_9;        //设置内部看门狗工作在定时器模式,1.9ms中断一次
    IE1 |= WDTIE;                 //使能看门狗中断
  
    P2DIR = 0xff;
    P4DIR = 0xff;                 //设置P4,P5的IO方向为输出
    P5DIR = 0xff;  
    //P6DIR |= BIT7;
    P2OUT = 0xff;
    P4OUT = 0x00;                 //设置P4,P5的输出初值
    P5OUT = 0xff;
    P6OUT |= BIT7;
    _EINT();                      //打开全局中断
    Init_Keypad();
    while(1)
    {
        Key_Event();
   
        if(key_Flag == 1)
        {
            key_Flag = 0;
            Dispbuf[0] = key_val / 10;
            Dispbuf[1] = key_val % 10;
            P2OUT = ~(key_val);         //LED显示键值
            //P6OUT = 0;                  //蜂鸣器响一声
            //for(i = 2000; i > 0; i--);
            //P6OUT |= BIT7;
        }
    }
}
/*******************************************
函数名称:watchdog_timer
功    能:看门狗中断服务函数,在这里输出数码管的
          段选和位选信号
参    数:无
返回值  :无
********************************************/
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
    P5OUT = 0xff;
    P4OUT = scandata[Dispbuf[cnt]];         //输出段选信号
    P5OUT &= ~(1 << (cnt));               //输出位选信号
  
    cnt++;                                  //位计数变量在0~1之间循环
    if(cnt == 2) cnt = 0;
}

一周热门 更多>

相关问题

    相关文章