NER24控制系統(tǒng)
下載:
控制系統(tǒng).rar
(116.18 KB, 下載次數(shù): 8)
2016-12-19 01:04 上傳
點擊文件名下載附件
- #include"stc12c5a60s2.h" //stc12c5a60s2頭文件
- #include"Timer0.h" //定時器0頭文件
- #include"Timer1.h" //定時器1頭文件
- #include"Dingyi.h" //定義變量頭文件
- #include"delay.h" //軟件延時頭文件
- #include"lcd12864.h" //LCD顯示頭文件
- #include"ds18b20.h" //溫度檢測頭文件
- #include"exint0.h" //外部中斷0頭文件
- #include"superaudible.h" //超聲波測距頭文件
- #include"IIC.h" //IIC總線
- #include"mpu6050.h" //配置mpu6050芯片寄存器
- #include"PCAPWM.h" //輸出pwm
- #include"keyconcrol.h" //按鍵掃描
- #include"keyoper.h" //按鍵控制
- #define TASK_F 100 //任務時鐘頻率為10HZ
- uchar code taba[]=" 距離 cm";
- uchar code tabb[]="環(huán)境溫度 度";
- uchar code tabc[]="當前角度 °";
- uchar code tabd[]="設定角度 °";
- void run(void(*ptask)()); //指向任務函數(shù)的指針
- void task0(); //任務0
- void task1(); //任務1
- void task2(); //任務2
- void task3(); //任務3
- void task4(); //任務4
- void (*code task[])()={task0,task1,task2,task3,task4};//獲得任務PC指針
- void function_Init(); //全部初始化
- void main()
- {
- uchar i;
- Delay(300);
- function_Init(); //總函數(shù)初始化
- Delay(200);
- EA=1;
-
- while(1)
- {
- for(i=0;i<TASK;i++)
- {
- if(task_delay[i]==0) //就緒任務調度
- {
- run(task[i]);
- break; //任務調度完成之后跳出循環(huán),即任務0的優(yōu)先級最高,以此類推
- }
- }
- }
- }
- void run(void(*ptask)()) //指向任務函數(shù)的指針
- {
- (*ptask)();
- }
- void task0() //任務0,風扇控制
- {
- /*if(angleyflag==1) //自動控制
- {
- if(angny>angleyy)
- {
- if(++fanflag>200) fanflag=200;
- }
- }*/
- LCD_mpu6050(angle_Y,MPU6050_GetData(ACCEL_YOUT_H)); //計算角度
- key_scan(); //按鍵判斷
- task_delay[0]=TASK_F/2;
- }
- void task1() //任務1,按鍵掃描
- {
- /*if(angleyflag==1) //自動控制
- {
- if(angny<angleyy)
- {
- if(--fanflag<1) fanflag=0;
- }
- } */
- task_delay[1]=TASK_F;
- }
- void task2() //任務2
- {
- MPU6050_Set(); //計算設定角度值
- task_delay[2]=TASK_F/4;
- }
- void task3() //任務3,超聲波測距
- {
- static uchar state=0;
-
- switch(state)
- {
- case 0:super_Start(); //啟動超聲波模塊
- state=1;
- task_delay[3]=TASK_F;
- break;
-
- case 1:Shou_super(); //接收超聲波
-
- state=2;
- task_delay[3]=TASK_F;
- break;
-
- case 2:LCD_String(0,3,distance); //顯示超聲波距離
- LCD_String(2,4,angle_Y); //顯示角度值
- LCD_String(3,4,angme); //顯示設定角度值
- state=0;
- task_delay[3]=TASK_F;
- break;
- }
- }
- void task4() //任務4,溫度采集
- {
- static uchar state=0;
-
- switch(state)
- {
- case 0:ds18b20_TempStart(); //啟動溫度轉換
- state=1;
- task_delay[4]=TASK_F*2;
- break;
-
- case 1:ds18b20_Temp_Updata(); //獲取溫度值并保存到數(shù)組中
- state=2;
- task_delay[4]=TASK_F/10;
- break;
-
- case 2:LCD_String(1,4,Temperature); //顯示數(shù)組中的溫度
- state=0;
- task_delay[4]=TASK_F/2;
- break;
- }
- }
- void function_Init() //總函數(shù)初始化
- {
- Bel=1;
- Timer0_Init(); //初始化定時器0
- Timer1_init(); //初始化定時器1
- exint0_init(); //初始化外部中斷0
- MPU6050_Init(); //初始化mpu6050
- LCD_Init(); //初始化LCD
- PCAPWM_Init(); //初始化pwm
- Delay(200);
- LCD_Chinese(0,0,taba);
- LCD_Chinese(1,0,tabb);
- LCD_Chinese(2,0,tabc);
- LCD_Chinese(3,0,tabd);
- Trig=0; //拉低脈沖輸入引腳
- }
復制代碼
|