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 }
【人生没有白走的路,每一步都算数!】

浙公网安备 33010602011771号