写一个键控LED亮灭程序,没看规格书,还以为Launchpad坏了,用手一摸键控区域,LED就亮;
没办法,翻翻规格书,原来电容触摸原理,尽管没怎么整明白;打开上拉电阻就能正常键控了;
#include <msp430g2553.h>
#define uint unsigned int
#define uchar unsigned char
void Delay_ms(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
{
for(j=0;j<143;j++)
{;}
}
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR|=0x41;//p1.6,p1.0 set outpin
P1REN|=BIT3;
P1OUT|=0x09;//p1.3,p1.1 set hight
while(1)
{
if(!(0x08&P1IN))
{
Delay_ms(20);
if(!(0x08&P1IN))
{
P1OUT=0x08;Delay_ms(500);//p1.6 set hight
}
}
else P1OUT=0x48;
}
}
星期天无聊翻了翻MSP430G系列的数据手册,找了半天没找到CPU的时序图;想想该实现定时器的基本操作了;
一个按键按一下2HZ输出,不按1HZ输出,2分钟后无操作转入低功耗模式;
还很菜啊,智力有限,高级的都还不会用;
#include <msp430g2553.h>
#define uint unsigned int
#define uchar unsigned char
uchar TimeS_count=0;uchar TimeM_count=0;
uchar Key_value=0;uchar Min_flag=0;
void Delay_ms(uint time)
{
uint i,j;
for(i=time;i>0;i--)
{
for(j=250;j>0;j--)
{;}
}
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
IE1|=WDTIE;
P1DIR=BIT6+BIT0;
P1OUT|=BIT3;
P1REN|=BIT3;
WDTCTL=WDT_MDLY_32;
_EINT();
while(1)
{
if(Min_flag==2)LPM4;
if(!(0x08&P1IN))
{
Delay_ms(20);
if(!(0x08&P1IN))
{
Key_value++;
Min_flag=0;
TimeS_count=0;TimeM_count=0;
if(Key_value==2)
{
Key_value=0;
Min_flag=0;//Min_flag++;
}
}
}
}
}
#pragma vector=WDT_VECTOR
__interrupt void watchdog_time(void)
{
TimeS_count++;
switch(Key_value)
{
case 0:
{
if(TimeS_count==15)//500ms interrupt
{
TimeS_count=0;
P1OUT^=BIT0;
TimeM_count++;
if(TimeM_count==120)//60s interrupt
{
TimeM_count=0;
P1OUT^=BIT6;
Min_flag++;
}
}
}break;
case 1:
{
if(TimeS_count==7)//250ms interrupt
{
TimeS_count=0;
P1OUT^=BIT0;
TimeM_count++;
if(TimeM_count==240)//60s interrupt
{
TimeM_count=0;
P1OUT^=BIT6;
Min_flag++;
}
}
}break;
default:break;
}
}
|