智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12820|回复: 6
打印 上一主题 下一主题

用按键控制LED灯的程序(有问题)

[复制链接]

2

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
95
威望
59
贡献
20
兑换币
23
注册时间
2014-2-22
在线时间
8 小时
毕业学校
上海交通大学
跳转到指定楼层
1#
发表于 2014-2-25 21:08:46 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
void main(void) {
     unsigned char k;
      k=0;
     DDRH=0x0;    //定义H口的数据方向寄存器为输入   
     PERH_PERH0=1;
     PERH_PERH1=1;        //上拉电阻使能
  if(PTH_PTH0==0) {    //PH0为低电平时表示S1被按下
    delay(10);   //延时10ms   //消抖
    if(PTH_PTH0==0) {
      k=1;
    }
  }
  else if(PTH_PTH1==0) { //PH1为低电平时表示S2被按下
    delay(10);
    if(PTH_PTH1==0) {    //消抖
      k=2;
    }
  }

      if(k==1){

         PORTB=0xFF; //S1键被按下时LED灯以此种方式亮



      } else if(k==2){

         PORTB=0x1;   //S2键被按下时LED灯以此种方式亮



      }
        EnableInterrupts;


  for(;;) {
    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}
        各位高手以上是我自己写得程序(延时程序未加入),目的是读取S1,S2的按键状态,并使LED在不同键按下时能有不同的显示状态,可是下到单片机以后无论怎么按键都没有任何反应。我的单片机型号是mc9s12dg128.请各位帮我看看是什么原因,谢谢!





回复

使用道具 举报

2

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
95
威望
59
贡献
20
兑换币
23
注册时间
2014-2-22
在线时间
8 小时
毕业学校
上海交通大学
2#
 楼主| 发表于 2014-2-26 22:06:31 | 显示全部楼层
找到原因了,第一个问题是没有将B口的数据方向寄存器定为输出,第二个问题是这个程序查询函数只能查询一次,因此以后再按键就没有反应了,应该加入循环。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-5 20:25 , Processed in 0.054371 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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