1#include<msp430F169.h>
2 //自定义数据结构,方便使用
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define ulong unsigned long
6 /*
7 * 软件延时函数
8 */
9 #define CPU_F ((double)8000000) //外部高频晶振8MHZ
10 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
11 #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
12
13 /*
14 * 端口初始化
15 */
16 void Init_IO(){
17 P2SEL = 0x00;
18 P2DIR = 0xF0; //高4位为输出模式,低4位为输入模式
19 }
20 /*
21 * 键盘扫描
22 */
23 uchar key_scan(){
24 uchar a=1,s,count=1;
25 uchar value=0;
26 for(a=1;a<0x10;a<<=1){
27 P2DIR = 0xFF;
28 P2OUT = 0x00;
29 P2DIR=0x0f;
30 P2OUT=a;
31 if(P2IN!=a){
32 if(0x10&P2IN)
33 s=0;
34 if(0x20&P2IN)
35 s=1;
36 if(0x40&P2IN)
37 s=2;
38 if(0x80&P2IN)
39 s=3;
40 value=s*4+count;
41 }
42 count++;
43 }
44 return value;
45 }
46
47 /**
48 * 主函数
49 */
50 void main(void)
51 {
52 WDTCTL = WDTPW + WDTHOLD; //关看门狗
53 _DINT(); //关中断
54 Init_IO();
55 P6DIR = 0xff;
56 P6OUT = 0xff;
57
58 while(1){
59 if(key_scan()==0)
60 continue;
61 else
62 P6OUT = key_scan();
63 delay_ms(500);
64 }
65 }。