智能车制作

标题: 求高手指点小弟的LED灯程序 [打印本页]

作者: ccsshu    时间: 2013-1-21 16:12
标题: 求高手指点小弟的LED灯程序
   各位高手见笑了我是刚开始学的,很多都不懂。我想了一个程序几天了,都没有能够弄出来,麻烦各位高手指点下小弟。
   主要想实现通过“按键控制流水灯的流速,同时当某一个按键按下的时候,流水灯会改变它原先的点亮顺序,向相反方向点亮。再按下另一个按钮又恢复到原先的方向。还有要求两个按钮同时按下的时候,灯全部亮。再全部按下的时候恢复到流水灯的状态。”   
  现在我的流水灯的程序是没问题的
  关键加了 按键中断的程序后流水灯就不流了,不知道为什么   
  对于按键输入中断 和 相关寄存器也不是太了解  ,望高手们指点下。
学长帮忙 指点下,这几天小弟想得都睡不着觉了。
万分感谢
万分感谢
万分感谢


作者: mxj1005071012    时间: 2013-1-21 16:34
程序发出来看看 不然不知道你哪错了
作者: ccsshu    时间: 2013-1-21 17:50
mxj1005071012 发表于 2013-1-21 16:34
程序发出来看看 不然不知道你哪错了

大哥我这个是改教程的,自己因为对中断还是一片盲区,所以在里面稍微改一下,以为能达到我要的效果,但是不行。麻烦您指导下啦。


/*---------------------------------------------------------*/
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define LED PORTB
#define LED_dir DDRB
#define UP PTIH_PTIH0
#define DOWN PTIH_PTIH1
//#define LEFT PTIH_PTIH2  //定义左边的按钮
//#define RIGHT PTIH_PTIH3//定义右边的按钮
#define UP_dir DDRH_DDRH0
#define DOWN_dir DDRH_DDRH1
//#define LEFT_dir DDRH_DDRH2
//#define RIGHT_dir DDRH_DDRH3
unsigned char data=0x01;
unsigned char direction=1;   //设置灯亮的方向,0向左,1向右。
unsigned char time=5;        //设置灯闪的速度,默认5次/s
/*************************************************************/
/*                        延时函数                           */
/*************************************************************/
void delay(unsigned int n) //方便改时间,改n
{
  unsigned int i,j;
  for(j=0;j<n;j++)
  for(i=0;i<60000;i++)
  ;
}
/*************************************************************/
/*                      初始化LED灯                          */
/*************************************************************/
void init_led(void)
{
  LED_dir=0xff;       //设置为输出
  LED=~data;          //点亮LED1
}
/*************************************************************/
/*                       初始化按键                          */
/*************************************************************/
void init_key(void)
{
     UP_dir =0;       //设置为输入
     DOWN_dir=0;
    // LEFT_dir=0;
     //RIGHT_dir=0;
     PPSH = 0x00;        //极性选择寄存器,选择下降沿;
     PIFH = 0x0f;     //对PIFH的每一位写1来清除标志位;
     PIEH = 0x0f;        //中断使能寄存器;
}
/*************************************************************/
/*                    按键中断函数                           */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void PTH_inter(void)   //VECTOR ADDRESS 0xffcc PTH_inter (使进入到中断程序中)
{
   if(PIFH != 0)     //判断中断标志
   {
      PIFH = 0xff;     //清除中断标志
      if(UP == 0)         //按键1按下
      {
          time-=1;        //流水灯速度减慢
          if(time==0)
              time=1;
      }
      if(DOWN == 0) //down按下
      {
          time+=1;//流水灯速度加快
          if(time>10)
              time=10;
      }
      //if(LEFT == 0)
          //direction=0;
      //if(RIGHT == 0)
          //direction=1;
   }
}
#pragma CODE_SEG DEFAULT//  这句话是将接下来的代码(一般是中断函数)置于非分页区。
/*************************************************************/
/*                         主函数                            */
/*************************************************************/
void main(void) {
DisableInterrupts;
  init_led();
  init_key();
EnableInterrupts;

  for(;;)
  {
      delay(time);
      if(UP == 0)
      {     direction==1;
          data=data<<1;         //左移一位
          if(data==0)
              data=0x01;
      }
      if(DOWN == 0)
      {    direction==0;
          data=data>>1;         //右移一位
          if(data==0)
              data=0x80;
      }
      
      LED = ~data;
  }
}

作者: ccsshu    时间: 2013-1-21 17:53
大哥,我是想如果让你写,你会怎样写。可不可以发个相应的程序来看看,麻烦了。
作者: mxj1005071012    时间: 2013-1-21 18:57
ccsshu 发表于 2013-1-21 17:53
大哥,我是想如果让你写,你会怎样写。可不可以发个相应的程序来看看,麻烦了。

不会吧 你的程序问题很大 中断需要大换血 我时间比较忙 我觉得你仔细改改中断里的函数吧 中断一般都是改变标志位的 你这里也需要设置 并根据情况修改标志位 主函数里也应该通过标志位改

作者: ccsshu    时间: 2013-1-21 19:28
表示不懂,可不可以稍微指点一二啊,很谢谢您的关心。
作者: 音之夏萤    时间: 2013-1-21 19:57
不同的按键对应不同的标志位,在中断里不同的标志位对应不同的处理。
作者: ccsshu    时间: 2013-1-21 20:24
谢谢各位,但我因为是刚学的,对于这些还不是很了解,有木有相应的例程跟讲解啊。我太笨了,麻烦各位啦。
作者: 我爱小kb    时间: 2013-1-21 22:16
不知道帮顶下
作者: ccsshu    时间: 2013-1-22 00:19
谢谢你
作者: I'M_Not_The    时间: 2013-1-22 01:02

作者: I'M_Not_The    时间: 2013-1-22 01:02

作者: 严鸿雁    时间: 2013-1-22 08:12
太多了,不愿意看!帮顶下吧!




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2