001:独立键盘的测试——键盘控制LED状态

 1 #include <msp430f169.h>
 2 #define uint unsigned int
 3 #define uchar unsigned char
 4 uchar key;
 5 /*
 6  * 软件延时
 7  */
 8 #define CPU_F ((double)8000000)   //外部高频晶振8MHZ
 9 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
10 #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
11 /*
12  * 关闭看门狗
13  */
14 void init_WDT()
15 {
16     WDTCTL = WDTPW + WDTHOLD;//关看门狗
17 }
18 /*
19  * IO端口配置
20  */
21 void init_IO(){
22     P6DIR = 0xff;
23     P1DIR &=~BIT0;
24 }
25 /*
26  * 时钟初始化
27  */
28 void init_clk(){
29     uchar i;
30     BCSCTL1 &=~XT2OFF;
31     BCSCTL2 |=SELM1+SELS;
32     do{
33         IFG1 &=~OFIFG;
34         for(i=0;i<100;i++){
35             _NOP();
36         }
37     }while((IFG1&OFIFG)!=0);
38     IFG1 &=~OFIFG;
39 }
40 /*
41  * 扫描按键
42  */
43 uchar Key_Scan(void){
44     if((P1IN&0x0f)!=0x0f){
45         delay_ms(5);
46         if((P1IN&0x01)==0)
47             key=1;
48         if((P1IN&0x02)==0)
49             key=2;
50         if((P1IN&0x04)==0)
51             key=3;
52         if((P1IN&0x08)==0)
53             key=4;
54         while((P1IN&0x0f)!=0x0f);
55     }
56     return key;
57 }
58 /*
59  * 主函数
60  */
61 void main(){
62     init_WDT();
63     init_clk();
64     init_IO();
65     while(1){
66         key=5;
67         Key_Scan();
68         switch(key)
69         {
70         case 1: P6OUT =0xfe;break;
71         case 2: P6OUT =0xfd;break;
72         case 3: P6OUT =0xfb;break;
73         case 4: P6OUT =0xf7;break;
74         }
75 
76     }
77 
78 }

 【人生没有白走的路,每一步都算数!】

posted @ 2018-09-17 12:15  xiaobingzzh  阅读(202)  评论(0)    收藏  举报