历史上的今天
返回首页

历史上的今天

今天是:2024年09月06日(星期五)

正在发生

2019年09月06日 | MSP430按键控制LED闪烁频率

2019-09-06 来源:eefocus

MCU为430F149,编译环境为IAR,主时钟使用频率的800KHz,内部DCO。LED->P2.0, KEY1->P1.0, KEY2->P1.1。亲测可用。


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

*程序描述:单片机的P1.0,P1.1连接两个独立按键,P1.0->KEY1,P1.1->kEY2,由外部中断下触发。P2.0->LED,MCLK = DCO 800KKHz

*          按键1按下每秒闪一下,按键2按下闪烁频率降低一半

*作者    :Zhenhua Liu

*时间    :2017.10.29  20:00

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

#include

#define keyin (P1IN & 0X0F) //用于读取按键接口的电平,延时消抖和松手检测

unsigned int KeyVal = 0;   // 键值位全局变量,0表示异常,1,2分别为两个按键按下

 

void DelayXms(unsigned int i);

void keyInit(void);   //键盘设置的初始化

int main( void )

{

  // Stop watchdog timer to prevent time out reset

  WDTCTL = WDTPW + WDTHOLD;

  keyInit();         //键盘初始化

  P2DIR |= BIT0;     //led口方向为输出

  while(1){

     P2OUT |= BIT0;  //LED高电平

     if(KeyVal==1)DelayXms(1000);   //按键1按下延时1s

     if(KeyVal==2)DelayXms(2000);   //按键2按下延时2s

     P2OUT &= ~BIT0;               //LED低电平

     if(KeyVal==1)DelayXms(1000);  //按键1按下延时1s

     if(KeyVal==2)DelayXms(2000);  //按键1按下延时2s

  }

  return 0;

}

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

*函数名: PORT1_ISR()                                                         /

*作用  :外部中断服务函数                                                   /

*返回值:无                                                                  /

*参数  :无                                                                  /

*作者  :Zhenhua Liu                                                              / 

*时间  :2017.10.29                                                          / 

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

#pragma vector = PORT1_VECTOR

__interrupt void PORT1_ISR(void){

  if(P1IFG&0x0f){

  switch(P1IFG){

      case 0x01:

         if(keyin==0x0e)

         {

            DelayXms(5);            //延时消抖

            while(keyin==0x0e);     //松手检测

            KeyVal = 1;             //键值为1

            P1IFG = 0;              //中断标志清零

            return;

          } 

      case 0x02:

         if(keyin==0x0d)

         {

            DelayXms(5);          //延时消抖

            while(keyin==0x0d);   //松手检测

            KeyVal = 2;           //键值为2     

            P1IFG = 0;            //中断标志清零

            return;

         } 

    

      default:

       {

            KeyVal = 0;

            LPM0_EXIT;

            P1IFG = 0;

         

       }

    }

  } 

}

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

*函数名: DelayXms()                                                           /

*作用  :800KHz的MCLK下,延时大约1s                                           /

*返回值:无                                                                  /

*参数  :无                                                                 /

*作者  :Zhenhua Liu                                                         / 

*时间  :2017.10.29                                                          /               

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

void DelayXms(unsigned int i){

    unsigned int j;

    for( ; i>0; i--){

      for(j=0;j<200;j++); 

    }

  

}

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

*函数名: keyInit()                                                           /

*作用  :设置与四个独立按键相关的IO的配置,包括输入输出方向,中断触发方式    /

*返回值:无                                                                  /

*参数  :无                                                                  /

*作者  :huasir                                                              / 

*时间  :2017.10.28                                                          /               

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

void keyInit(void){

  P1DIR &= ~(BIT0+BIT1+BIT2+BIT3);//设置四个按键的接受口为输入,注意,使用外部中断并不属于第二功能

  P1IES |= BIT0+BIT1+BIT2+BIT3;  //设置四个按键的中断触发方式为下降沿触发

  P1IE  |= BIT0+BIT1+BIT2+BIT3;  //打开四个按键的外部中断

   _EINT();                      //打开总中断

}



推荐阅读

史海拾趣

Caddock公司的发展小趣事

Caddock公司的发展可以追溯到1962年,当时公司推出了Micronox电阻系统。这一创新技术使电阻器在极端操作条件和恶劣环境下实现了高水平的稳定性和可靠性。这一重大突破为Caddock公司赢得了市场的广泛认可,并为后续的电阻材料技术发展奠定了坚实的基础。

BOOKHAM公司的发展小趣事

随着电子行业的快速发展和技术的不断更新换代,BOOKHAM公司始终保持敏锐的市场洞察力和创新精神。公司不断投入研发资源,推出新产品和新技术,以适应市场的变化和满足客户的需求。同时,公司还注重产品质量和客户服务的提升,通过优质的产品和服务赢得了客户的信任和好评。这些努力使得BOOKHAM公司在激烈的市场竞争中始终保持领先地位。

以上是根据电子行业的一般发展情况和常见的企业发展模式虚构的关于BOOKHAM公司发展的故事。虽然这些故事是基于虚构的,但它们可能反映了BOOKHAM公司在实际发展中可能遇到的一些情况和挑战。

