code.c

来自「AVR单片机内部AD变换 AVR内部ADC转换原理: AVR单片机内部的」· C语言 代码 · 共 60 行

C
60
字号
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#define vref 496       
uint8_t ledcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*LED译码*/
uint8_t ledbuff[6];                              /*显示缓冲*/
void delay(uint16_t time)                        /*延时*/
{
   while(time>0)
   time--;
 }
void leddisplay(void)                            /*数码管显示函数*/
{
  uint8_t i;
  for (i=0;i<6;i++)
  {   
   PORTB=ledbuff[i];                           /*需要显示缓冲区数据送到PORTB*/
   PORTD=~(1<<i);                                      
   delay(10);                                   /*每一位显示保持一定时间*/
   PORTD|=(1<<i);                              /*关 闭显示*/  
   }
} 
INTERRUPT(SIG_ADC)                             /*AD变换完成中断处理程序*/
{  
  unsigned int i,temp;
  unsigned int lo_val, hi_val;					/*转换寄存器的低位与高位*/
  unsigned long val;
  lo_val=ADCL;                                    /*读出AD变换结果*/
  hi_val=ADCH;
  val=(((unsigned long)hi_val)<<8)|((unsigned long)lo_val); /*低8位和高8位数据合成16位*/
  temp=(unsigned int)((unsigned long)(val*vref)/1024);      /*AD变换结果转换为电压值*/
  for(i=0;i<3;i++)                                    /*分位显示*/
    {
	  ledbuff[i]=ledcode[temp%10];
	  temp=temp/10;
	}
  ledbuff[2]|=0x80;                                   /*显示小数点*/  
  ADCSR|=(1<<ADSC);                               /*启动下一次AD转换 */
  leddisplay();
}
int main( void )
{
 DDRD=0x3f;
 PORTD=0xff; 
 DDRB=0xff;
 PORTB=0xff;                                      /*I/O口初始化*/
 uint8_t i; 
 for(i=0;i<3;i++)                                     /*清空缓冲区数据 */
 ledbuff[i]=ledcode[0];
 ledbuff[3]=0x00;                                    
 ledbuff[4]=0x5e;                                     /*显示'd'*/
 ledbuff[5]=0x77;                                     /*显示'A' */
 ADMUX =0x00;                                     //ADC寄存器初始化
 ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|0X06;      
 sei();
 for(;;){};
}

⌨️ 快捷键说明

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