注册 登录
查看: 476|回复: 10

[智能车] 利用小液晶的五向按键产生中断。

[复制链接]
发表于 2014-3-18 13:22:40 | 显示全部楼层 |阅读模式
我想利用小液晶的五向按键的中间的那个确定键(PTD13)产生中断,但是按照PORT_KEY例程编写的不对啊,请同学们帮我找一下错误。另外,这个五向按键的中断触发方式是哪种啊?选择上拉电阻还是下拉电阻啊?谢谢了!这是我的程序。

  1. #include "common.h"
  2. #include "include.h"


  3. void PORTD_IRQHandler(void);        //PORTD端口中断服务函数
  4. void key_handler(void);             //按键按下的测试中断复位函数

  5. void main()
  6. {
  7.     printf("\n*****按键测试*****\n");
  8.     led_init(LED0);

  9.     port_init(PTD13, ALT1 | IRQ_FALLING | PULLUP );          //初始化 PTD7 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻

  10.     set_vector_handler(PORTD_VECTORn ,PORTD_IRQHandler);    //设置PORTE的中断复位函数为 PORTE_IRQHandler
  11.     enable_irq (PORTD_IRQn);                                //使能PORTE中断

  12.     while(1)
  13.     {
  14.         //disable_irq(PORTD_IRQn);
  15.     }
  16. }

  17. void PORTD_IRQHandler(void)
  18. {
  19.     PORT_FUNC(D,13,key_handler);
  20. }

  21. void key_handler(void)
  22. {
  23.     led_turn(LED0);
  24. }
回复

使用道具 举报

发表于 2014-3-18 13:41:20 | 显示全部楼层
  1. void PORTD_IRQHandler(void)
  2. {
  3.     PORT_FUNC(D,13,key_handler);
  4. }
没有加清中断标志位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-22 21:50:52 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-18 13:41
没有加清中断标志位

我不是用的PIT定时中断应该不用清中断标志位吧?
回复 支持 反对

使用道具 举报

发表于 2014-3-22 21:51:35 | 显示全部楼层
CC2014 发表于 2014-3-22 21:50
我不是用的PIT定时中断应该不用清中断标志位吧?

PORT 的IO中断,也需要清中断标志位的啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-22 21:54:53 | 显示全部楼层
韦嘉淑 发表于 2014-3-22 21:51
PORT 的IO中断,也需要清中断标志位的啊

请教教我吧!怎样写代码呢?谢谢了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-22 22:10:30 | 显示全部楼层
本帖最后由 CC2014 于 2014-3-22 22:11 编辑
山外メ雲ジ 发表于 2014-3-18 13:41
没有加清中断标志位
  1. void PORTD_IRQHandler()
  2. {
  3.   uint8  n = 0;    //引脚号

  4.     //PTD13
  5.     n = 13;
  6.     if(PORTD_ISFR & (1 << n))           //PTD13触发中断
  7.     {
  8.         PORTD_ISFR  = (1 << n);        //写1清中断标志位
  9.         key_handler();
  10.     }
  11. }
搞了两天了啊!求指点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-22 22:15:39 | 显示全部楼层
韦嘉淑 发表于 2014-3-22 21:51
PORT 的IO中断,也需要清中断标志位的啊

请问这个对吗?

  1. void PORTD_IRQHandler()


  2. 02.{


  3. 03.  uint8  n = 0;    //引脚号


  4. 04.


  5. 05.    //PTD13


  6. 06.    n = 13;


  7. 07.    if(PORTD_ISFR & (1 << n))           //PTD13触发中断


  8. 08.    {


  9. 09.        PORTD_ISFR  = (1 << n);        //写1清中断标志位


  10. 10.        key_handler();


  11. 11.    }


  12. 12.}
回复 支持 反对

使用道具 举报

发表于 2014-3-22 22:21:31 | 显示全部楼层
CC2014 发表于 2014-3-22 22:10
搞了两天了啊!求指点

这样子可以啊,有什么问题呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-22 22:31:39 | 显示全部楼层
危隽洁 发表于 2014-3-22 22:21
这样子可以啊,有什么问题呢?

PTD13为小液晶的中间的OK键。我预想的是按下OK键(PTD13),触发中断。LED0反转状态。但是小灯没有任何改变啊!但是如果用PTD7确按照预想的反转。不知道是不是配置PTD13出现错误。
回复 支持 反对

使用道具 举报

发表于 2014-3-22 22:34:55 | 显示全部楼层
CC2014 发表于 2014-3-22 22:31
PTD13为小液晶的中间的OK键。我预想的是按下OK键(PTD13),触发中断。LED0反转状态。但是小灯没有任何改 ...

中断里设个断点,看看能不能进中断
回复 支持 反对

使用道具 举报

发表于 2014-3-23 09:29:16 | 显示全部楼层
危隽洁 发表于 2014-3-22 22:34
中断里设个断点,看看能不能进中断

进不了啊!我感觉是我的小液晶的按键配置的不准确。你用的是山外的小液晶吗?你用山外的小液晶写的中断时怎么样的啊?
回复 支持 反对

使用道具 举报

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

本版积分规则

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