模数转换AD 实验

 

一、  实验目的:

1、了解IO口的结构;

                    2、熟悉A/D的特性;

                    3、掌握A/D的使用。

二、实验仪器:MEGA16实验板  一块

PC  一台

 

三、实验原理:

四、实验步骤及内容

#include <iom16v.h>

#include <macros.h>

#define VREF 4.950

unsigned  int V=0;

float Vin=0;

unsigned char led[]={0X 3F ,0X06,0X5B,0X 4F ,0X66,0X6D,0X7D,0X07,0X 7F ,0X 6F }; //0-9

unsigned char led_putff[]={0X 3F ,0X 3F ,0X 3F ,0X 3F };

 

//*******************延时  us

void delay_us(int t)

{

do

 t--;                                                                                       

while(t>1);

}

//*******************延时  ms

void delay_ms(unsigned int t)

{

while(t!=0)

{

delay_us(1142);

t--;}

}

 

/*....中断....*/

#pragma interrupt_handler ADC_isr:15

void  ADC_isr(void)

{

 V=ADCL;

V=(ADCH<<8)+V;              //读取转换数值

}

 

 

/*....系统初始化....*/

void xhushihua(void)

{

DDRD=0XFF;                  //位选

DDRB=0XFF;                  //数码管

DDRA=0XFE;                  //C0口电压输入

PORTD=0X00;

PORTB=0XC0;

PORTA=0X00;

ADCSRA|=(1<<ADEN);                //开启AD

SEI();

}

 

/*....AD初始化....*/

void ad_link(void)

{

 ADCSRA|=(1<<ADSC)|(1<<ADIE);        //启动转换       

ADCSRA|=(1<<ADPS0)|(1<<ADPS1);      //八分频

ADCSRA|=(1<<ADATE);                 //开启连续模式使能

ADMUX=0X00;                         //右对齐,基准电源VREF。零通道

SFIOR=0X00;                           //开启连续模式

}

 

/*....计算转换值....*/

void led_put(void)

{

unsigned  char sreg;

unsigned  char i=0;

unsigned  char f=0;

unsigned  int X=0;

sreg = SREG;              //保存全局中断标志

CLI();                    //禁用中断

Vin=V*VREF/1024;         //转换数值

X=(unsigned short)(1000*Vin);

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

 {

f=X%10;

led_putff[i]=led[f]; 

X=X/10;

}

led_putff[3]=0X80|led_putff[3];

 SREG=sreg;               //恢复全局中断标志

}

 

/*....数码管扫描....*/

void display(void)

{

unsigned  char i=0;

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

{

 PORTB=led_putff[i];

PORTD|=(1<<i);

delay_us(30);

PORTD=0X00;

}

}

/*....主函数....*/

void main(void)

{

 xhushihua();

 ad_link();

 for(;;)

{

 led_put();

display();

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值