找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1260|回复: 0
打印 上一主题 下一主题
收起左侧

NER24控制系统程序源码

[复制链接]
跳转到指定楼层
楼主
NER24控制系统


下载:
控制系统.rar (116.18 KB, 下载次数: 8)
  1. #include"stc12c5a60s2.h"   //stc12c5a60s2头文件
  2. #include"Timer0.h"         //定时器0头文件
  3. #include"Timer1.h"         //定时器1头文件
  4. #include"Dingyi.h"         //定义变量头文件
  5. #include"delay.h"          //软件延时头文件
  6. #include"lcd12864.h"       //LCD显示头文件
  7. #include"ds18b20.h"        //温度检测头文件
  8. #include"exint0.h"         //外部中断0头文件
  9. #include"superaudible.h"   //超声波测距头文件
  10. #include"IIC.h"            //IIC总线
  11. #include"mpu6050.h"        //配置mpu6050芯片寄存器
  12. #include"PCAPWM.h"         //输出pwm
  13. #include"keyconcrol.h"     //按键扫描
  14. #include"keyoper.h"        //按键控制

  15. #define TASK_F 100         //任务时钟频率为10HZ


  16. uchar code taba[]="  距离      cm";
  17. uchar code tabb[]="环境温度      度";
  18. uchar code tabc[]="当前角度      °";
  19. uchar code tabd[]="设定角度    °";

  20. void run(void(*ptask)());  //指向任务函数的指针
  21. void task0();              //任务0
  22. void task1();              //任务1
  23. void task2();              //任务2
  24. void task3();              //任务3
  25. void task4();              //任务4
  26. void (*code task[])()={task0,task1,task2,task3,task4};//获得任务PC指针

  27. void function_Init();       //全部初始化

  28. void main()
  29. {
  30.    uchar i;  

  31.          Delay(300);
  32.    function_Init();         //总函数初始化
  33.          Delay(200);
  34.    EA=1;
  35.        
  36.    while(1)
  37.    {
  38.       for(i=0;i<TASK;i++)
  39.             {
  40.                     if(task_delay[i]==0) //就绪任务调度
  41.                     {
  42.                               run(task[i]);
  43.                              break;             //任务调度完成之后跳出循环,即任务0的优先级最高,以此类推
  44.                     }
  45.             }                             
  46.    }
  47. }

  48. void run(void(*ptask)())  //指向任务函数的指针
  49. {
  50.    (*ptask)();
  51. }

  52. void task0()              //任务0,风扇控制
  53. {
  54.   /*if(angleyflag==1)      //自动控制
  55.         {
  56.     if(angny>angleyy)
  57.                 {
  58.       if(++fanflag>200) fanflag=200;  
  59.     }         
  60.   }*/
  61.         LCD_mpu6050(angle_Y,MPU6050_GetData(ACCEL_YOUT_H)); //计算角度
  62.         key_scan();              //按键判断
  63.         task_delay[0]=TASK_F/2;
  64. }

  65. void task1()              //任务1,按键扫描
  66. {         
  67.    /*if(angleyflag==1)      //自动控制
  68.          {
  69.                  if(angny<angleyy)  
  70.                  {                 
  71.        if(--fanflag<1) fanflag=0;       
  72.      }                         
  73.    }        */
  74.    task_delay[1]=TASK_F;
  75. }

  76. void task2()              //任务2
  77. {       
  78.          MPU6050_Set();                        //计算设定角度值
  79.          task_delay[2]=TASK_F/4;
  80. }

  81. void task3()                             //任务3,超声波测距
  82. {
  83.    static uchar state=0;
  84.        
  85.          switch(state)
  86.          {
  87.      case 0:super_Start();               //启动超声波模块
  88.                               state=1;
  89.                         task_delay[3]=TASK_F;
  90.                               break;
  91.                  
  92.                  case 1:Shou_super();                //接收超声波
  93.                         
  94.                               state=2;
  95.                         task_delay[3]=TASK_F;
  96.                               break;
  97.                   
  98.                  case 2:LCD_String(0,3,distance);    //显示超声波距离
  99.                         LCD_String(2,4,angle_Y);     //显示角度值
  100.                         LCD_String(3,4,angme);       //显示设定角度值
  101.                               state=0;
  102.                         task_delay[3]=TASK_F;
  103.                         break;
  104.    }
  105. }

  106. void task4()                             //任务4,温度采集
  107. {
  108.    static uchar state=0;
  109.        
  110.          switch(state)
  111.          {
  112.      case 0:ds18b20_TempStart();         //启动温度转换
  113.                         state=1;                        
  114.                         task_delay[4]=TASK_F*2;
  115.                         break;
  116.                  
  117.                  case 1:ds18b20_Temp_Updata();       //获取温度值并保存到数组中
  118.                               state=2;                        
  119.                         task_delay[4]=TASK_F/10;
  120.                         break;
  121.                  
  122.                  case 2:LCD_String(1,4,Temperature); //显示数组中的温度
  123.                               state=0;
  124.                         task_delay[4]=TASK_F/2;
  125.                         break;
  126.    }
  127. }

  128. void function_Init()                     //总函数初始化
  129. {   
  130.    Bel=1;
  131.          Timer0_Init();                        //初始化定时器0
  132.          Timer1_init();                        //初始化定时器1
  133.          exint0_init();                        //初始化外部中断0
  134.          MPU6050_Init();                       //初始化mpu6050
  135.    LCD_Init();                           //初始化LCD
  136.    PCAPWM_Init();                        //初始化pwm       
  137.          Delay(200);
  138.    LCD_Chinese(0,0,taba);  
  139.    LCD_Chinese(1,0,tabb);
  140.    LCD_Chinese(2,0,tabc);
  141.    LCD_Chinese(3,0,tabd);       
  142.    Trig=0;                               //拉低脉冲输入引脚
  143. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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