历史上的今天
今天是: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(); //打开总中断 }
上一篇:msp430ADC程序
下一篇:MSP430F149按键检测程序
史海拾趣
|
帮一个网友问的,我也同学习之!希望大家给看看: 如图所示,相当于把电源输出端给短路,请教图中的贴片是什么器件,可以用什么元件代换,还有其他器件损坏吗? … 查看全部问答> |
|
我写的一个USB驱动, 安装后提示, 设备无法启动,代码10 ,一般是什么原因? 我写的一个USB驱动, 安装后提示, 设备无法启动,代码10 ,一般是什么原因? 具体情况是MP3,不成功, 但优盘就可以成功! 请问大家这样的问题怎末解决?… 查看全部问答> |
|
有没有办法实现在PC上安装sqlce,然后通过程序将sqlserver2000上的数据插入到ce数据里,然后再复制到设备上(因为有10W条左右的数据,在设备上执行这样的操作时间太长),请大侠们帮忙,最好有详细的方案… 查看全部问答> |
|
我用单片机做实验,想外接一个键盘和数码管,需要用到BC7281来控制,现在出现一点问题 主要涉及三个口线:DAT,KEY,CLK dat 接了一个20k上拉电阻,KEY,CLK,直接接到CPU上,这和手册是一样的 现在我DAT脚的电压为3.5v,key为1.3v,clk为0v 然后我向clk写 ...… 查看全部问答> |
|
microblaze的FPU貌似开启了,但是计算浮点的时候还是溢出 起初我以为是log函数,没有包含在math。h头文件里面,但是我果断换了一个计算平方根的函数,照样程序溢出,(13.1的ise)。 查看microblaze的属性,发现FPU选择的是 extern,basic我也试过没用,一样溢出。 求大神指点… 查看全部问答> |
|
求教一个问题,我在写彩屏液晶的程序的时候,有16为驱动的程序有8位驱动的程序。有时候都能用,但有时候会就不能用,求分析哈。 TFT彩屏IC:9320 or 9325 接口声明: #define DATAOUT(x) GPIOB->ODR=x; //数据输出 #define DATAOUTH(x) GPIOB-> ...… 查看全部问答> |
|
我是新手 用msp430 timerA想实现一个捕获功能 用一根导线将CCI0A和ACLK连接起来 想测量ACLK的频率 结果进不去中断 以下是代码 求大神帮忙 #include uint ccr[100]; void main( ) { WDTCTL = W ...… 查看全部问答> |




