1、数据输出及显示就是把数据以适当的形式进行输出和显示。二、系统方案设计1、设计要求设计一个八路采集系统,实现对八路模拟信号的采集,具体设计任务是:(1) 采集方式包括循环采集(即1路、2路8路、1路)和选择采集(任选一路)两种方式。显示部分能同时显示地址和相应的数据。(2) 第1路输入自制15V直流电压(各路输入可由分压器产生,不要求精度),第8路备用。(3) 现场模拟信号产生器:自制温度、湿度等物理量的检测电路,经放大后产生电压。2、系统方案比较系统设计方案一:系统硬件电路如图1:ADC0809 将05V 模拟信号转换为00FF 数字信号并传送51单片机, 然后由51 单片机进行数据存储及数据
2、处理,最终由LED 显示器显示。完成对模拟信号的采集。图1系统设计方案二:系统硬件电路如图2:电路中采取信号发生器进行采集,不如方案一简洁。虽然器件选择上差的不多,但是还需要制作信号发生器,多了操作步骤,并且增加了成本 图2因此我们选择方案一,直接采取模拟信号进行采集。三、硬件模块设计1、模拟信号采集电路的设计: 图3本电路在第一通道里采用滑动变阻器控制15V的变换,电阻比例为1/4,这样子才能进行5V的分压。电阻选择一个5K,一个40K。然后在第二通道到第七通道都采集的是地位器来进行分压,用1K的电阻把5V的进行分压成0V,1V,2V,3V,4V,5V。 图4在第八通道采用传感器读取数据,在
3、后面接运算放大器对模拟信号进行放大,为后一步A/D转换做准备。图5(a) 图5(b)图5 (C)应用TL431(如图5-a)提供5V的稳压源,TL431是一个高性价比的常用分流式电压基准,输出固定电压值的计算公式是: Vout = (R1+R2)*2.5/R2,同时R3的数值应该满足1mA (Vcc-Vout)/R3 500mA。TL431管脚如图(5-C)。由于自制稳压源输出电压为12V,为满足上述要求而得到5V稳定电压,我们选择R1=R2=5K,R3=1K。之后连接运算放大器(如图5-b),放大器选用OP07芯片。OP07高精度运放具有极低的输入失调电压,极低的失调电压温漂,非常低的输入噪
4、声电压幅度及长期稳定等特点。OP07引脚图如图6所示。1和8为偏置平衡(调零端),2为反向输入端,3为正向输入端,4接地,5空脚 6为输出,7接电源。 图6 图7自制温度物理量才采集运用AD590传感器(封装图如图7),设定0对应0V,由于稳压源输出电压为5V,则图4中R6=5V/273uA=18.3K。设定100对应5V,此时电流值373uA,与初始值差值为100uA,故图4中R4+R5+R7=5V/100uA=50K,R4=30K,R5=10K,因此应调节R7=10K。此时传感器符合设计要求工作。2、A/D转换电路设计 设计A/D转换电路将传感器和运放输出的模拟信号转换为数字信号,从而被单
5、片机处理。ADC0809 是8 位逐次逼近型A/D转换器,多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。因此我们选用它进行转换。为使ADC0809的时钟信号输入端得到正常工作频率,采用74LS74双D触发器进行四分频。电路图如图8。 图8 ADC0809(引脚图如图9-a)由一个8路模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。三态输出锁器用于锁存A/D 转换完的数字量,当OE 端为高电平时,从三态输出锁存器取走已转换的数据。ADC0809 的工作原
6、理IN0IN7:8 条模拟量输入通道ADC0809 对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。地址输入和控制线:22脚ALE 为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A, B,C 三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B 和C 为地址输入线,用于选通IN0IN7 上的一路模拟量输入。通道选择表如下表所示。C B A 选择的通道:0 0 0 IN0,0 0 1 IN1,0 1 0 IN2,0 1 1 IN3
7、,1 0 0 IN4,1 0 1 IN5,1 1 0 IN6,1 1 1 IN7数字量输出及控制线:C,B,A分接P16,P15,P14口。6脚ST 为转换启动信号。当ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D 转换;在转换期间,ST 应保持低电平。10脚EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。9脚OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0 为数字量输出线。10脚CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信
8、号必须由外界提供,通常使用频率为500KHZ,由单片机的ALE(30脚)经过四分频得到。VREF(),VREF()为参考电压输入。VREF()接+5V,VREF()接地。 (a) (b) 图974LS74(双D触发器)引脚如下图所示。74ls02引脚图及引脚功能:vcc 4y 4b 4a 3y 3b 3a 2输入四或非门74ls0214 13 12 11 10 9 8 _) y = a+b 1 2 3 4 5 6 71y 1a 1b 2y 2a 2b gnd74ls02引脚图74ls02引脚功能:实现2输入四或非门功能,常用于各种数字电路中。整个系统软件设计主要有三大块:A/D 转换部分;显示
9、数据的转换存储部分;数据的显示部分。系统采用模块化编程,将各部分功能分别实现。1、 A/D 转换过程:将8 路模拟量持续输入ADC0809模拟量输入端IN0IN7。首先将OE,START,ALE, A,B,C 都置0,然后ALK 置1再清零,进行转换通道地址的锁存,即选择转换通道打开。将START 置1 再清零,发送一启动脉冲,即启动A/D 转换,此时转换结束信号EOC 变为低电平。查看EOC 是否为高电平,为高电平则表示A/D 转换完毕。等待A/D 转换完毕后将输出允许信号输入端(OE)置高电平,此时就可将转换的一路数据输入到单片机某一存储空间中。将OE 置低电平, 即停止ADC0809数据
10、输出。存储转换数据的地址+1。通道号+1。判断是否转换完8 路模拟量,是则全部清零从第1 条重新开始转换,否则继续转换下路模拟量。具体流程图下:2、显示数据的转换存储:从IN0IN7 输入的模拟量经ADC0809 转换后的到的是一个二进制数,我们无法知道实际电压是多少,于是需要我们转换成实际模拟电压值并显实出来,便于记录。由于ADC0809 是8 位A/D 转换, 转换成的二进制最大为11111111,又因ADC0809 的基准电压我设计的是5V。可用如下公式表示模拟量与A/D 转换后的二进制数的关系:将公式的右边换成十进制:在显示数据的转换存储模块部分中, 主要任务是将单片机读到的数据再次转
11、换成模拟量的数值大小, 并将这个数值的整数值,小数值这三个十进制值存入相应存储地址中去。具体的编程思想:设定8 路模拟量转换成的二进制数存在70H77H中,显示的数据存在78H7AH 中,通道号存在7BH 中。3、显示电路程序流程:显示这部分主要也分两部分:整数部分的显示,小数部分的显示。我设定的模拟电压输入值范围是:05V。故数据显示整数部分只有:0.、1.、2.、3.、4.、5. 共6 个段代码,小数部分只有:0、1、2、3、4、5、6、7、8、9 共9 个段代码。4、具体编程思想:1)设置扫描字扫描,目的是确定开哪个数码管工作。2) 设定段代码存储顺序:0、1、2、3、4、5、6、7、8
12、、9、0.、1.、2.、3.、4.、5.。3)判断哪个数码管工作,以确定段代码地址。4)确定后送段代码到该数码管显示数据。5)判断是否显示完4 个数码管。6)设置显示下路数据,再重复上述过程。开每一个数码管工作都延时1MS,不断循环,这样只要扫描时间小于1/50 秒,就会因为人眼的视觉残留效应,看到四位不同的数字稳定显示。1、A/D电路调试采用74LS74触发对单片机的ALE输出时钟进行4分频;而其基准源要求稳定,所以我们运用精确基准源进行调试,运行正常。2、数码管显示模块调试 数码管显示模块调试,基于小系统上实现,程序简单,基本无乱码,显示正常。3、各通道参数值调试 通道2至7各输入电压值显
13、示值及实测值,以及通道1调节滑动变阻器显示电压值及实测值如下2表。表1 通道2至7正常工作输入电压值通道234567输入电压值实测值(V)4.853.882.881.930.950.00显示值(V)5.004.003.002.001.00表2 调节滑动变阻器通道1电压值R=(K)4.633.583.42.081.0实测值1.282.141.793.434.505.66显示值1.132.011.393.084.035.0AD0809的10脚CLK,用示波器测,显示频率为500KHZ,电压平均值为1.95V的方波。6脚ST和22脚ALE示波器显示是峰值为3.8V的脉冲波。7脚EOC为峰值80mv,
14、平均值4.98V的波。23(A),24(B),25(C)为时高时低的信号。自动模式数码管显示依次为:第一个数码管显示最后几个数码管显示121.1根据上面两表可见,数值属误差范围内,基本正常,调试成功。六、结论多路数据采集系统调试成功并且基本实现设计要求:采集方式包括循环采集和选择采集二种方式,显示部分能同时显示地址和相应的数据。 硬件完成,调试过程曾经一度出现滞留、毫无进展的状况,然而经过多天的分析及讨论,不段对硬件系统进行检测及改善,在保证硬件故障排除的情况下冷静的进行分析及调试并最终制作及调试完成。设计时需要思维的开阔,器件的熟悉;制作焊接时要谨小慎微;调试时的仔细分析观察。整个过程又时时
15、离不开团队协作,以及全局观念,还有遇到问题时的冷静分析并从局部到整体的逐步检查直至排除故障。整个设计、制作、和调试的过程是各种能力及素质的综合锻炼。七、参考文献:【1】 徐爱均,8051 单片机实践教程, 电子工业出版社, 2005 年【2】 谭浩强,MCS-51 单片机应用教程,清华大学出版社,2004 年【3】 万光毅,单片机实验与实验教程(一).北京航空航天大学出版社,2003年【4】 沙占友,单片机外围电路设计,电子工业出版社,2003 年【5】 康华光主编,电子技术基础数字部分,高教出版社,2004 年【6】 全国大学生电子设计竞赛培训系列教程【7】 全国大学生电子设计竞赛训练附1:
16、元器件明细表器件名称型号规格数量备注电阻1K10K5K20K30K滑动变阻器三极管TL431排线及插口2插口及排线40插口及排线运算放大器OP07集成温度传感器AD590双D触发器74LS74AD转换器ADC0809或非门74LS04电源单片机最小系统AT89C52自制最小系统附2:仪器设备名称数字万用表VC902+单片机仿真器STAR51PH稳压电源MPS-3003L-3示波器GDS2102附3:多路数据采集电路设计图纸附4:单片机最小系统图纸附5:程序代码SSP EQU 60H ;堆栈指针KEYFLAG DATA 20H ;键盘标志STATE DATA 22H ;当前状态SUBROUT D
17、ATA 50H ;前一状态KEY DATA 51H ;键值DS1 DATA 2DH ;显示位1DS2 DATA 2EH ;显示位2DS3 DATA 2FH ;显示位3DS4 DATA 30H ;显示位4DS5 DATA 31H ;显示位5DS6 DATA 32H ;显示位6DS7 DATA 33H ;显示位7DS8 DATA 34H ;显示位8DATA1 DATA 35HDATA2 DATA 36HDATA3 DATA 38HDATA4 DATA 39HNUM DATA 37HJ8279D XDATA 8000H ;8279数据地址J8279C XDATA 8001H ;8279控制地址 OR
18、G 0000H ;转主程序 LJMP MAIN ORG 0003H ; RETI ORG 000BH ; ORG 0013H ; LJMP JP ORG 001BH ; LJMP T1INT ORG 0023H ; ORG 002BH ; ORG 0100H MAIN: ;MOV P0, #00H CLR EA MOV R6,#08H MOV TMOD,#10H ;定时器1初始化,定时15S MOV TH1,#15H MOV TL1,#0A0H SETB ET1 ;允许T1中断 SETB EA ;CPU开中断 SETB TR1 ;启动T1 MOV R5,#10HTEST: MOV SP, #S
19、SP ;置堆栈指针 MOV DPTR, #J8279C ;设定8279工作模式 MOV A, #0D1H MOVX DPTR, A WAIT: MOVX A, DPTR ;判断8279是否工作正常 JB ACC.7, WAIT MOV A, #00H ; MOVX DPTR, A MOV A, #34H MOV KEYFLAG,#80H ;置键盘无值标志 MOV R7, #3EH ;清单片机内部RAM MOV A, #00H MOV R0, #21H LOP: MOV R0, A INC R0 DJNZ R7, LOP MOV R1, #90H ;调用显示子程序; MOV R0, #DS1 M
20、OV R7, #08H LCALL DISP DQ: SETB IT1 SETB IT0 SETB EX0 SETB EX1 SETB EA CLR P1.4 CLR P1.5 CLR P1.6 ATT: LCALL RDKEY ;读键值 MOV KEY, A ;存键值 CJNE A,#00H,REL1 MOV DATA2,#00H LCALL K1 ;自动 JMP REL4REL1: CJNE A,#01H,REL2 ;手动 MOV DATA2,#0FFH CLR P1.6 MOV NUM,#01H LCALL REL11 REL2: CJNE A,#02H,REL4 ;手动加1 MOV D
21、ATA2,#0FFH MOV R0,#NUM INC R0 MOV A,P1 ANL A,#70H ADD A,#10H MOV P1,A CJNE R0,#08H,REL3 LCALL REL22REL3: CJNE R0,#09H,REL5 MOV NUM,#01HREL5: LCALL REL11REL4: MOV A, STATE ;取状态值 ADD A, STATE ;(定义状态容量为双字节所以要*2) MOV B, A MOV DPTR, #STAB ;取得第一表首地址 MOVC A, A+DPTR XCH A, B INC DPTR ;取得第二表首地址 MOVC A, A+DPT
22、R MOV DPL, A ;将状态表地址送DPTR MOV DPH, BMONI1: CLR A MOVC A, A+DPTR ;读取特征键码 CJNE A, #0FFH, MONI2 ;读到最后吗? SJMP ATT ;是最后,本键无效,跳转至键盘监控MONI2: CJNE A, KEY, MONI3 ;与当前键码一致吗? SJMP MONI4 ;键码一致,转到下面执行MONI3:查下一元素 INC DPTR SJMP MONI1MONI4:状态转移 MOV SUBROUT,A ;当前状态送至前态寄存器取次态为当前状态 MOV STATE, A 取工作模块编号 MOV B, A ;LJMP指令为三字节,所以*3 RL A ADD A, B MOV DPTR, #KPRG JM
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1