标题:
NER24控制系统程序源码
[打印本页]
作者:
wangzhengwei159
时间:
2016-12-19 01:05
标题:
NER24控制系统程序源码
NER24控制系统
0.png
(55.79 KB, 下载次数: 67)
下载附件
2016-12-24 02:49 上传
下载:
控制系统.rar
(116.18 KB, 下载次数: 8)
2016-12-19 01:04 上传
点击文件名下载附件
下载积分: 黑币 -5
#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; //拉低脉冲输入引脚
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1