4291|8

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

三个独立键盘的程序很好用哦、、 [复制链接]

#include
#define key1 0x01
#define key2 0x02
#define key3 0x04
#define key_1 0x01      //定义返回键值1
#define key_2 0x02     //定义返回键值2
#define key_3 0x04     //定义返回键值3
void key_process_0(void);
void key_process_1(void);
void key_process_2(void);
void key_check (void);
unsigned char key_value;          //定义键值全局变是
//*************************************************************************
void main(void)
{
      WDTCTL = WDTPW + WDTHOLD;              // 停止看门狗
          P1DIR |= BIT0+BIT6; // 设置P1.1和P1.6为输出
             //  P1OUT |= BIT0;//关LED
               P2OUT|=BIT0+BIT1+BIT2;             //P2.0-P2.2上拉电阻
               P2REN|=BIT0+BIT1+BIT2;             //使能P2.0-P2.2的上拉电阻
                  P2IE |= BIT0+BIT1+BIT2;               // P2.0-P2.2 IO口中断使能
                  P2IES |= 0x07;                        // P2.0-P2.2 IO口边沿触发中断方式设置
                  P2IFG &= ~(key1+key2+key3);           // P2.0-P2.2 IO口中断标志位清除
                  _EINT();                              //中断允许
          while(1);

}
//*************************************************************************
//P2中断服务程序
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
          if(0xff !=(P2IFG & 0xff))
                                                                  __delay_cycles(10000);
                                                          if(0xff !=(P2IFG & 0xff))
                                                              {                 key_value=P2IFG;
                                                                                          switch (key_value)                //对键值进行处理.采switch语法结构查询
                                                                                                  {
                                                                                                                   case key_1:  key_process_0() ;      //调用键处理程序1
                                                                                                                                          break;
                                                                                                                   case key_2:  key_process_1();      //调用键处理程序2
                                                                                                                                          break;
                                                                                                                   case key_3: key_process_2();      //调用键处理程序2
                                                                                                                                          break;
                                                                                                                   default:   break;
                                                                                                  }
                                                                                          //P2IE |= BIT0+BIT1+BIT2;            // P2.0-P2.2 IO口中断使能
                                                                                          P2IFG &= ~(key1+key2+key3);                   // P2.0-P2.2 IO口中断标志位清除
                                                                   }

}
//*************************************************************************
void key_process_0(void)          //值处理,用户可以自己修改...
{

        P1OUT = BIT0 ;
}
void key_process_1(void)        //值处理,用户可以自己修改...
{

        P1OUT = BIT6;
}
void key_process_2(void)      //值处理,用户可以自己修改...
{

        P1OUT = BIT0 +BIT6;
}

最新回复

三个IO中断的处理方法,430的IO中断标准用法,学习了  详情 回复 发表于 2014-4-4 07:54
 
点赞 关注

回复
举报

10

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

好。。。。。

好  真需要。。。。
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

板凳
 
三个IO中断的处理方法,430的IO中断标准用法
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

4
 
void key_check (void);函数在哪里啊?没看到啊?
 
 
 

回复

4008

帖子

0

TA的资源

版主

5
 
给你几点修正意见:
(1)  __delay_cycles(10000);   这个放在中断服务里影响其它部分的实时性
(2)void key_process_0(void)          //值处理,用户可以自己修改...
{        P1OUT = BIT0 ;}
一按键一个函数对应的想法有问题,因为程序庞大了这个按键程序会变得很复杂以至于非常混乱。比如三键置数时有时用来上下选择有时用来计数加减(千位十位百位个位)同时还要复合长按键判断等等,这么写会疯掉了。
(3)按键未见得一定用中断,因为按键一般晚处理个几百毫秒也感觉不会出来。
(4)有长按功能和复合按键判断最好了。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

6
 
process好。。。。。
好  真需要。。。。
 
个人签名学习是一件快乐的事
 
 

回复

125

帖子

0

TA的资源

纯净的硅(中级)

7
 
正好参考一下
 
 
 

回复

139

帖子

0

TA的资源

一粒金砂(高级)

8
 
中断方式使用,很爽,反应足够快。
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

9
 
三个IO中断的处理方法,430的IO中断标准用法,学习了
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表