📄 adc8.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 + -