搜索
bottom↓
回复: 10

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

[复制链接]

出0入0汤圆

发表于 2010-8-17 23:27:26 | 显示全部楼层 |阅读模式
程序一:
#include <mega16.h>
unsigned int i=0;
unsigned char array[]={10};

interrupt [TIM0_COMP] void tim0(void)
{ if(++i<=400)
  { if(i==array[0])
  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 [TIM0_COMP] 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);
}  

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-8-22 16:33:07 | 显示全部楼层
回复【楼主位】liquanmin
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-8-22 16:53:23 | 显示全部楼层
相当完美...也许是我见识少,不过这是我见过的最愚蠢的舵机驱动程序...
感叹号数量总是和智商成反比的

出0入0汤圆

 楼主| 发表于 2010-9-12 23:47:25 | 显示全部楼层
回复【2楼】ilovezeno 鸣
-----------------------------------------------------------------------
那楼上能否说出这两个之间的不同?(一个可用,一个不可用)

出0入0汤圆

发表于 2010-9-13 03:12:37 | 显示全部楼层
"那楼上能否说出这两个之间的不同?"

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

出0入0汤圆

发表于 2010-9-29 08:58:26 | 显示全部楼层
被骗进来了。

出0入0汤圆

发表于 2011-3-21 09:38:37 | 显示全部楼层
楼主真无聊啊,有问题就说有问题,还用完美来骗人

出0入0汤圆

发表于 2011-3-21 10:15:46 | 显示全部楼层
被骗了的说。

出0入0汤圆

发表于 2011-3-21 10:18:34 | 显示全部楼层
我也是被骗进来的 - -!!!!

出0入0汤圆

发表于 2011-7-25 19:21:06 | 显示全部楼层
?

出0入0汤圆

 楼主| 发表于 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[k1])PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55[k5])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[k1])PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55[k5])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[k1])PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55[k5])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[k1])PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55[k5])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[k1])PORTC=0x00;
      if(i==55)PORTC=0x02;if(i==a22[k2])PORTC=0x00;
      if(i==110)PORTC=0x04;if(i==a33[k3])PORTC=0x00;
      if(i==165)PORTC=0x08;if(i==a44[k4])PORTC=0x00;
      if(i==225)PORTC=0x10;if(i==a55[k5])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 [TIM0_COMP] 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;}
       }
    }
}
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 22:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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