ad转换器c语言编程,AVR AD转换的C语言编程

#define uchar unsigned char

#define uint unsigned int本文引用地址:http://www.eepw.com.cn/article/201611/316775.htm

uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar Data[4]={0,0,0,0};

void DelayMs(uint i) //0.25ms

{uchar j;

for(;i!=0;i--)

{for(j=250;j!=0;j--) {;}}

}

void Display(uchar *p) //间隔5ms显示

{uchar i,sel=0x01;

for(i=0;i<4;i++)

{PORTB=sel;

PORTC=0xff-Table[p[i]];

DelayMs(20);

sel=sel<<1;

}

}

uint ADC_Convert(void)

{uint temp1,temp2;

temp1=(uint)ADCL;

temp2=(uint)ADCH;

temp2=(temp2<<8)+temp1;

return(temp2);

}

void Process(uint i,uchar *p)

{p[0]=i/1000;

i=i%1000;

p[1]=i/100;

i=i%100;

p[2]=i/10;

i=i%10;

p[3]=i;

}

/*

void Timer0_Init(void)

{SREG=SREG|0x80; //全局中断开;

TIMSK=TIMSK|0x01;//T/C0溢出中断使能;

TCCR0=0x05;//CLK/1024;128uS

TIFR=0x01;//T/C0中断标志位写1清0;

TCNT0=256-125;//125*128us=16ms

}*/

void main(void)

{uint i;

//设置A口为不带上拉输入;

DDRA=0x00;

PORTA=0x00;

//设置B口为推挽1输出;

DDRB=0xff;

PORTB=0xff;

//设置C口为推挽1输出;

DDRC=0xff;

PORTC=0xff;

//B口初始化输出1;C口初始化输出0;点亮全部数码管;

PORTB=0xff;

PORTC=0x00;

//ADC初始化;

ADMUX=0x02;//选择第三通道;

ADCSR=0xe6;//125K转换速率,自由转换模式;启动AD转换器;

//延时待系统稳定;

DelayMs(3000);

while(1)

{i=ADC_Convert();

Process(i,Data);

Display(Data);

}

}

/*#pragma interrupt_handler Timer0:10

void Timer0()

{Int_Cnt+=1;

// Timer0_Init();

}*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,要使用ADC(模数转换器)来读取摇杆的值。然后根据摇杆的值来控制相应的操作。 以下是一个示例代码: ```c #include <avr/io.h> void adc_init() { // 设置ADC输入通道为ADC0 ADMUX |= (1<<REFS0); // 将参考电压设置为Vcc ADCSRA |= (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // 设置预分频器为128 ADCSRA |= (1<<ADEN); // 开启ADC } uint16_t adc_read(uint8_t channel) { ADMUX = (ADMUX & 0xF0) | (channel & 0x0F); // 设置ADC输入通道 ADCSRA |= (1<<ADSC); // 开始ADC转换 while (ADCSRA & (1<<ADSC)); // 等待转换完成 return ADC; } int main() { adc_init(); // 初始化ADC DDRB |= (1<<PB0) | (1<<PB1); // 设置PB0和PB1为输出 while (1) { uint16_t val = adc_read(0); // 读取ADC0输入通道的值 if (val < 300) { // 如果摇杆向左 PORTB |= (1<<PB0); // 设置PB0为高电平 PORTB &= ~(1<<PB1); // 设置PB1为低电平 } else if (val > 700) { // 如果摇杆向右 PORTB &= ~(1<<PB0); // 设置PB0为低电平 PORTB |= (1<<PB1); // 设置PB1为高电平 } else { // 如果摇杆在中间 PORTB &= ~(1<<PB0); // 设置PB0为低电平 PORTB &= ~(1<<PB1); // 设置PB1为低电平 } } return 0; } ``` 在这个示例代码中,使用了AVR单片机的ADC模块来读取摇杆的值,并根据摇杆的值来控制PB0和PB1的输出状态。当摇杆向左时,PB0输出高电平,PB1输出低电平;当摇杆向右时,PB1输出高电平,PB0输出低电平;当摇杆在中间时,PB0和PB1都输出低电平。你可以根据自己的需要修改代码来实现不同的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值