📄 tasks.c
字号:
#include <avr\io.h>
#include <avr\interrupt.h>
#include "Tasks.h"
#include "..\delay_function.h"
#include "..\USART\USART_mega16.h"
#include "..\MotorControl\MotorControl.h"
#include "..\ADC\ADC_mega16.h"
//AD采样通道选詠E
enum {
G_X = AD_SE_ADC1,
G_Y = AD_SE_ADC2,
G_Z = AD_SE_ADC3,
R_X = AD_SE_ADC4,
R_Y = AD_SE_ADC5,
H_X = AD_SE_ADC6
};
unsigned int Azimuthc, Azimuth, Hight, Hightc;
unsigned int xcenter, ycenter;
//初始化系统
void Init_Sys(void)
{
OSCCAL = 0xAF;//0xCF;//0x9B; // 8M系统内部时钟校准
initADC(); //初始化AD
init_motorcontrol(); //初始化电机控制
init_USART(); //初始化串口
sei(); //打开中断
put_ok();
}
//加速度传感器电位紒E丒
unsigned int g_sensor(void)
{
unsigned long tmp;
unsigned char i;
ADMUX = ADREF_256V; //0xC0:选詠E.56V的片内基准电压源
ADC_sel(G_Y); //选择通道
read_adc(); //丢弃前几个采样值
read_adc();
read_adc();
read_adc();
tmp = (read_adc()); //重复采褋E00次
for (i=0;i<99;i++) {
tmp += (read_adc());
}
tmp = tmp/100; //取平緛E
return ((unsigned int)tmp); //返回结箒E
}
//变阻器电位紒E丒
unsigned int r_sensor(void)
{
unsigned long tmp;
unsigned char i;
ADMUX = ADREF_AVCC; //0x40:选择AVCC作参考电压
ADC_sel(H_X); //选择通道
read_adc(); //丢弃前几个采样值
read_adc();
read_adc();
read_adc();
tmp = (read_adc()); //重复采褋E00次
for (i=0;i<99;i++) {
tmp += (read_adc());
}
tmp = tmp/100; //取平緛E
return ((unsigned int)tmp); //返回结箒E
}
//摇杆状态紒E丒
unsigned int Rocker_sensor(unsigned char id)
{
unsigned long tmp;
unsigned char i;
ADC_sel(id); //选择通道
read_adc(); //丢弃前几个采样值
read_adc();
read_adc();
read_adc();
tmp = (read_adc()); //重复采褋E0次
for (i=0;i<9;i++) {
tmp += (read_adc());
}
tmp = tmp/10; //取平緛E
return ((unsigned int)tmp); //返回结箒E
}
//获得方位角
void Get_Azimuth(void)
{
Azimuth = r_sensor();
//test
put_hex((char)(Azimuth>>8));
put_hex((char)Azimuth);
put_cr();
//test
}
//获得高度角
void Get_Hight(void)
{
// unsigned int tmp;
// tmp = g_sensor();
Hight = g_sensor();
//test
put_hex((char)(Hight>>8));
put_hex((char)Hight);
put_cr();
//test
}
//高度角控制---offset:偏移量
void HightCtl(char offset)
{
unsigned char i;
if (offset>=0) { //偏移量为正,增大俯仰角
for (i=0;i<offset;i++) {
Step_MotorCtl(d_up);
delay_nms(5);
//test
// Get_Hight();
//test
}
}
else { //偏移量为负,减小俯仰角
offset = 0-offset;
for (i=0;i<offset;i++) {
Step_MotorCtl(d_down);
delay_nms(5);
//test
// Get_Hight();
//test
}
}
PORTC &= 0xF0; //电机运转结蕘E各相控制电平清羴E
}
//方位角控制---speed:电机转速
void AzimuthCtl(char speed)
{
if (speed>=0) { //顺时諄E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -