📄 手动调速.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 + -