[资料分享] MSP430单片机矩阵键盘驱动LED

Aguilera   2019-11-9 17:00 楼主

 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 }。

回复评论

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