// // MC430F224 // ----------------- // /|| | // | | | // --|RST in1 |--~^~-------|GND KEY1 1 // | in2 |--~^~-------|GND KEY2 // | in3 |--~^~-------|GND KEY3 // | | // | out1 |------|<|---|Vcc D1 LED // | out2 |------|<|---|Vcc D2 LED // | out3 |------|<|---|Vcc D3 LED // //************************MC430F224******************************************** #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.... //灵活应用, } //*************************************************************************
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>