proteus课程设计基于单片机的数据采集.docx

上传人:b****5 文档编号:28454232 上传时间:2023-07-13 格式:DOCX 页数:14 大小:153.34KB
下载 相关 举报
proteus课程设计基于单片机的数据采集.docx_第1页
第1页 / 共14页
proteus课程设计基于单片机的数据采集.docx_第2页
第2页 / 共14页
proteus课程设计基于单片机的数据采集.docx_第3页
第3页 / 共14页
proteus课程设计基于单片机的数据采集.docx_第4页
第4页 / 共14页
proteus课程设计基于单片机的数据采集.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

proteus课程设计基于单片机的数据采集.docx

《proteus课程设计基于单片机的数据采集.docx》由会员分享,可在线阅读,更多相关《proteus课程设计基于单片机的数据采集.docx(14页珍藏版)》请在冰豆网上搜索。

proteus课程设计基于单片机的数据采集.docx

proteus课程设计基于单片机的数据采集

电子设计应用软件训练总结报告

一.任务说明

(一)设计利用51单片机设计一个数据采集系统,用3位数码管显示输入的电压:

二.原理图绘制说明

电路原理图主要应包含数据采集电路,AD(模数)转换电路,数据显示电路三个部分。

下面分三个部分进行说明。

(一)数据采集电路

根据任务的要求,该部分电路需要对八路数据进行采集,然后输出到下一级电路,在这里,用八个显示不同电压值的电压源来构成,其输出端对应连接到AD转换电路的输入端即可。

(二)AD(模数)转换电路

根据任务的要求,本部分电路需要把数据采集电路采集到的模拟电压量转换成数字电压量,所以在这里选用一个ADC0808芯片作为AD转换电路,本部分电路需把转换之后的数字量输出到数据显示电路即可。

ADC0808是一个有8路输入的AD转换器,可以根据需要来选择使用的输入通道个数,用ABC三个端口可以控制通道的选择,这里因为需要对八路数据进行采集转换,所以,这里需要使用ADC0808所有的输入通道,通道0到7分别和电压源0到7进行连接。

转换启动信号START和地址所存信号ALE都是用51单片机的P2.7和P3.6口通过与非门后的输出来控制,允许输出信号OE由P2.7口和P3.7口通过与非门后的输出控制,通道选择端控制端ABC分别用单片机的P0.0,P0.1和P0.2三个端口来控制。

转换结果输出端(OUT0到OUT7)通过总线分别与51单片机的P0.7到P0.0口连接。

具体连接方式如图1所示:

图1AD转换电路的连接方式

(三)数据显示电路

本部分电路主要由AT89C51单片机和一个四位一体的共阴极的数码管以及电阻构成。

其中,前三个数码管用来显示采集到的电压值,后一个数码管用来显示采集数据来自哪路通道。

51单片机的P3.0,P3.1,P3.2,P3.3口分别用来控制数码管的开启和关闭,P2.0到P2.6以及P3.5分别与数码管的各段连接。

具体链接方式如图2所示:

图2数据显示电路

三.流程图绘制以及说明

(一)主程序流程图如图3所示:

说明:

程序开始执行后,首先启动ADC0808,执行AD转换,接着判断转换是否结束,如果转换没有结束,则程序原地等待,如果转换结束,ADC0808允许转换后数据输出,同时将输出数据暂存起来,此时关闭输出;同时,由单片机将接收到得数字量转换成BCD码,再调用BCD码显示子程序来显示转换后的BCD码,到此,程序结束。

这样,主程序就完成了一次模拟量采集,AD转换,BCD码转换,并最终显示的过程。

图3主程序流程图

(二)显示子程序流程图如图4所示:

说明:

子程序开始后,通过查表法来获取数码管要显示的数据并且暂存,接下来选通某位数码管,来显示数据,然后调用延时子程序,延时结束后关闭该位数码管,各位数码管的显示都是这样的流程,当需要显示的数据都显示完毕后,返回主程序。

 

图4显示子程序流程图

(三)延时子程序如图5所示:

说明:

首先是初始化,即赋初值。

接着判断循环是否结束,如果未结束,则继续执行,如果进行第二层循环,同样,循环未结束则继续执行,如果结束,则返回。

图6延时子程序流程图

运行结果示例图如图8所示:

图8运行示例图

改变电压源的输出电压,实现采集数据的变化,采集数据即电压值由ADC0808的八个通道输入,实现模拟量到数字量的转换,再由单片机实现数字量到BCD码的转换,最后由单片机控制数码管输出,这样整个数据采集到显示的过程就实现了。

图中,数码管显示的数据即为数据采集后变换为BCD码的输出,其中,前三位现实的是AD转换后的数据,最后一位现显示的是该时刻转换的通道号,其前面的小数点使用以区分数据输出是数字电压量还是通道号的。

 

附录Ⅰ电路原理图

图9电路原理图

附录Ⅱ源程序

#ifndef__ABSACC_H__

#define__ABSACC_H__

#defineCBYTE((unsignedcharvolatilecode*)0)

