avr0~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;i 100) {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); }}
av数字式直流电压 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)