找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1582|回復: 0
收起左側

NER24控制系統(tǒng)程序源碼

[復制鏈接]
ID:74889 發(fā)表于 2016-12-19 01:05 | 顯示全部樓層 |閱讀模式
NER24控制系統(tǒng)
0.png

下載:
控制系統(tǒng).rar (116.18 KB, 下載次數(shù): 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[]="環(huán)境溫度      度";
  18. uchar code tabc[]="當前角度      °";
  19. uchar code tabd[]="設定角度    °";

  20. void run(void(*ptask)());  //指向任務函數(shù)的指針
  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();         //總函數(shù)初始化
  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;             //任務調度完成之后跳出循環(huán),即任務0的優(yōu)先級最高,以此類推
  44.                     }
  45.             }                             
  46.    }
  47. }

  48. void run(void(*ptask)())  //指向任務函數(shù)的指針
  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();       //獲取溫度值并保存到數(shù)組中
  118.                               state=2;                        
  119.                         task_delay[4]=TASK_F/10;
  120.                         break;
  121.                  
  122.                  case 2:LCD_String(1,4,Temperature); //顯示數(shù)組中的溫度
  123.                               state=0;
  124.                         task_delay[4]=TASK_F/2;
  125.                         break;
  126.    }
  127. }

  128. void function_Init()                     //總函數(shù)初始化
  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. }
復制代碼


相關帖子

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表