• AVR单片机 ATMEGA8单片机 ADC电压采样 数码管输出


    1. 先看原理图,使用内部的ADC电压采样,通过数码管输出

    2. 相关代码

    #include <avr/io.h>
    
    //1 总的来说,ADC总共有3个寄存器,
    //  这个ADC是10位的,原来找到了寄存器的头文件
    #define  LED_DATA PORTD
    #define  LED_CONTROL PORTB
    #define  LED_0    PORTB0
    #define  LED_1    PORTB1
    #define  JI_DIAN_QI PORTC1
    #define  DIAN_JI PORTC3
    #define  LED_2    PORTB2
    #define  JI_DIAN_QI_ON  PORTC |= (1<<PORTC1)
    #define  JI_DIAN_QI_OFF PORTC &= ~(1<<PORTC1)
    
    #define  DIAN_JI_ON  PORTC |= (1<<PORTC3)
    #define  DIAN_JI_OFF PORTC &= ~(1<<PORTC3)
    
    //1 目前看来引脚的顺序发生了变化
    //  ADC采样用的是ADC2
    //  电机控制是PC3
    //  继电器控制是PC1
    char buf[3] = {0};
    char adc_buf[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
    
    
    void AD_Init(void)
    {
        //参考电压AREF,左对齐,ADC2单端输入
        ADMUX |= (1 << ADLAR) | (1 << MUX1);
        //AD使能, 连续转换,中断使能,32分频, 6M / 32 = 187.5khz
        ADCSRA |= (1 << ADEN) | (1 << ADFR) | (1 << ADPS2) | (1 << ADPS0);
        //AD开始转换
        ADCSRA |= (1 << ADSC);
    }
    
    void delay(unsigned int j)
    {
        while(j--)
        {
                int i = 20000;
                while(i--);    
        }
    
    }
    
    void gpio_init()
    {
        DDRD = 0XFF;
        DDRB |= (1<<LED_1) + (1<<LED_2) + (1<<LED_0);
    
        DDRC |= (1<<JI_DIAN_QI) + (1<<DIAN_JI);
        JI_DIAN_QI_OFF;
        DIAN_JI_OFF;
    }
    
    void led_display()
    {
        int i =10000;
        while(i--)
        {
            
            LED_DATA = buf[0];
            LED_CONTROL |= 1<<LED_0;
            delay(50000);
            delay(50000);
            delay(50000);
            delay(50000);
            LED_CONTROL &= ~(1<<LED_0); 
            
            LED_DATA = buf[1];
            LED_CONTROL |= 1<<LED_1;
            delay(50000);
            delay(50000);
            delay(50000);
            delay(50000);
            LED_CONTROL &= ~(1<<LED_1);
                    
            LED_DATA = buf[2];
            LED_CONTROL |= 1<<LED_2;
            delay(50000);
            delay(50000);
            delay(50000);
            delay(50000);
            LED_CONTROL &= ~(1<<LED_2);    
        }    
    }
    int main(void)
    {
        unsigned  long int result = 0;
        
        unsigned char i;
        unsigned char flag = 0;
        gpio_init();
        //AD初始化
        AD_Init();
    
         while(1)
         {
             i = 5;
             result = 0;
             //1 循环10次采样,求平均值
             AD_Init();
             while(i--)
             {
                while((ADCSRA & (1 << ADIF)) == 0);
                //读取转换值
                result += ADCH; 
             }
    
             //result = result/10;
        
             result = ((result * 50 * 3)/5)/254;
             
            //JI_DIAN_QI_ON;
            //DIAN_JI_ON;
    
             
                     if(result < 108)
                     {
                         flag = 1;
                         JI_DIAN_QI_ON;
                     }
                     else if(result > 144)
                     {
                         flag = 2;
                         JI_DIAN_QI_OFF;
                     }
                     else
                     {
                         if(flag == 1)
                         JI_DIAN_QI_ON;
                         else if(flag == 2)
                         JI_DIAN_QI_OFF;     
                     }
                     
                     if(result > 110)
                      DIAN_JI_ON;
                     else
                      DIAN_JI_OFF;
                
            
             //数据更新
             buf[2] = adc_buf[result / 100];
             buf[1] = adc_buf[result % 100 / 10];
             buf[0] = adc_buf[result % 10 ]; 
             //数据显示
             led_display();
         }
    }
  • 相关阅读:
    aspnet中存储session的各种方法
    Response.ContentType 详细列表
    常用命令行命令
    关于使用request[this.控件名.Unique]获取控件值的问题
    在Asp.net中动态添加css文件,js文件,控件
    关于.Net中垃圾回收机制的理解:
    简单概念
    天健
    (转)高效调用lua函数
    (转)hlsl函数
  • 原文地址:https://www.cnblogs.com/429512065qhq/p/15826653.html
Copyright © 2020-2023  润新知