1326|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

MSP430单片机矩阵键盘驱动LED [复制链接]

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

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表