1、基于单片机的多路数据采集ADC单片机原理及系统课程设计评语:考勤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来完成,其
3、负责把ADC0809传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模 块进行显示;此外它还控制着 ADC0809芯片工作。2.2总体设计方案3硬件设计3.1晶振电路晶体振荡器,简称晶振,它可以等效成一个电容和一个电阻并联再串联一个 电容的二端网络。晶振有一个重要的参数,那就是负载电容值,选择与负载电容 值相等的并联电容,就可以得到晶振标称的谐振频率。图2晶振电路3.2 P0 口上拉电阻图3九排上拉电阻本次设计中九位排阻在依次连接单片机 P0 口各引脚的同时并依序连接数码管 各引脚(上拉电阻VCC端接单片机VCC端)o上拉电阻既能为单片机提供部分电 压能力,同时也能起到预防线路中电流
4、过大的作用。3.38路电压输入模块电位器是可变电阻器的一种。通常是由电阻体与转动或滑动系统组成, 即靠 一个动触点在电阻体上移动,获得部分电压输出。电位器的作用即是调节电压(含 直流电压与信号电压和电流的大小)。11mn图5 8路电压输入电路3.4显示模块四位数码管是一种半导体发光器件, 其基本单元是发光二极管。本次设计用 的是4位共阴数码管,其内部结构如图6。DSJ Dpy Ambeh-iCC1 1174211053a to* y 6309-1TT图6四位数码管内部结构图3.5 AD转换模块本设计中AD转换采用ADC0809A5片。ADC0809是美国国家半导体公司生产 的CMOS:艺8通道
5、,8位逐次逼近式A/D模数转换器。其内部有一个 8通道多 路开关,它可以根据地址码锁存译码后的信号, 只选通8路模拟输入信号中的一 个进行A/D转换。该芯片具有以下特性:1) 8路输入通道,8位A/D转换器,即分辨率为8位;2) 具有转换起停控制端;3) 转换时间为100卩s(时钟为640kHz时),130卩s (时钟为500kHz时);4) 单个+5V电源供电;5) 模拟输入电压范围0+5V,不需零点和满刻度校准;Component1图7 ADC0809引脚图ADC0809芯片有28条引脚,采用双列直插式封装,其芯片引脚图如图 示。下面说明各引脚功能。(1)IN0IN7: 8路模拟量输入端。
6、(2) D0D7: 8位数字量输出端。D(D7均为三态缓冲输出形式,可以和 单片机的数据线直接相连。D0为最低位,D7为最高位。(3)A、B、C: 3位地址输入线,A为低地址,C为高地址,用于选通8路 模拟输入中的一路。(4)ALE地址锁存允许信号,输入高电平有效。对应 ALE上跳沿,A、B、 C地址状态送入地址锁存器中。(5) START A/D转换启动脉冲输入端,输入一个正脉冲(至少 100ns宽) 使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。(6)EOC A/D转换结束信号输出,当A/D转换结束时,此端输出一个高电 平,转换期间一直为低电平。(7)OE数据输出允许信号,输
7、入高电平有效。当 A/D转换结束时,此端 输入一个高电平,才能打开输出三态门,输出数字量。(8) CLK时钟脉冲输入端,要求时钟频率不高于 640KHZ ADC080啲内部 没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。(9)VREF( +)、VREF(-):基准电压。用来与输入的模拟信号进行比较, 作为逐次逼近的基准。A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题 是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用 如下方式。A/D转换芯片有表明转换完成的状态信号,ADC0809勺EOC端。因此可以用 查询方式,查询EOC的状态,可确认
8、转换是否完成,并接着进行数据传送。3.6八路led灯显示根据输入通道选择点亮对应的led灯3.7实物调试图4.软件设计4.1 Proteus软件仿真对抢答器电路图的Proteus软件仿真主要是由我完成的,在实际电路设计中, 需要先通过仿真软件测试电路以及编译的程序, 检查外围电路设计是否合理,软件编译是否正确,以及软件和硬件电路能否正常配合工作, 能否准确的实现所设计的功能。如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的 做板子的焊接工作了。我选择了常用的单片机仿真软件 proteus7.0以及keil进行 仿真。4.1.1仿真开始点击开始仿真便出现上图界面,此时数码管上显示的是
9、第一个滑动变阻器上的 电压,对应第一个滑动变阻器下面那个 LED灯也为亮的状态。这时为手动模式, 当按一下按键,检测通道便切换为第二路,同时数码管显示和 LED指示都发生相应变化,结果如图8所示。图8仿真开始图9手动切换输入通道4.1.2设置自动或者手动采集方式如图8所示,长按下进入自动采集并显示状态 每隔3s,跳到下一个采集通道。图10按下开关进入自动采集状态4.2程序流程图A/D转换子程序和显示子 程序主框图如图11所示。根据模块的划分原则,将该程序划分初始化模块, 程序,这三个程序模块构成了整个系统软件的主程序。调用AD转换程 序调用数据处理 程序调用显示程序图11程序设计流程图A/D转
10、换流程图,如图12所示。图12 A/D转换流程图按键切换流程图,如图13所示。Key_press=O蜂鸣器响延时Key_press+TR1取反采集下一个通道图13按键切换流程图总结在本次设计多路数据采集的课设过程中,我们利用 AT89C51单片机及ADC0809芯片,利用单片机的定时器/计数器定时和计数的原理输出需要的时钟 信号,利用Proteus和Keil软件设计出实验电路,并且完成了电路板的焊接工作, 将件和硬件结合在一起完成了课设的任务。在本次课设中,我意识到将理论知识与实践相结合的重要性,对于单片机这 样的课程,仅仅通过了解课本上的知识是远远不够的,我通过查资料和搜集有关 文献,培养了
11、自学能力,通过利用软件仿真和焊接电路, 在很大程度上提高了我 的动手能力。我们在课设的过程中,遇到了很多问题,比如我在硬件电路的搭建 过程中错把共阴极数码管接成了共阳极数码管, 使得数码管无法正常显示,通过查看数码管的资料,我修改了显示程序,调试出正确的结果,类似的问题出现了 很多,通过一一排查,终于完成了课设任务,结果表明,有付出必有收获,把握 重点、攻克难关,活学活用对于牢固的掌握知识,是非常有用的。在此次课设中,我学到了很多,也通过不断纠正自己的错误,意识到自身的 不足,我对知识的掌握还没有实现深层次的理解记忆,我相信这些教训都为我以 后的学习奠定了良好的基础,并且在以后的学习中我要有耐
12、心,不能急功近利。参考文献1王思明,张金敏,苟军年单片机原理及应用系统设计 M.北京:人民邮电出版社,2008.2冯育长,邹小兵.单片机系统设计与实例指导M.西安:西安电子科技大学出版社 ,2004.附录A源程序程序如下:#i nclude 头文件定义#defi ne uchar un sig ned char / 宏定义#defi ne uint un sig ned intsbit P07=P0A7; 控制数码管/0809控制端口定义sbit OE=P3A2;sbit EOC=P3A1;sbit ST=P3A0;sbit CLK=P3A3; / 时钟定义sbit A_AD=P2A2;sbi
13、t B_AD=P2A1;sbit C_AD=P2A0;sbit Wei1=P2A4;sbit Wei2=P2A5;sbit Wei3=P2A6;sbit Wei4=P2A7;sbit Hc138_C=P3A4;sbit Hc138_B=P3A5;sbit Hc138_A=P3A6;sbit Mode_Key=P3A7;sbit Beep=P2A3;/共阴数码管段码定义 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,Vuchar code table11=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3e; float Ad_
14、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 Timerni t() _TMOD=0x11; /T0:16 位计数 T1 : 16 位计数TH0=(65536-200)/256; /定时器用于输出的时钟TL0=(65536-200)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;E
15、T1=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; break;case 0xf3: C_AD=0;B_AD=1;A_AD=1; break;case 0xf4: C_AD=1;B_AD=0;A_AD=0; break;cas
16、e 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 display()V_Value=(Get_0809_Ad(ch_cha nge)*1.0/255.0)*500.0; 数据处理VOL_Vlaue0=V_Value/100;VOL_Vlaue
17、1=(ui nt)V_Value/10%10;VOL_Vlaue2=(ui nt)V_Value%10;P0=tableVOL_Vlaue0;P07=1; /显示小数点delayms(5);Wei 仁1;Wei2=0;P0=tableVOL_Vlaue1;delayms(5);Wei2=1;Wei3=0;P0=tableVOL_Vlaue2;delayms(5);Wei3=1;Wei4=0;P0=table10; 最后一个符号 Vdelayms(5);Wei4=1;void Key() /实现自动循环检测与手动循环检测uint key_press=0;if(Mode_Key=0) _Beep=
18、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;elsech_change=ch_change+1; if(ch_cha nge=0xf8) ch_cha nge=0xf0;void Led_Dis() _switch (ch_cha nge) _case OxfO: Hc138_C=0;Hc138_B=0;Hc138_A=0; break;case 0x
19、f1: 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=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=
20、1;Hc138_B=1;Hc138_A=1; break;default: break;void mai n()Timernit();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() in terrupt 3TH1=(65536-50000)/256;TL1=(65536-50000)%256;t1_flag+;if(t1_flag=20*3) /到达 3 秒t1_flag=0;ch_cha nge+;Beep=0; delayms(IOO);Beep=1;if(ch_cha nge=0xf8) ch_cha nge=0xf0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1