Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631127
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 11:29:17

原文地址:智能控制电机 作者:luozhiyong131

  1. #include <reg52.h>
  2. #include "sound.h"
  3. #include "LED.h"
  4. #include "moto.h"
  5. #include "IT0.h"
  6.     
  7. static int normal_speed = 2; //标准速度

  8.     
  9. static char speed=0,now_speed=0; //保存原速度

  10. static int num=0,num1,num2 ,moto_mian_i;

  11. /*速度自动调整对照表*/
  12. char speed_table1[]={0,1,2,3,4,5,6,7,8,};        
  13. char speed_table2[]={0,-1,-2,-3,-4,-5,-6,-7,-8,};
  14.     
  15. void moto_seed_table0()
  16. {
  17.     if(normal_speed > speed) //水滴速度过慢,电机正转

  18.     {
  19.         now_speed = speed_table1[normal_speed - speed];
  20.         LED1_display(now_speed);        /*显示要调整的速度*/
  21.         
  22.         /*重新设置电机转动角度*/
  23.         moto_begin = moto_qu_j = 0;
  24.         moto_qu_k = 0;
  25.         moto_qu_kk = moto_qu_one * (now_speed);
  26.         
  27.     }    

  28.     if(normal_speed < speed)    //水滴速度过快,电机反转

  29.     {    
  30.         now_speed = speed_table2[speed - normal_speed];
  31.         LED1_display(-now_speed);
  32.         
  33.         moto_begin = moto_qu_j = 4;
  34.         moto_qu_k = 0;
  35.         moto_qu_kk = moto_qu_one * (-now_speed);
  36.     }
  37. }

  38. void moto_seed(void)
  39. {
  40.         moto_seed_table0();                
  41.   
  42.         moto_dispose(now_speed); //设置速度

  43.         
  44. }


  45. /*速度计算*/
  46. void IT0_done()        
  47. {        
  48.     speed = num/1;         //计算速度

  49.     
  50.     moto_seed_table0();    //设置速度


  51.     num1 = num/10;    //分离出十位

  52.     num2 = num%10;

  53.     num = 0;            //计算清0

  54. }

  55. void main()
  56.  {
  57.     init_IT0(2);    //设置彩样周期

  58.     
  59.     IT0=1;
  60.     EX0=1;
  61.     
  62.     while(1)
  63.     {                
  64.         
  65.             if(normal_speed!=speed)    moto_seed();            

  66.         /*防止误计数保持一定间隔时间(水滴的最大速度)*/
  67.         for(moto_mian_i=100;moto_mian_i>0;moto_mian_i--)    
  68.         {
  69.             EX0=0;
  70.             LED2_display(num1,num2);    
  71.         }
  72.         
  73.         EX0=1;     
  74.         
  75.     }
  76.     
  77.  }

  78.  void Int0()    interrupt 0    //采样处理函数

  79. {
  80.         
  81.     EX0=0;                 //防止连续计数

  82.     
  83.     sound();        //发出声音、同时起延时作用

  84.     
  85.     num ++;        //保存计数值    

  86.     
  87.     EX0=1;
  88.     
  89. }
阅读(93) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~