#defineDBYTE((unsignedcharvolatiledata*)0)

#definePBYTE((unsignedcharvolatilepdata*)0)

#defineXBYTE((unsignedcharvolatilexdata*)0)

#defineCWORD((unsignedintvolatilecode*)0)

#defineDWORD((unsignedintvolatiledata*)0)

#definePWORD((unsignedintvolatilepdata*)0)

#defineXWORD((unsignedintvolatilexdata*)0)

#ifdef__CX51__

#defineFVAR(object,addr)(*((objectvolatilefar*)(addr)))

#defineFARRAY(object,base)((objectvolatilefar*)(base))

#defineFCVAR(object,addr)(*((objectconstfar*)(addr)))

#defineFCARRAY(object,base)((objectconstfar*)(base))

#else

#defineFVAR(object,addr)(*((objectvolatilefar*)((addr)+0x10000L)))

#defineFCVAR(object,addr)(*((objectconstfar*)((addr)+0x810000L)))

#defineFARRAY(object,base)((objectvolatilefar*)((base)+0x10000L))

#defineFCARRAY(object,base)((objectconstfar*)((base)+0x810000L))

#endif

#endif

#include"adc0809.c"

#defineLED_DataP2

#defineA10

#defineU11

sbitLED1=P3^0;

sbitLED2=P3^1;

sbitLED3=P3^2;

sbitLED4=P3^3;

sbitdp=P3^5;

#defineLED_slectP3

staticuchardispdata[4];

voiddecodenum(floatadv,ucharchn)

{

uinttemp;

temp=(uint)(adv*100);

dispdata[0]=temp/100;

dispdata[1]=temp/10%10;

dispdata[2]=temp%10;

dispdata[3]=chn;

}

voidselect(ucharLED)

{

switch(LED)

{

case0:

LED1=0;break;

case1:

LED2=0;break;

case2:

LED3=0;break;

case3:

LED4=0;break;

default:

LED_slect=0xff;

}

}

voiddispone(ucharLED,bitifpoint,ucharnumber)//,number0--9

{

select(LED);

if(ifpoint)

dp=1;

else

dp=0;

LED_Data=num[number]|0x80;

delayus(200);

LED_slect=0xff;

}

voiddisp()

{

uchari;

bitpoint;

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

{

if(i==1)

point=0;

else

point=1;

dispone(i,point,dispdata[i]);

}

}

#include

#include

#include"numcode.h"

#defineucharunsignedchar

#defineuintunsignedint

#defineadinXBYTE[0x7fff]

voiddelayus(uintus)

{

while(us--);

}

ucharad_action(ucharchn)

{

ucharread_data;

adin=chn;

delayus(6);

read_data=adin;

returnread_data;

}

#ifndef__REG51_H__

#define__REG51_H__

/*BYTERegister*/

sfrP0=0x80;

sfrP1=0x90;

sfrP2=0xA0;

sfrP3=0xB0;

sfrPSW=0xD0;

sfrACC=0xE0;

sfrB=0xF0;

sfrSP=0x81;

sfrDPL=0x82;

sfrDPH=0x83;

sfrPCON=0x87;

sfrTCON=0x88;

sfrTMOD=0x89;

sfrTL0=0x8A;

sfrTL1=0x8B;

sfrTH0=0x8C;

sfrTH1=0x8D;

sfrIE=0xA8;

sfrIP=0xB8;

sfrSCON=0x98;

sfrSBUF=0x99;

/*BITRegister*/

/*PSW*/

sbitCY=0xD7;

sbitAC=0xD6;

sbitF0=0xD5;

sbitRS1=0xD4;

sbitRS0=0xD3;

sbitOV=0xD2;

sbitP=0xD0;

/*TCON*/

sbitTF1=0x8F;

sbitTR1=0x8E;

sbitTF0=0x8D;

sbitTR0=0x8C;

sbitIE1=0x8B;

sbitIT1=0x8A;

sbitIE0=0x89;

sbitIT0=0x88;

/*IE*/

sbitEA=0xAF;

sbitES=0xAC;

sbitET1=0xAB;

sbitEX1=0xAA;

sbitET0=0xA9;

sbitEX0=0xA8;

/*IP*/

sbitPS=0xBC;

sbitPT1=0xBB;

sbitPX1=0xBA;

sbitPT0=0xB9;

sbitPX0=0xB8;

/*P3*/

sbitRD=0xB7;

sbitWR=0xB6;

sbitT1=0xB5;

sbitT0=0xB4;

sbitINT1=0xB3;

sbitINT0=0xB2;

sbitTXD=0xB1;

sbitRXD=0xB0;

/*SCON*/

sbitSM0=0x9F;

sbitSM1=0x9E;

sbitSM2=0x9D;

sbitREN=0x9C;

sbitTB8=0x9B;

sbitRB8=0x9A;

sbitTI=0x99;

sbitRI=0x98;

#endif

unsignedcharcodenum[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x3e

};

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

当前位置:首页 > 医药卫生 > 基础医学

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

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