05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx

上传人:b****4 文档编号:15674930 上传时间:2022-11-12 格式:DOCX 页数:16 大小:72.58KB
下载 相关 举报
05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx_第1页
第1页 / 共16页
05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx_第2页
第2页 / 共16页
05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx_第3页
第3页 / 共16页
05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx_第4页
第4页 / 共16页
05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx

《05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

05V数字式直流电压表设计实验报告《电子与控制系统设计》实验报告Word文档格式.docx

综合

设计

其他

*

一、实验目的

1.掌握A/D转换程序的设计;

2.掌握数据采集与显示的应用;

3.掌握数据处理的方法;

二、实验内容

1.编一程序,实现0~5V数字式直流电压表功能,用电位器RV1作模拟量的输入,右边4

位数码管显示输入电压值,使用PA7进行模拟量输入。

其仿真电路见下图5-1所示。

图5-10~5V数字式直流电压表仿真电路图

2.实现输入信号的幅值为0~10V,重新设计实现电路和算法程序,电路图如5-2所示。

图5-20~10V数字式直流电压表仿真电路图

三、使用仪器设备及材料

1、安装windowsxp操作系统的微型计算机1台

2、AVR单片机C语言集成开发环境ICCAVR6.31A

3、单片机仿真平台proteus7.5

4、AVR单片机下载软件progisp

5、AVR单片机实验板1套(含下载器)

四、实验过程原始记录

1、主程序流程图

2.显示函数流程图:

2、软件主要程序及注解

驱动程序:

/*******LCD1602液晶驱动程序***************/

#include<

iom16v.h>

macros.h>

#definextal8

#definePB00

#definePB11

#definePB22

//----------------------------

#defineucharunsignedchar

#defineuintunsignedint

#defineSET_BIT(x,y)(x|=(1<

<

y))

#defineCLR_BIT(x,y)(x&

=~(1<

#defineGET_BIT(x,y)(x&

=(1<

//-------端口电平的宏定义------------

#defineLCM_RS_1SET_BIT(PORTB,PB0)

#defineLCM_RS_0CLR_BIT(PORTB,PB0)

#defineLCM_RW_1SET_BIT(PORTB,PB1)

#defineLCM_RW_0CLR_BIT(PORTB,PB1)

#defineLCM_EN_1SET_BIT(PORTB,PB2)

#defineLCM_EN_0CLR_BIT(PORTB,PB2)

//------------------------------

#defineDataPortPORTA

#defineBusy0x80

//**********函数声明********************

voidDelay_1ms(void);

voidDelay_nms(uintn);

voidLcdWriteData(ucharW);

voidLcdWriteCommand(ucharCMD);

voidInitLcd(void);

voidDisplayLine2(uchardd);

voidDisplayOneChar(ucharx,uchary,ucharWdata);

voidePutstr(ucharx,uchary,ucharconst*ptr);

/***********显示指定坐标的一串字符子函数************/

voidePutstr(ucharx,uchary,ucharconst*ptr)

{

uchari,l=0;

while(ptr[l]>

31){l++;

}

for(i=0;

i<

l;

i++){

DisplayOneChar(x++,y,ptr[i]);

if(x==16){

x=0;

y^=1;

}

//**********演示第二行移动字符串子函数************

voidDisplayLine2(uchardd)

uchari;

16;

DisplayOneChar(i,1,dd++);

dd&

=0x7f;

if(dd<

32)dd=32;

//***********显示光标定位子函数******************

voidLocateXY(charposx,charposy)

uchartemp=0;

temp&

temp=posx&

0x0f;

posy&

=0x01;

if(posy)temp|=0x40;

temp|=0x80;

LcdWriteCommand(temp);

//**********显示光标定位的一个字符子函数***********

voidDisplayOneChar(ucharx,uchary,ucharWdata)

LocateXY(x,y);

LcdWriteData(Wdata);

//***********LCD初始化子函数******************

voidInitLcd(void)

LcdWriteCommand(0x38);

//显示模式设置(固定),8位数据接口

Delay_nms(5);

LcdWriteCommand(0x01);

//清屏

LcdWriteCommand(0x0c);

//开显示,不显示光标

//************写命令到LCM子函数************

voidLcdWriteCommand(ucharCMD)

LCM_RS_0;

LCM_RW_0;

DataPort=CMD;

LCM_EN_1;

Delay_nms

(1);

LCM_EN_0;

//************写数据到LCM子函数*************

voidLcdWriteData(uchardataW)

LCM_RS_1;

DataPort=dataW;

//***********1ms延时子函数*******************

voidDelay_1ms(void)

{uinti;

for(i=1;

(uint)(xtal*143-2);

i++);

//=============n*1ms延时子函数================

voidDelay_nms(uintn)

uinti=0;

while(i<

n)

{Delay_1ms();

i++;

}

0~5V数字式直流电压表程序:

ucharconstSEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//单个数码管1~9显示

ucharconstACT[4]={0xfe,0xfd,0xfb,0xf7};

//选通数码管

uintadc_val,dis_val;

uchari,cnt;

/************************************************/

voidport_init(void)

PORTA=0x7F;

DDRA=0x7F;

PORTB=0xFF;

DDRB=0xFF;

PORTC=0xFF;

DDRC=0xFF;

PORTD=0xFF;

DDRD=0xFF;

voidadc_init(void){

ADCSRA=0xE3;

ADMUX=0x47;

//***************************

voidtimer0_init(void){

TCNT0=0x83;

TCCR0=0x03;

TIMSK=0x01;

/*********************************************/

voidinit_devices(void)

port_init();

timer0_init();

adc_init();

SREG=0x80;

#pragmainterrupt_handlertimer0_ovf_isr:

10

voidtimer0_ovf_isr(void)

TCNT0=0x83;

cnt++;

//=========================

uintADC_Convert(void)

{uinttemp1,temp2;

temp1=(uint)ADCL;

temp2=(uint)ADCH;

temp2=(temp2<

8)+temp1;

return(temp2);

/**************************/

uintconv(uinti)

longx;

uinty;

x=(5000*(long)i)/1023;

y=(uint)x;

returny;

voiddelay(uintk)

uinti,j;

k;

i++)

{

for(j=0;

j<

1141;

j++);

/***********************/

voidmain(void)

init_devices();

delay(400);

DDRA=0X7F;

PORTA=0X7F;

DDRC=0XFF;

PORTC=0X00;

DDRB=0XFF;

PORTB=0X00;

while

(1)

if(cnt>

100)

adc_val=ADC_Convert();

dis_val=conv(adc_val);

cnt=0;

delay(10);

100;

PORTC=ACT[0];

PORTB=SEG7[d

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1