找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1480|回复: 0
打印 上一主题 下一主题
收起左侧

430F5XXX单片机中断按键不能用的问题

[复制链接]
跳转到指定楼层
楼主
ID:386326 发表于 2018-8-14 21:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*
  2. P1.5  0 K5
  3. P1.7  0 K6
  4. P2.0  0 K1
  5. P2.2  0 K2
  6. P2.3  0 K3
  7. P2.5  0 K4

  8. P4.2 1 LED0 1
  9. P4.3 1 LED2 2
  10. P4.4 1 LED3 3
  11. P4.5 1 LED5 4
  12. P4.6 1 LED6 5
  13. P4.7 1 LED8 6
  14. */
  15. typedef unsigned char uchar;
  16. typedef unsigned int  uint;
  17. int main(void)
  18. {
  19.     WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

  20.     P1DIR &= ~(BIT7+BIT5); //P1.7 P1.5设置为输入
  21.     P1IFG &= ~(BIT7+BIT5); //P1.7 P1.5初始化清空中断标志位
  22.     P1IE |= (BIT7+BIT5);  //P1.7 P1.5中断使能
  23.     P1IES |= (BIT7+BIT5); //P1.7 P1.5下降沿产生中断
  24.     P1OUT |= (BIT7+BIT5); //P1.7,P1.5设置输出为高
  25.     P1REN |= (BIT7+BIT5); //P1.7,P1.5设置为上拉电阻

  26.     P2DIR &= ~(BIT0+BIT2+BIT3+BIT5); //P2.0 P2.2 P2.3 P2.5设置为输入
  27.     P2IFG &= ~(BIT0+BIT2+BIT3+BIT5); //初始化清空中断标志位
  28.     P2IE |= (BIT0+BIT2+BIT3+BIT5); //P2.0 P2.2 P2.3 P2.5中断使能
  29.     P2IES |= (BIT0+BIT2+BIT3+BIT5); //P2.0 P2.2 P2.3 P2.5下降沿产生中断
  30.     P2OUT |= (BIT0+BIT2+BIT3+BIT5); //P2.0 P2.2 P2.3 P2.5设置为上拉电阻:OUT = 1; REN = 1;
  31.     P2REN |= (BIT0+BIT2+BIT3+BIT5);
  32.     P4DIR|=0xfc;    //led输出
  33.     P4OUT =0x00;    //初始化输出值,
  34.     __enable_interrupt();
  35.     while(1);
  36. }

  37. #pragma vector = PORT1_VECTOR     //固定格式,声明中断向量地址,不能变
  38. __interrupt void LED(void) //函数名,可以任意定义
  39. {
  40. switch(__even_in_range(P1IV,18))
  41. {
  42. case 0x10:

  43.           if ((P1IN & BIT7) == 0) //P1 BIT7 K6 正常
  44.           P4OUT ^= BIT7;          //P2 BIT7 LED6
  45.           break;
  46. case 0x80:

  47.           if ((P1IN & BIT5) == 0) //P1 BIT5 K5 不能用
  48.           P4OUT ^= BIT6;          //P4 BIT6 LED5
  49.           break;
  50. default:
  51.           //P4OUT |=~(BIT6+BIT7);
  52.           break;
  53. }
  54. }
  55. #pragma vector = PORT2_VECTOR          //固定格式,声明中断
  56. __interrupt void fuck430(void)                  //函数名,可以任意定义
  57. {
  58.      switch(__even_in_range(P2IV,18))
  59.          {
  60.      case 0x01:

  61.           if ((P2IN & BIT0) == 0) //P2 BIT0 K1 不能用
  62.           P4OUT ^= BIT2;          //P4 BIT2 LED1
  63.           break;
  64.      case 0x04:

  65.           if ((P2IN & BIT2) == 0) //P2 BIT2 K2 不能用
  66.           P4OUT ^= BIT3;          //P4 BIT3 LED2
  67.           break;
  68.      case 0x08:

  69.           if ((P2IN & BIT3) == 0)      //P2 BIT3 K3 有效
  70.           P4OUT ^= BIT4;               //P4 BIT4 LED3
  71.           break;
  72.     case 0x20:

  73.           if ((P2IN & BIT5) == 0) //P2 BIT5 K4 不能用
  74.           P4OUT ^= BIT5;          //P4 BIT5 LED4
  75.           break;
  76.          default:

  77.                    break;
  78.          }
  79. }

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表