⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 手动调速.c

📁 用AVR-ATMEGA8驱动手动机器人整个控制
💻 C
字号:
#include <iom8v.h>
#include <macros.h>
#include <math.h>
#define ADC0_VREF_TYPE 0x60  //选用5V的片内基准电压源,且结果为左对齐
#define ADC1_VREF_TYPE 0x61  //选用5V的片内基准电压源,且结果为左对齐
#define AD_SE_ADC0 0x00      //ADC0
#define AD_SE_ADC1 0X01      //ADC1
unsigned ADC_VREF_TYPE ;
unsigned char keypush;
unsigned long int i,j;      //储存AD转换结果
unsigned char c;
unsigned long int a,second;
void port_init(void)//端口设置
{
 //DDRA=0X00;
 //PORTA = 0x00;//设置A口为不带上拉输入;//AD输入口
 DDRB= 0xff;
 DDRD= 0x00;
 DDRD=0XFF;
 PORTD=0xff;//数据输出口
}

void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
adc0_init();
adc1_init();
SEI(); //re-enable interrupts
//all peripherals are now initialized
}

//AD初始化
void adc0_init(void)
{
ADCSR = 0x00;  //不能使 adc0
ADMUX  = 0x00;  //选择 adc0 input 0
ACSR   = 0x80;  //关闭比较器
ADCSR = 0x86;  //使能 adc0
}

void adc1_init(void)
{
ADCSR = 0x00;  //不能使 adc1
ADMUX  = 0x01;  //选择 adc1 input 0
ACSR   = 0x80;  //关闭比较器
ADCSR = 0x86;  //使能 adc1
}

unsigned int read_adc(unsigned char adc_input)  //读取A/D转换结果
{
if(adc_input==AD_SE_ADC0)

   ADC_VREF_TYPE=ADC0_VREF_TYPE;
else
   ADC_VREF_TYPE=ADC1_VREF_TYPE;

ADMUX=adc_input|ADC_VREF_TYPE;    
ADCSRA|=0x40;                //启动A/D转换
while ((ADCSRA&0x10)==0);    //等待A/D转换完成
ADCSRA|=0x10;
return ADCH;
}

void receive_adc()
{
 adc0_init();
 ADMUX=ADC0_VREF_TYPE;    //选择第一通道ADC0;
 i=read_adc(AD_SE_ADC0);  //获取A/D转换数据
 adc1_init();
 ADMUX=ADC1_VREF_TYPE;    //选择第二通道ADC1;
 j=read_adc(AD_SE_ADC1);  //获取A/D转换数据
}

void delay_(unsigned char a)//延时函数
{
 unsigned int i;
 for(i=0;i<a*7373;i++);
}
void timer2_init(void)
{
 TCCR2 = 0x00;
 ASSR  = 1<<AS2; //异步时钟
 TCNT2 = 0xE0; //定时时间1秒
 TCCR2 = (1<<CS22)|(1<<CS21)|(1<<CS20); //分频比1024,0x07
}
#pragma interrupt_handler timer2_ovf_isr:iv_TIMER2_OVF
void timer2_ovf_isr(void)
{
 TCNT2 = 0xE0;
 second++;
}

void main()//主函数
{
 init_devices();
 ADCSRA=0xA6;    //125k转换速率,自由转换模式;启动A/D转换;
  delay_(200);  //延时待系统稳定;
    while(1)
  { 
    receive_adc(); //读取AD值
 /* if(i<128&&i>=112)       //STOP
    {c=0x00; }      
  if(i<112&&i>=96 )       //前进
    {c=0x01; }      
  if(i<96&&i>= 80)      
    {c=0x02; }
  if(i<80&&i>= 64)
    {c=0x03; }
  if(i<64&&i>= 48)
    {c=0x04; }
  if(i<48&&i>= 32)
    {c=0x05; }
  if(i<32&&i>= 16)
    {c=0x06; }
  if(i<16&&i>= 0 )
    {c=0x07; }
  if(i>128&&i<=144)       //STOP
    {c=0x08; }      
  if(i>144&&i<=160)       //后退
    {c=0x09; }
  if(i>160&&i<=176)
    {c=0x0a; }
  if(i>176&&i<=192)
    {c=0x0b; }
  if(i>192&&i<=208)
    {c=0x0c; }
  if(i>208&&i<=224)
    {c=0x0d;}
  if(i>224&&i<=240)
    {c=0x0e; }
  if(i>240&&i<=256)
    {c=0x0f; }
	PORTD=c;
  }      
}*/
  if(j<128&&j>=100)       //STOP
    {c=0x00; }      
  if(j<100&&j>=90)       //前进
    {c=0x01; }      
  if(j<90&&j>=50)      
    {c=0x02; }
  if(j<50&&j>= 40)
    {c=0x03; }
  if(j<40&&j>= 30)
    {c=0x04; }
  if(j<30&&j>= 20)
    {c=0x05; }
  if(j<20&&j>= 10)
    {c=0x06; }
  if(j<10&&j>= 0 )
    {c=0x07; }
  if(j>128&&j<=156)       //STOP
    {c=0x08; }      
  if(j>156&&j<=166)       //后退
    {c=0x09; }
  if(j>166&&j<=206)
    {c=0x0a; }
  if(j>206&&j<=216)
    {c=0x0b; }
  if(j>216&&j<=226)
    {c=0x0c; }
  if(j>226&&j<=236)
    {c=0x0d;}
  if(j>236&&j<=246)
    {c=0x0e; }
  if(j>246&&j<=256)
    {c=0x0f; }
	PORTD=c;
  }      
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -