您的位置 首页 编程

avr0~5V数字式直流电压表规划

一、实验目的1掌握AD转换程序的设计;2掌握数据采集与显示的应用;3.掌握数据处理的方法;二、实验内容1参照课本P383页0~5V数

一、试验意图

1. 把握A/D转化程序的规划;

2. 把握数据收集与显现的运用;

3.把握数据处理的办法;

二、试验内容

1. 参照讲义P383页“0~5V数字式直流电压表试验”程序,并编译、仿真,见下图所示。

留意:因为用proteus ISIS仿真时,数码管模型显现的闪耀现象和缓存现象,需求对其进行短延时和清屏,不然,显现将呈现乱码现象。可在main()主函数里参加两条句子:

Delay(1);

PORTA=0;

(1)修正过错。

比较程序第25行“ADMUX=0XC7”以及程序第71行“x=(5000*(long)i)/1023”所指参阅电压不共同,导致输入模仿电压值与数码管显现电压值不共同,有哪几种修正计划。

如把ADMUX=0XC7改为0X07。

(2)调理电位器(POT-LOG),调查数码管显现的电压值与虚拟直流电压表显现的电压是否共同。

2.将编译通往后的程序烧写到单片机里,调理AD电位器,观看开发板上数码管的显现状况。

留意数码管的位选端摆放次序,试验板与讲义电路图中数码管排序不同,故需求调整位选端。

3.假如想调查ADC转化后的数字成果,则需将数码管显现改为:

PORTA=SEG7[adc_val%10];

………

顺次类推。

三、拓宽试验

把数码管显现改为LCD1602液晶显现。(可参阅P240“0~5V数字电压调整器”lcd部分程序内容)

留意:因运用PA7为输入端口,而PA口为原电路中LCD1602的数据端口,故把数据端口改为PC口,留意要把lcd1602液晶的驱动程序“lcd1602_8bit.c”中的句子“#define DataPort PORTA”改为“#define DataPort PORTC”。Proteus ISIS仿真图如下图。

四、附运用LCD1602显现ADC参阅程序


#include  #include "lcd1602_8bit.c"uchar const title[]={"0-5v D_voltager"}; #define uchar unsigned char #define uint  unsigned int uint adc_val,dis_val; uchar i,cnt; /************************************************/void port_init(void) { PORTA = 0x7F; DDRA  = 0x7F;    PORTB = 0xFF;DDRB  = 0xFF; PORTC = 0xFF; DDRC  = 0xFF; PORTD = 0xFF; DDRD  = 0xFF; } /************************************************/void adc_init(void)     { ADCSRA = 0xE3;    ADMUX = 0x47;  } //***************************void timer0_init(void)   { TCNT0 = 0x83; TCCR0 = 0x03;  TIMSK = 0x01;   } /*********************************************/void init_devices(void)    { port_init();    timer0_init();    adc_init();     SREG =0x80;        } //***************************#pragma interrupt_handler timer0_ovf_isr:10   void timer0_ovf_isr(void) { TCNT0 = 0x83;    cnt++;         }//=========================uint ADC_Convert(void) {uint temp1,temp2;  adc_init();temp1=(uint)ADCL; temp2=(uint)ADCH;temp2=(temp2<<8)+temp1; return(temp2);    }/**************************/uint conv(uint i)    {long x;     uint y; x=(5000*(long)i)/1023; y=(uint)x;    return y;  } void delay(uint k)   {uint i,j;for(i=0;i100) {adc_val=ADC_Convert();   dis_val=conv(adc_val);   cnt=0;                   }delay(10); DisplayOneChar(5,1,(adc_val/1000)+0x30);DisplayOneChar(6,1,(adc_val/100)%10+0x30);DisplayOneChar(7,1,(adc_val/10)%10+0x30);DisplayOneChar(8,1,(adc_val%10)+0x30);DisplayOneChar(10,1,(dis_val/1000)+0x30);DisplayOneChar(12,1,(dis_val/100)%10+0x30);DisplayOneChar(13,1,(dis_val/10)%10+0x30);DisplayOneChar(14,1,(dis_val%10)+0x30); }}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/319436.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部