⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc8.c

📁 八路电压的采集
💻 C
字号:
#include <iom8v.h>
#include <macros.h>
#include "delay.h"
#define uchar unsigned char
#define uint  unsigned int
#define ulong  unsigned long
#define led1_1  PORTD|=(1<<4) 
#define led2_1  PORTD|=(1<<5)
#define led3_1  PORTD|=(1<<6)
#define led4_1  PORTD|=(1<<7)
#define led1_0  PORTD&=~(1<<4) 
#define led2_0  PORTD&=~(1<<5)
#define led3_0  PORTD&=~(1<<6)
#define led4_0  PORTD&=~(1<<7)
#define data_1  PORTD|=(1<<0) 
#define data_0  PORTD&=~(1<<0) 
#define clk_1  PORTD|=(1<<1) 
#define clk_0  PORTD&=~(1<<1)
int led_buff[4]={0,0,0,0};
const char seg_table[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};

void BINtoBCD(uint count)
{char i;int temp;
 for(i=0;i<4;i++)
 { temp=count%10;
   led_buff[i]=temp;
   count=count/10;
 }

}
//发送一个字节
void send_1byte(int data)
{int i;
 for(i=0;i<8;i++)
 {clk_1;
 if(data&(1<<i))
 data_1;
 else
  data_0;
  clk_0;
 }
 clk_1;
}
//发送并显示四个字节
void send_4byte()
{int t=200;
led1_1;
send_1byte(seg_table[led_buff[3]]);
send_1byte((seg_table[led_buff[3]]&0x7f));//点亮小数点
delay_nus(t);
led1_0;
led2_1;
send_1byte(seg_table[led_buff[2]]);
delay_nus(t);
led2_0;
led3_1;
send_1byte(seg_table[led_buff[1]]);
delay_nus(t);
led3_0;
led4_1;
send_1byte(seg_table[led_buff[0]]);
delay_nus(t);
led4_0;
}
//AD测量结果转换
#define AREF 5000
ADCtoBIN(void)
{long result;
 result=ADCH*256+ADCL;
 result=(ulong)(((ulong)((ulong)result*AREF))/1024);
 return(result);
}
//端口初始化
void port_init(void)
{
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0xFF;
}



//ADC initialize
// Conversion time: 6uS
void adc_init(int x)
{
 ADCSR = 0x00; //disable adc
 ADMUX = x; //select adc input 0
 ACSR  = 0x80;
 ADCSR = 0xC1;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
// adc_init();

 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

void main()
{ ulong a;int x=0;
 port_init();
 PORTB|=(1<<0);
while(1)
  {
   //init_devices();
  adc_init(x);
  a=ADCtoBIN();
  BINtoBCD(a);
  send_4byte();
  delay_nms(20);
  if (!(PINB&0x01))
  {
    while(!(PINB&0x01));
	x++;
	if(x==6) x=0;
  }
  
 } 
}

⌨️ 快捷键说明

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