欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于单片机的多路数据采集ADC0809.docx

    • 资源ID:12927345       资源大小:234KB        全文页数:17页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的多路数据采集ADC0809.docx

    1、基于单片机的多路数据采集ADC0809单片机原理与系统课程设计评语:考勤10分守纪10分过程30分设计报告30分答辩20分总成绩(100)专业:自动化班级:自动化姓名: 学号:指导教师:2015年12月29日基于单片机的多路数据采集1 引言通过一个学期的学习,我认为要学好单片机这门课程,不仅要认真学习课本知识,更重要的是要学会通过实践巩固学到的知识,本次课设中我们设计制作的题目是基于单片机的多路数据采集系统设计。1.1 设计背景随着时代的进步和发展,单片机技术已经普与到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数据采集。本设计使用简便,功能丰富。

    2、本设计控制芯片采用的是STC89C51,AD转换采用ADC0809芯片,显示采用的是四位共阴极数码管。关键字:STC89C51、ADC0809、8路电压采集。2.1 系统设计方案在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。本次设计主要由三个模块组成:A/D转换模块,数据处理模块与显示模块。A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。数据处理则由芯片STC89C51来完成,其负责把ADC0809传送来的数

    3、字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外它还控制着ADC0809芯片工作。2.2 总体设计方案图1 系统原理总框图3硬件设计3.1晶振电路晶体振荡器,简称晶振,它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络。晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。图2晶振电路3.2P0口上拉电阻图3九排上拉电阻本次设计中九位排阻在依次连接单片机P0口各引脚的同时并依序连接数码管各引脚(上拉电阻VCC端接单片机VCC端)。上拉电阻既能为单片机提供部分电压能力,同时也能起到预防线路中电流过大的作用。3.38路电压输

    4、入模块电位器是可变电阻器的一种。通常是由电阻体与转动或滑动系统组成,即靠一个动触点在电阻体上移动,获得部分电压输出。电位器的作用即是调节电压(含直流电压与信号电压和电流的大小)。图5 8路电压输入电路3.4显示模块四位数码管是一种半导体发光器件,其基本单元是发光二极管。本次设计用的是4位共阴数码管,其部结构如图6。图6四位数码管部结构图3.5AD转换模块本设计中AD转换采用ADC0809A芯片。ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。该芯

    5、片具有以下特性:1)8路输入通道,8位A/D转换器,即分辨率为8位;2)具有转换起停控制端;3)转换时间为100s(时钟为640kHz时),130s(时钟为500kHz时);4)单个+5V电源供电;5)模拟输入电压围0+5V,不需零点和满刻度校准;图7ADC0809引脚图ADC0809芯片有28条引脚,采用双列直插式封装,其芯片引脚图如图7所示。下面说明各引脚功能。(1)IN0IN7:8路模拟量输入端。(2)D0D7:8位数字量输出端。D0D7均为三态缓冲输出形式,可以和单片机的数据线直接相连。D0为最低位,D7为最高位。(3)A、B、C:3位地址输入线,A为低地址,C为高地址,用于选通8路模

    6、拟输入中的一路。(4)ALE:地址锁存允许信号,输入高电平有效。对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。(5)START:A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。(6)EOC:A/D转换完毕信号输出,当A/D转换完毕时,此端输出一个高电平,转换期间一直为低电平。(7)OE:数据输出允许信号,输入高电平有效。当A/D转换完毕时,此端输入一个高电平,才能打开输出三态门,输出数字量。(8)CLK:时钟脉冲输入端,要求时钟频率不高于640KHZ。ADC0809的部没有时钟电路,所需时钟信号由外界提供,因此有时

    7、钟信号引脚。(9)VREF(+)、VREF(-):基准电压。用来与输入的模拟信号进行比较,作为逐次逼近的基准。A/D转换后得到的数据应与时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用如下方式。A/D转换芯片有说明转换完成的状态信号,ADC0809的EOC端。因此可以用查询方式,查询EOC的状态,可确认转换是否完成,并接着进行数据传送。3.6八路led灯显示根据输入通道选择点亮对应的led灯。3.7实物调试图4 软件设计4.1 Proteus软件仿真对抢答器电路图的Proteus软件仿真主要是由我完成的,在实际电路设计中,需要先

    8、通过仿真软件测试电路以与编译的程序,检查外围电路设计是否合理,软件编译是否正确,以与软件和硬件电路能否正常配合工作,能否准确的实现所设计的功能。如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的做板子的焊接工作了。我选择了常用的单片机仿真软件proteus7.0以与keil 进行仿真。4.1.1 仿真开始点击开始仿真便出现上图界面,此时数码管上显示的是第一个滑动变阻器上的电压,对应第一个滑动变阻器下面那个LED灯也为亮的状态。这时为手动模式,当按一下按键,检测通道便切换为第二路,同时数码管显示和LED指示都发生相应变化,结果如图8所示。图8仿真开始图9手动切换输入通道4.1.2设置自

    9、动或者手动采集方式如图8所示,长按下进入自动采集并显示状态。每隔3s,跳到下一个采集通道。图10按下开关进入自动采集状态4.2 程序流程图根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序。程序主框图如图11所示。图11程序设计流程图A/D转换流程图,如图12所示。图12A/D转换流程图按键切换流程图,如图13所示。 图13按键切换流程图总 结在本次设计多路数据采集的课设过程中,我们利用AT89C51单片机与ADC0809芯片,利用单片机的定时器/计数器定时和计数的原理输出需要的时钟信号,利用Proteus和Keil软件设计出实验

    10、电路,并且完成了电路板的焊接工作,将件和硬件结合在一起完成了课设的任务。在本次课设中,我意识到将理论知识与实践相结合的重要性,对于单片机这样的课程,仅仅通过了解课本上的知识是远远不够的,我通过查资料和搜集有关文献,培养了自学能力,通过利用软件仿真和焊接电路,在很大程度上提高了我的动手能力。我们在课设的过程中,遇到了很多问题,比如我在硬件电路的搭建过程中错把共阴极数码管接成了共阳极数码管,使得数码管无常显示,通过查看数码管的资料,我修改了显示程序,调试出正确的结果,类似的问题出现了很多,通过一一排查,终于完成了课设任务,结果说明,有付出必有收获,把握重点、攻克难关,活学活用对于牢固的掌握知识,是

    11、非常有用的。在此次课设中,我学到了很多,也通过不断纠正自己的错误,意识到自身的不足,我对知识的掌握还没有实现深层次的理解记忆,我相信这些教训都为我以后的学习奠定了良好的基础,并且在以后的学习中我要有耐心,不能急功近利。 参 考 文 献1 王思明,金敏,苟军年.单片机原理与应用系统设计M.:人民邮电,2008.2育长,邹小兵.单片机系统设计与实例指导M. :电子科技大学,2004.附录A 源程序程序如下:#include /头文件定义#define uchar unsigned char /宏定义#define uint unsigned intsbit P07=P07; /控制数码管/0809

    12、控制端口定义sbit OE=P32; sbit EOC=P31;sbit ST=P30;sbit CLK=P33; /时钟定义sbit A_AD=P22;sbit B_AD=P21;sbit C_AD=P20;sbit Wei1=P24;sbit Wei2=P25;sbit Wei3=P26;sbit Wei4=P27;sbit Hc138_C=P34;sbit Hc138_B=P35;sbit Hc138_A=P36;sbit Mode_Key=P37;sbit Beep=P23;/共阴数码管段码定义 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, Vuchar code tab

    13、le11=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3e;float Ad_Value,V_Value;uchar VOL_Vlaue3;uchar ch_change=0xf0; /通道选择变量 0xf0-0xf7,8路选择void delayms(uint xms) uint i,j; for(i=xms;i0;i-) for(j=110;j0;j-);void Timer_Init() TMOD=0x11; /T0:16位计数 T1:16位计数 TH0=(65536-200)/256; /定时器用于输出的时钟 TL0=(655

    14、36-200)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET0=1; ET1=1; TR0=1; / TR1=1; float Get_0809_Ad( uchar CH ) /CH:0xf0-0xf7,对应8个通道 ST=0; /启动AD转换 OE=0; ST=1; switch (CH) case 0xf0: C_AD=0;B_AD=0;A_AD=0; break; case 0xf1: C_AD=0;B_AD=0;A_AD=1; break; case 0xf2: C_AD=0;B_AD=1;A_AD=0; bre

    15、ak; case 0xf3: C_AD=0;B_AD=1;A_AD=1; break; case 0xf4: C_AD=1;B_AD=0;A_AD=0; break; case 0xf5: C_AD=1;B_AD=0;A_AD=1; break; case 0xf6: C_AD=1;B_AD=1;A_AD=0; break; case 0xf7: C_AD=1;B_AD=1;A_AD=1; break; default: break; ST=0; while(EOC=0); OE=1; Ad_Value=P1; /从P1口读取数据 OE=0; return Ad_Value;void disp

    16、lay() V_Value=(Get_0809_Ad(ch_change)*1.0/255.0)*500.0; /数据处理 VOL_Vlaue0=V_Value/100; VOL_Vlaue1=(uint)V_Value/10%10; VOL_Vlaue2=(uint)V_Value%10; Wei1=0; P0=tableVOL_Vlaue0; P07=1; /显示小数点 delayms(5); Wei1=1; Wei2=0; P0=tableVOL_Vlaue1; delayms(5); Wei2=1; Wei3=0; P0=tableVOL_Vlaue2; delayms(5); Wei

    17、3=1; Wei4=0; P0=table10; /最后一个符号V delayms(5); Wei4=1; void Key() /实现自动循环检测与手动循环检测 uint key_press=0; if(Mode_Key=0) Beep=0; delayms(100); Beep=1; while(Mode_Key=0) key_press+; delayms(10); if(key_press=200) Beep=0; delayms(100); Beep=1; if(key_press=200) /2s TR1=!TR1; else ch_change=ch_change+1; if(c

    18、h_change=0xf8) ch_change=0xf0; void Led_Dis() switch (ch_change) case 0xf0: Hc138_C=0;Hc138_B=0;Hc138_A=0; break; case 0xf1: Hc138_C=0;Hc138_B=0;Hc138_A=1; break; case 0xf2: Hc138_C=0;Hc138_B=1;Hc138_A=0; break; case 0xf3: Hc138_C=0;Hc138_B=1;Hc138_A=1; break; case 0xf4: Hc138_C=1;Hc138_B=0;Hc138_A=

    19、0; break; case 0xf5: Hc138_C=1;Hc138_B=0;Hc138_A=1; break; case 0xf6: Hc138_C=1;Hc138_B=1;Hc138_A=0; break; case 0xf7: Hc138_C=1;Hc138_B=1;Hc138_A=1; break; default: break; void main() Timer_Init(); while(1) Key(); display(); /显示数据 Led_Dis(); /* *定时器服务函数*/void time0() interrupt 1 /TO中断服务,提供时钟信号 TH0=(65536-200)/256; /5k时钟频率 TL0=(65536-200)%256; CLK=CLK; uint t1_flag;void time1() interrupt 3 TH1=(65536-50000)/256; TL1=(65536-50000)%256; t1_flag+; if(t1_flag=20*3) /到达3秒 t1_flag=0; ch_change+; Beep=0; delayms(100); Beep=1; if(ch_change=0xf8) ch_change=0xf0;


    注意事项

    本文(基于单片机的多路数据采集ADC0809.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开