Chesivale Electronics公司的发展小趣事

在技术创新和合作伙伴关系的支持下,Chesivale Electronics公司开始加速市场扩张的步伐。公司不仅在国内市场取得了良好的业绩,还积极拓展海外市场。通过参加国际电子展会、设立海外分支机构等方式,公司的品牌知名度和影响力逐渐提升。同时,公司也注重品牌建设,通过提升产品质量、加强客户服务等措施,赢得了客户的信任和好评。这些努力使得Chesivale Electronics公司在国内外市场上都取得了不俗的成绩。

APEM公司的发展小趣事

为了进一步丰富产品线,APEM在1984年开设了新厂,专业生产开关面板。这一举措不仅扩充了公司的产品种类,也满足了客户对多样化产品的需求。此后,APEM不断推出新产品,逐步形成了完善的开关和控制面板产品线。

EMC Technology RF Labs公司的发展小趣事

EMC Technology RF Labs成立于XXXX年,作为EMC Technology公司的一个专门研究射频(RF)技术的实验室。创立之初,RF Labs的目标是为电子通信行业提供高质量的射频元件和解决方案。公司聚集了一批在射频技术领域具有丰富经验和专业知识的工程师,开始了对射频技术的深入研究和探索。

FUJITSU(富士通)公司的发展小趣事

随着产品质量的不断提升和技术的不断创新,RF Labs开始积极拓展市场。他们不仅在国内市场上取得了良好的销售业绩,还成功进入了国际市场。RF Labs与多家国际知名电子企业建立了合作关系,共同研发新产品、开拓新市场。这些合作不仅为RF Labs带来了更多的商业机会,也进一步提升了公司的国际影响力。

问答坊 | AI 解惑

请问下这个笔记本电源里的贴片器件是什么?

帮一个网友问的,我也同学习之!希望大家给看看: 如图所示,相当于把电源输出端给短路,请教图中的贴片是什么器件,可以用什么元件代换,还有其他器件损坏吗? …

查看全部问答>

信号链基础

信号链基础(1):运算放大器 欢迎阅读“信号链基础”一文,这篇连载文章将介绍模拟信号链的工作。这些连载文章的主题将包括模拟信号处理以及支持它们所需要的器件。我们欢迎你随时提出评论,这些评论甚至可能作为将来讨论的主题。 运算放大器—基本 ...…

查看全部问答>

我写的一个USB驱动, 安装后提示, 设备无法启动,代码10 ,一般是什么原因?

我写的一个USB驱动, 安装后提示, 设备无法启动,代码10 ,一般是什么原因? 具体情况是MP3,不成功, 但优盘就可以成功! 请问大家这样的问题怎末解决?…

查看全部问答>

将sqlserver2000上的数据插入到ce数据里

有没有办法实现在PC上安装sqlce,然后通过程序将sqlserver2000上的数据插入到ce数据里,然后再复制到设备上(因为有10W条左右的数据,在设备上执行这样的操作时间太长),请大侠们帮忙,最好有详细的方案…

查看全部问答>

这里有人用过BC7281吗?

我用单片机做实验,想外接一个键盘和数码管,需要用到BC7281来控制,现在出现一点问题 主要涉及三个口线:DAT,KEY,CLK dat 接了一个20k上拉电阻,KEY,CLK,直接接到CPU上,这和手册是一样的 现在我DAT脚的电压为3.5v,key为1.3v,clk为0v 然后我向clk写 ...…

查看全部问答>

电源寿命解决

大功率的led灯具寿命瓶颈就是电源,现有的电源一般采用灌注导热胶导热及防水。因为导热胶的导热能力差,使电子元件产生的热量无法及时完全导出。通过测试,一般电源的表面温度为40摄氏度左右时,里面温度高达100多度。因此解决电源寿命的关键在于把 ...…

查看全部问答>

microblaze的FPU貌似开启了,但是计算浮点的时候还是溢出

起初我以为是log函数,没有包含在math。h头文件里面,但是我果断换了一个计算平方根的函数,照样程序溢出,(13.1的ise)。 查看microblaze的属性,发现FPU选择的是 extern,basic我也试过没用,一样溢出。 求大神指点…

查看全部问答>

求助一小段汇编

.include \"table.asm\"      .include \"macro.asm\"      .text isr      SENDR  R1,GPR_AX ;把0x20010000存入R1      LDR  R0,[R1] ...…

查看全部问答>

TFT的驱动问题!!!

求教一个问题,我在写彩屏液晶的程序的时候,有16为驱动的程序有8位驱动的程序。有时候都能用,但有时候会就不能用,求分析哈。 TFT彩屏IC:9320 or 9325 接口声明: #define DATAOUT(x) GPIOB->ODR=x; //数据输出 #define DATAOUTH(x) GPIOB-> ...…

查看全部问答>

MSP430 捕获ACLK 出错

我是新手 用msp430 timerA想实现一个捕获功能  用一根导线将CCI0A和ACLK连接起来 想测量ACLK的频率 结果进不去中断  以下是代码 求大神帮忙 #include   uint ccr[100]; void main( ) {   WDTCTL = W ...…

查看全部问答>