liquanmin 发表于 2010-8-17 23:27:26

如此完美的舵机驱动程序!!!!

程序一:
#include <mega16.h>
unsigned int i=0;
unsigned char array[]={10};

interrupt void tim0(void)
{ if(++i<=400)
{ if(i==array)
PORTA.1=~PORTA.1;
   }
else
    { PORTA.1=1;
      i=0;
    }
   }

void main()
{ DDRA=0x02;
PORTA.1=1;
TCCR0=0x0a;
TCNT0=0x00;
OCR0=49;
TIMSK=0x02;
#asm("sei")
while(1);
}

程序二:
#include <mega16.h>
unsigned int i=0;
unsigned char a=10;

interrupt void tim0(void)
{ i++;
   if(i==a)
    PORTA.1=~PORTA.1;
   if(i>399)
   {
      PORTA.1=~PORTA.1;
      i=0;
   }
}

void main()
{
DDRA=0x02;
PORTA.1=1;
TCCR0=0x0a;
TCNT0=0x00;
OCR0=49;
TIMSK=0x02;
#asm("sei")
while(1);
}

大伙看完这两个程序后,觉得有何不同????
但是它们的运行结果不同,程序一运行正常,程序二有误。(经过本人验证)
还望大家指出!!!!!特别是中断函数!!!!!

liquanmin 发表于 2010-8-22 16:33:07

回复【楼主位】liquanmin
-----------------------------------------------------------------------

顶!!!!!!!
还望各位指教!!!!!!!!!!!!!

ilovezeno 发表于 2010-8-22 16:53:23

相当完美...也许是我见识少,不过这是我见过的最愚蠢的舵机驱动程序...
感叹号数量总是和智商成反比的

liquanmin 发表于 2010-9-12 23:47:25

回复【2楼】ilovezeno 鸣
-----------------------------------------------------------------------
那楼上能否说出这两个之间的不同?(一个可用,一个不可用)

millwood0 发表于 2010-9-13 03:12:37

"那楼上能否说出这两个之间的不同?"

if you have trouble telling the two isrs apart, you should find a job outside of programming.

sdpz 发表于 2010-9-29 08:58:26

被骗进来了。

qiaokeli 发表于 2011-3-21 09:38:37

楼主真无聊啊,有问题就说有问题,还用完美来骗人

johnwjl 发表于 2011-3-21 10:15:46

被骗了的说。

chenyuqiu 发表于 2011-3-21 10:18:34

我也是被骗进来的 - -!!!!

zhxiy 发表于 2011-7-25 19:21:06

?

liquanmin 发表于 2011-7-31 16:14:54

回复【楼主位】liquanmin
-----------------------------------------------------------------------
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.7a Standard
Automatic Program Generator
?Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 2010/8/21
Author: F4CG                           
Company : F4CG                           
Comments:


Chip type         : ATmega16
Program type      : Application
Clock frequency   : 8.000000 MHz
Memory model      : Small
External SRAM size: 0
Data Stack size   : 256
*****************************************************/

#include <mega16.h>
#include <delay.h>
unsigned int i=0;
unsigned char n=1,k1=0,k2=0,k3=0,k4=0,k5=0,m1=15,m2=5,m3=12,m4=20,m5=3;
unsigned char num1=0,num2=0,time_10s=0;
bit time_10s_ok=0;
unsigned char a11[]={18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44};//21居中
unsigned char a22[]={72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97};    //3竖23横
unsigned char a33[]={130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156};// 0横 22竖
unsigned char a44[]={175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213.214,215,216,217};                        // 9竖32横
unsigned int a55[]={247,248,249,250,251,252,253,254};                        //从小到大加紧
#define key_input1        PIND.6                        // 按键输入口
#define key_input2        PIND.7                        // 按键输入口
#define key_state_0        0
#define key_state_1        1
#define key_state_2        2

