Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7679478
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2011-01-15 14:13:33

  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. }
阅读(1392) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~