📄 justrun.c
字号:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#define a 0xf4 //a=0.95
#define b 0x0d //b=1-a=0.05
unsigned char x0,y0=0; //x0,ADCH的值;
signed char right=0;
int delay_time=0,time=0;
unsigned char read_adc(unsigned char ad_chanel) //单通道AD值读取函数
{
ADMUX=1<<ADLAR|ad_chanel|1<<REFS1|1<<REFS0; //内参2.56V
ADCSRA=1<<ADEN|1<<ADSC|6<<ADPS0; //16分频做AD转换时钟
loop_until_bit_is_set(ADCSRA,ADIF); //等待ADCSRA中的ADIF位置位
ADCSRA=1<<ADIF;
return ADCH;
}
SIGNAL(SIG_OUTPUT_COMPARE0) //interrupt
{
x0=read_adc(7);
y0=(char)(((int)a*y0+(int)b*x0)>>8);
if(y0<12) {time=50; right=1;PORTD=0X00;}
if(12<y0<24) {time=100; right=1;}
if((24<y0)&(y0<36)) {time=300; right=1;}
if((36<y0)&(y0<48)) {time=500; right=1;}
if((48<y0)&(y0<60)) {time=800; right=1;}
if((60<y0)&(y0<72)) {time=1000; right=1;}
if((72<y0)&(y0<84)) {time=1300; right=1;}
if((84<y0)&(y0<96)) {time=1600; right=1;}
if((96<y0)&(y0<108)) {time=4000; right=1;}
if((108<y0)&(y0<134)) {right=0;PORTD=0X00;}
if((134<y0)&(y0<146)) {time=5000; right=2;}
if((146<y0)&(y0<158)) {time=3000; right=2;}
if((158<y0)&(y0<170)) {time=2000; right=2;}
if((170<y0)&(y0<182)) {time=1500; right=2;}
if((182<y0)&(y0<194)) {time=1200; right=2;}
if((194<y0)&(y0<206)) {time=1000; right=2;}
if((206<y0)&(y0<218)) {time=800; right=2;}
if((218<y0)&(y0<240)) {time=500; right=2;}
if(y0>240) {time=300; right=2;PORTD=0X00;}
}
void delay (unsigned int t)
{
for(;t>1;t--);
}
void main()
{
unsigned int delay_time=0;
char i=0;
DDRA=0x0f;
DDRB=0XFF; //OCR0,T0比较输出;在比较中断中改变PB口
DDRD=0X20;
TCCR1A=0x83; //OC1A(PD5) is "0",10 BITS PWM
TCCR1B=0X02; //CLK/8
OCR0=0X7f; //设置OCR0的值(此值越大,采频越低),使采样频率约为500Hz
TCCR0=1<<WGM01|3<<CS00;
TIMSK=1<<OCIE0;
TIFR=1<<OCF0;
SREG=0X80;
right=1;
while(1)
{
delay_time=time;
/* if(right==1) {
PORTA=1; PORTB=0x56; delay(delay_time);
PORTA=1; PORTB=0x95; delay(delay_time);
PORTA=1; PORTB=0x65; delay(delay_time);
PORTA=1; PORTB=0x59; delay(delay_time);
PORTA=2; PORTB=0x55; delay(delay_time);
}
else if(right==2){
PORTA=2; PORTB=0x55; delay(delay_time);
PORTA=1; PORTB=0x59; delay(delay_time);
PORTA=1; PORTB=0x65; delay(delay_time);
PORTA=1; PORTB=0x95; delay(delay_time);
PORTA=1; PORTB=0x56; delay(delay_time);
} */
if(right==1) {
PORTA=1; PORTB=0x56; delay(delay_time);
PORTA=1; PORTB=0x95; delay(delay_time);
PORTA=1; PORTB=0x65; delay(delay_time);
PORTA=1; PORTB=0x59; delay(delay_time);
PORTA=2; PORTB=0x55; delay(delay_time);
}
else if(right==2){
PORTA=2; PORTB=0x65; delay(delay_time);
PORTA=1; PORTB=0x9; delay(delay_time);
PORTA=1; PORTB=0x66; delay(delay_time);
PORTA=2; PORTB=0x95; delay(delay_time);
PORTA=1; PORTB=0x5A; delay(delay_time);
}
else if(right==0) PORTD=0XFF;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -