NER24控制系统
下载:
控制系统.rar
(116.18 KB, 下载次数: 8)
- #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[]="环境温度 度";
- uchar code tabc[]="当前角度 °";
- uchar code tabd[]="设定角度 °";
- void run(void(*ptask)()); //指向任务函数的指针
- 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(); //总函数初始化
- Delay(200);
- EA=1;
-
- while(1)
- {
- for(i=0;i<TASK;i++)
- {
- if(task_delay[i]==0) //就绪任务调度
- {
- run(task[i]);
- break; //任务调度完成之后跳出循环,即任务0的优先级最高,以此类推
- }
- }
- }
- }
- void run(void(*ptask)()) //指向任务函数的指针
- {
- (*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(); //获取温度值并保存到数组中
- state=2;
- task_delay[4]=TASK_F/10;
- break;
-
- case 2:LCD_String(1,4,Temperature); //显示数组中的温度
- state=0;
- task_delay[4]=TASK_F/2;
- break;
- }
- }
- void function_Init() //总函数初始化
- {
- 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; //拉低脉冲输入引脚
- }
复制代码
|