msp430 按键 中断 轮询

发布者:SparklingEyes最新更新时间:2020-02-06 来源: eefocus关键字:msp430  按键  中断  轮询 手机看文章 扫描二维码
随时随地手机看文章

msp430 数码管 key 中断 轮询


仿真见我的上传资源


/******************************************************************

* 实验名称:IO特性(MSP430F249) 

*        

* 实验说明:

* 通设置系统主时钟(MCLK=8Mhz ) 、辅助时钟(ACLK=8Mhz )、

* 子系统时钟(SMCLK=8Mhz )

* 编译软件:Embedded Workbench 5.3  

******************************************************************/ 

#include

#define uchar unsigned char

#define uint unsigned int

 

void delayms();

uchar key = 0;

uchar   table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

 

uchar   key_table[4][4] = { 1,2,3,4,

           5,6,7,8,

  9,10,11,12,

13,14,15,16};  //  键值编码,对应一个4×4 矩阵

uchar  position[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar  num_table[8]= {0,0,0,0,0,0,0,0};

uchar  row_table[4]= {0xef,0xdf,0xbf,0x7f};

void show(uchar pos,uchar num)

{

P4OUT  = 0x00;   // tobe all turn off 

P6OUT |= 0x40;   // DUAN 1

P4OUT  = table[num];  //DUAN NUM

P6OUT &= 0XBF;   // DUAN 0

        P4OUT  = 0XFF;

P5OUT |= 0X20;

P4OUT &= position[pos];

        P5OUT &= 0XDF;

 

}

 

uchar key_scan(int num)

{

uchar line = 0,temp = 0;

P1OUT = row_table[num];

temp = P1IN&0x0f;

if(temp != 0x0f)

{

delayms(10);

temp =P1IN&0x0f;

if(temp != 0x0f)

{

while(temp ==0x0f){temp =P1IN&0x0f;} //wait button off

switch(temp)

{

case 0x0e:  line = 0;break;

case 0x0d:  line = 1;break;

case 0x0b:  line = 2;break;

case 0x07:  line = 3;break;

}

          

return key_table[num][line];

}

      

return 0;

}

        

return 0;

}

 

uchar Key_scan()

{

 uchar i=0;

  i = key_scan(0); if(i != 0) return i;

  i = key_scan(1); if(i != 0) return i;

  i = key_scan(2); if(i != 0) return i;

  i = key_scan(3);

  return i;

}

 

void delayms(uint t)

{

    uint i;

    while(t--)

      for(i=1330;i>0;i--);//进过参数的调整 

}

 

 

 

 

void main(void)

{

uchar i=0,key1=0;

    P1DIR = 0XFF;P1OUT = 0XFF;

    P2DIR = 0XFF;P2OUT = 0XFF;

    P3DIR = 0XFF;P3OUT = 0XFF;

    P4DIR = 0XFF;P4OUT = 0XFF;

    P5DIR = 0XFF;P5OUT = 0XFF;

    P6DIR = 0XFF;P6OUT = 0XFF;

 

    P6DIR |= 0X40;   // p6^6 output

    P5DIR |=0X20;    // P5^5 OUTPUT

    P4DIR  = 0XFF;   //  P4 OUTPUT

    P1SEL = 0;       //  

    P1DIR = 0xF0;    //p1.0--p1.3 IN ,p1.4--p1.7 OUT

    P1OUT |= 0XF0;  

    P1IE |= 0x08;

    P1IES |= 0X08;

   // P1IFG &= ~0x08;

    _EINT();

    WDTCTL=WDTPW + WDTHOLD; // 关闭看门狗

  

/*while(1)

    {

          show(0,key);

          delayms(10);

       //按键中断测试程序   

    }*/

 

   /*轮询按键测试程序 

    while(1)

    {

     i = key_scan(0); 

     if(i!=0) key1 = i;

     show(0,key1);

    }*/

}

 

 

 

 

#pragma vector = PORT1_VECTOR

__interrupt void PORT1_ISR(void)

{

  

  key++;

  if(key == 9) key = 0;

  P1IFG &= ~0x08;  

  return ;

  

}

关键字:msp430  按键  中断  轮询 引用地址:msp430 按键 中断 轮询

上一篇:msp430的中断优先级和中断嵌套(及容易理解错误的说明)
下一篇:MSP430F5438中断函数两种编写方法

推荐阅读最新更新时间:2024-11-11 04:47

基于低成本单芯片微处理器的高稳健性破损玻璃检测器解决方案
引言 破损玻璃检测器 (GBD) 主要用来检测家庭住宅或商业楼宇门窗玻璃的破损情况。GBD 也可归类为一种监控设备,用以提高家庭或商业环境的安全性,避免非法进入。GBD 既可独立工作,也可与其它防盗设备协同工作,形成一套完整的安全系统。GBD 的基本工作原理就是捕获各种声音,并对其进行分析,然后报告玻璃是否破碎。基于这种工作模式,GBD的性能很大程度上取决于声源音质,这对设计人员提出了诸多挑战。此外,GBD 必须排除各种非真正玻璃破碎发出的声音,这种可能触发虚假玻璃破碎警报的声音事件就是误报警。本文将介绍一种采用低成本微处理器 (MCU) 的高效、稳健可靠的 GBD 设计方案。 MCU 属于低端处理器,广泛用于简单
[单片机]
基于低成本单芯片微处理器的高稳健性破损玻璃检测器解决方案
51单片机3个外部中断中断响应编程举例
某系统有3个外部 中断 源1、2、3,当某一中断源变为低电平时,便要求CPU进行处理,它们的优先处理次序由高到低依次为3、2、1,中断处理程序的入口地址分别为1000H,1100H,1200H。试编写主程序及中断服务程序(转至相应的中断处理程序的入口即可)。 答:若仅在/INT0引脚接3个外部中断源 ORG 0000H LJMP MAIN ORG 0003H LJMP INT_EX0 ORG 0030H MAIN: CLR IT0 ; 采用低电平有效中断
[单片机]
stm32 中断函数名称表
stm32 中断服务函数的名称有点特别,它们的名称是固定的, 但是表面看起来又好像没什么规律, 还是老办法,写下来死记了。 WWDG_IRQHandler PVD_IRQHandler TAMPER_IRQHandler RTC_IRQHandler FLASH_IRQHandler RCC_IRQHandler EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler DMA1_Channel1_IRQHandler DMA1_Channel2_IRQHan
[单片机]
stm8s跳出中断程序c语言,STM8S I2C总线中断程序
/*========================================================================================================== 本源程序文件内部使用的一些操作指令的宏定义 ==========================================================================================================*/ /*-----------------------------------------------------------------------------
[单片机]
PIC877a定时器、中断系统总结
简介:PIC877a定时器、中断系统总结:定时,计数从其内部工作方式分析一般表现为计数累加功能,通常是由特定的时钟脉冲来触发驱动。PIC16F877单片机有14个中断源,每个中断源都可配置有一个中断使能位(IE)和一个中断标志位(IF)。 1.定时器:(3个TMR0,TMR1,TMR2) TMR0,8位位累加定时、计数寄存器,并带有预分频器。若考虑预分频器的效果,其固有定时为65ms。如果用作通用计数器,可采用外部T0CK1作为计数触发信号。 与TMR0相关的寄存器:TMR0(初始值),OPTION_REG(选择项寄存器T0CS,T0SE,PSA,PS2~PS0),INTCON(中断控制寄存器:GIE,T0IE,T0I
[单片机]
MSP430f5529——点阵LCD测试小程序
#include msp430.h #include HAL_Buttons.h #include HAL_Board.h #include HAL_Dogs102x6.h void main(void) { uint8_t contrast ; uint8_t brightness ; WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 Dogs102x6_init(); //初始化LCD Dogs102x6_backlightInit(); //背光初始化 contrast = 11; brightness = 11; Dogs102x6_setBacklight(brightness); //设置初始背光
[单片机]
8951定时器的定时中断模式
定时器的使用与我之前所说的中断使用差不多。首先也是设置初始化定时器。先上代码: #include reg52.h #define uchar unsigned char #define uint unsigned int sbit led=P1^0; sbit s1=P3^0; sbit s2=P3^1; uchar counter=0; uchar temp=0; uchar flag=0; code uchar a ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(uint t) { uint i; while(t--) { f
[单片机]
STM32GPIO外部中断总结
简介: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。 1 STM32中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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