unsigned char read_key(void)
{
        static unsigned char key_state = 0;
        unsigned char key_press1, key_press2, key_return = 0;

        key_press1 = key_input1;                                // 读按键I/O电平
        key_press2 = key_input2;                                // 读按键I/O电平
        switch (key_state)
        {
                case key_state_0:                                // 按键初始态
                        if (!(key_press1&key_press2)) key_state = key_state_1;        // 键被按下,状态转换到键确认态
                        break;
                case key_state_1:                                // 按键确认态
                        if (!(key_press1&key_press2))
                        {
                          if(!key_press1)
                             { key_return = 1;                        // 按键仍按下,按键确认输出为"1" (1)
                              key_state = key_state_2;        // 状态转换到键释放态
                             }
                          if(!key_press2)
                             { key_return = 2;                        // 按键仍按下,按键确认输出为"1" (1)
                              key_state = key_state_2;        // 状态转换到键释放态
                             }
                        }
                        else
                                key_state = key_state_0;        // 按键已抬起,转换到按键初始态
                        break;
                case key_state_2:
                        if (key_press1&key_press2) key_state = key_state_0;        //按键已释放,转换到按键初始态
                        break;
                }
            return key_return;
}

      
void zhixing()
{switch(n)
{case 1:
   {
      if(i==1)PORTC=0x01;if(i==a11)PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22)PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33)PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44)PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55)PORTC=0x00;
      if(i==425)//{i=0;PORTC=0x00;if((k1++)==m1){k1=k1-1;n++;}}
      {i=0;PORTC=0x00;
         if(m1>=k1)
             {if((k1++)==m1){k1=k1-1;n++;}}
         else
             {if((k1--)==m1){k1=k1+1;n++;}}
      }
   }break;
   case 2:
   {
      if(i==1)PORTC=0x01;if(i==a11)PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22)PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33)PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44)PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55)PORTC=0x00;
   if(i==425)//{i=0;PORTC=0x00;if((k2++)==m2){k2=k2-1;n++;}}
      {i=0;PORTC=0x00;
         if(m2>=k2)
             {if((k2++)==m2){k2=k2-1;n++;}}
         else
             {if((k2--)==m2){k2=k2+1;n++;}}
      }
   } break;
   case 3:
   {
      if(i==1)PORTC=0x00;if(i==a11)PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22)PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33)PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44)PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55)PORTC=0x00;
   if(i==425)//{i=0;PORTC=0x00;if((k3++)==m3){k3=k3-1;n++;}}
      {i=0;PORTC=0x00;
         if(m3>=k3)
             {if((k3++)==m3){k3=k3-1;n++;}}
         else
             {if((k3--)==m3){k3=k3+1;n++;}}
      }
   } break;
   case 4:
   {
      if(i==1)PORTC=0x00;if(i==a11)PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22)PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33)PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44)PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55)PORTC=0x00;
   if(i==425)//{i=0;PORTC=0x00;if((k4++)==m4){k4=k4-1;}}
      {i=0;PORTC=0x00;                                                               //n=1;
         if(m4>=k4)
             {if((k4++)==m4){k4=k4-1;n++;}}
         else                                             
             {if((k4--)==m4){k4=k4+1;n++;}}
      }
   } break;
   case 5:
   {
      if(i==1)PORTC=0x01;if(i==a11)PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22)PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33)PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44)PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55)PORTC=0x00;
   if(i==425)//{i=0;PORTC=0x00;if((k5++)==m5){k5=k5-1;}}
      {i=0;PORTC=0x00;                                                               //n=1;
         if(m5>=k5)
             {if((k5++)==m5){k5=k5-1;n=1;}}
         else                                             
             {if((k5--)==m5){k5=k5+1;n=1;}}
      }
   } break;
    default:break;
   
}

}

interrupt void timer0_comp_isr(void)
{
i++;
zhixing();
if(++time_10s>=212)
{time_10s=0;
   time_10s_ok=1;
}
   
}


void main(void)
{unsigned char key;
DDRD.6=0;
PORTD.6=1;
DDRD.7=0;
PORTD.7=1;
DDRC=0x1f;
TCCR0=0x0a;
TIMSK=0x02;
TCNT0=0x00;
OCR0=0x31;
#asm("sei")
/*while (1)
{ if(time_10s_ok)
    {time_10s_ok=0;
    key=read_key();
      if(key==1)
      {key=0;
      num1++;num2=0;
      if(num1==1)
          {m1=5;m2=5;m3=6;m4=30;m5=3;}
      if(num1==2)
          {m1=10;m2=12;m3=6;m4=30;m5=3;}
      if(num1==3)
          {m1=15;m2=20;m3=30;m4=30;m5=3;}
      if(num1==4)
          {m1=20;m2=20;m3=24;m4=30;m5=3;}
      if(num1==5)
          {m1=25;m2=23;m3=20;m4=32;m5=1;}
      if(num1>=6)
          {m1=25;m2=23;m3=20;m4=32;m5=7;}
      }
   if(key==2)
      {key=0;
      num2++;num1=0;
      if(num2==1)
          {m1=25;m2=23;m3=24;m4=32;m5=7;}
      if(num2==2)
          {m1=25;m2=15;m3=24;m4=10;m5=7;}
      if(num2==3)
          {m1=25;m2=5;m3=24;m4=10;m5=7;}
      if(num2==4)
          {m1=25;m2=5;m3=6;m4=10;m5=7;}
      if(num2>=5)
          {m1=25;m2=5;m3=6;m4=30;m5=1;}
       }
    }
}
}*/
while (1)
{ if(time_10s_ok)
    {time_10s_ok=0;
    key=read_key();
      if(key==1)
      {key=0;
      num1=1;
      if(num1==1)
          {m1=5;m2=5;m3=6;m4=30;m5=3;num1++;}
          delay_ms(1000);
      if(num1==2)
          {m1=10;m2=12;m3=6;m4=30;m5=3;num1++;}
         delay_ms(1000);
      if(num1==3)
          {m1=10;m2=20;m3=35;m4=30;m5=3;num1++;}
         delay_ms(1000);
      if(num1==4)
          {m1=20;m2=20;m3=24;m4=30;m5=3;num1++;}
         delay_ms(1000);
      if(num1==5)
          {m1=25;m2=23;m3=20;m4=32;m5=1;num1++;}
         delay_ms(1000);
      if(num1>=6)
          {m1=25;m2=23;m3=20;m4=32;m5=7;num1=0;}
      }
   if(key==2)
      {key=0;
      num2=1;
      if(num2==1)
          {m1=25;m2=23;m3=24;m4=32;m5=7;num2++;}
          delay_ms(1000);
      if(num2==2)
          {m1=25;m2=15;m3=24;m4=10;m5=7;num2++;}
          delay_ms(1000);
      if(num2==3)
          {m1=25;m2=5;m3=24;m4=10;m5=7;num2++;}
          delay_ms(1000);
      if(num2==4)
          {m1=25;m2=5;m3=6;m4=10;m5=7;num2++;}
          delay_ms(1000);
      if(num2==5)
          {m1=25;m2=5;m3=6;m4=30;m5=7;num2++;}
          delay_ms(1000);
      if(num2>=6)
          {m1=25;m2=5;m3=6;m4=30;m5=1;num2=0;}
       }
    }
}
}
页: [1]
查看完整版本: 如此完美的舵机驱动程序!!!!