[原创] 【MSP430共享】 MC430F224例程:Keys+LED演示

hangsky   2011-9-6 23:44 楼主
【例  程】:
//基于MC430F224开发板实验例程
//软件:IAR Embedded Workbench Version: 3.42A
//编写:微控设计网 www.Microcontrol.cn DC
//目标板: MC430F224开发板 V1.0
#include "msp430x22x4.h"

//初级用户要习惯采用宏定义,以方便的编写和修改
#define keyio 0xf1 //定义按键IO口,所有键口为0.
#define key_1 0xfd //定义返回键值1
#define key_2 0xfb //定义返回键值2
#define key_3 0xf7 //定义返回键值3
#define LED_D1_flash P1OUT ^= BIT1
#define LED_D2_flash P1OUT ^= BIT2
#define LED_D3_flash P1OUT ^= BIT3
#define bell_delay 7000 

//声明子程序
unsigned char key_chcek(void);
void display_update(unsigned char dta);
void key_process_0(void);
void key_process_1(void);
void key_process_2(void);

//*************************************************************************
//将单片机初始化程序放在main()前面是方便查看单片机的初始化状态情况.
void MCU_int(void)
{//默认MCLK主时钟频率为DCO=~800K
 P1OUT |= BIT1+BIT2+BIT3; //设置LED,上电为灭.电路可以查看MC430F14电路图.
 P1DIR |= BIT1+BIT2+BIT3; //P1.1设置为输出.

//MSP430单片机IO口上电默认方向为输入,所以接按键的IO无需再设为输入.
}

//*************************************************************************
void main (void)
{ unsigned char key_value; //定义键值全局变是
 WDTCTL = WDTPW + WDTHOLD; //关狗
 MCU_int(); //初始化单片机 
while(1) //主程序主循环
{
 key_value=key_chcek(); //检测,有键按下并松开,返回一个键值.
switch (key_value) //对键值进行处理.采switch语法结构查询
{
 case key_1: key_process_0(); //调用键处理程序1
 break;
 case key_2: key_process_1(); //调用键处理程序2
 break; 
 case key_3: key_process_2(); //调用键处理程序2
 break;
 default: ; //调用键处理程序4
 break; 
 }

 display_update(key_value); //如果有需要可以在这里加上显示更新程序.
 key_value=0x00; //最后清除键值.将继续主循环.
 }
}

//*************************************************************************
//按键检测程序
//返回值: 无符号字符型键值
unsigned char key_chcek(void)
{
 unsigned int i;
 unsigned char timp,active;
 active=0;
while(!active)
 {
 while(0xff ==( P2IN | keyio)); //一直等待有键按下
 timp = P2IN | keyio; //若有键接下了,则读入IO状态.
 for(i=0;i<7000;i++); //延时,是为了去按键抖动.
 if (timp ==(P2IN | keyio)) //经延时后,还是那键吗?
 { active = 1; //是,则按键有效.
 while(0xff !=( P2IN | keyio)); //一直等待按键松开
 }
else
  {  //去按键抖动后读入的键值与之前不同.则先效.
  active = 0; //再循环检测.
  }
 }
 return timp; //返回一个键值.
}

//*************************************************************************
void key_process_0(void) //值处理,用户可以自己修改...
{
 LED_D1_flash;
}
//*************************************************************************
void key_process_1(void) //值处理,用户可以自己修改...
{
 LED_D2_flash;
}
//*************************************************************************
void key_process_2(void) //值处理,用户可以自己修改...
{
 LED_D3_flash;
}
//*************************************************************************
void display_update(unsigned char dta) 
{
 ; //用户可以根据需要来放置显示程序,如LCD,LED,Digital-LED....
 //灵活应用,
}
//************************************************************************ 

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复