《键控数据采集电路设计》课程设计计划.doc
二九 二一 学年第 一 学期 信息科学与工程学院 课程设计报告书课程名称: 计算机控制系统课程设计 班 级: 自动化2006级2班 学 号: 200604134045 姓 名: 张 力 指导教师: 张雄希 二九 年 十二 月键控数据采集电路设计设计任务设定输入模拟量在05V范围内,按不同的数字键(0、1、2、3、4、5、6、7)依次采集0809相应数据通道的模拟量,并在LED数码管上显示出来。设计要求1.画出连接线路图或功能模块引脚连接图,对工作原理及各芯片地址应有说明。2.采用51系列单片机作主控制器,0809作A/D转换器,扩展接口至少应包括按键电路、显示电路、数据采集电路等,I/O口若不够用可采用8255芯片进行扩展。3.采用3个共阴极型LED动态显示,显示按1位整数和2位小数的形式显示,小数点需显示出来。4.进行程序设计,对各功能模块进行详细说明,画出主、子程序流程图,写出程序清单并加必要注释。设计方案一、主要思路及工作原理采用模拟输入端(0-5V电压信号)、8051单片机、ADC0809A/D转换器、8255A并行口、共阴极LED显示、键盘接口等模块,用单片机控制运行。模拟输入端的可控电压由键盘模块不同数字键(0、1、2······7)选择输入通道将采集的信号送入0809A/D转换器,0809则将模拟量转换成对应数字量(相应的二进制代码),然后通过单片机调用相关程序,将这些代码送入LED显示模块显示成我们可识别的字符。具体做法是,在3X3矩阵式键盘上按下不同的数字键(0、1、2······7,有一,行线通过上拉电阻加到+5V上。当无键按下时,行线处于高电平状态,当有键按下时,行、列线将导通,此时,行线电平与此行线相连接的列线电平共同决定按键是否按下。本设计识别按键采用扫描法,首先使某条列线为低电平,如果这条列线上没有闭合键,则各行线的状态都为高电平;如果列线上有键闭合,则相应的那条行线即变为低电平。于是就可以根据行线号与列线号计算出闭合键的键码。扫描时由第一列开始,然后由输入线输入行线状态,判断哪一行有键闭合,若无键闭合,再检测下一列各行键闭合状态,由此一直扫描下去。输入端可控电压的变化范围为05V,采用 ADC0809 做 A/D 转换,转换输出范围为0255。ADC0809 是一种8路模拟输入、8位数字输出的逐次逼近法A/D器件,转换时间约100us,转换精度为±1/512。ADC0809片内无时钟,可利用单片机提供的地址锁存允许信号ALE经D触发器二分频后获得。由于ADC具有输出三态锁存器,其8位数据输出引脚可直接与数据总线相连,地址译码引脚A、B、C分别与地址总线的低三位相连,以选通IN0IN7八个通道中的一个进行转换。作为片选信号。在启动A/D转换时,由单片机的写信号和控制ADC的地址锁存和转换来启动,由于ALE和START连在一起,因此ADC0809在锁存通道地址的同时启动并进行转换。在读取转换结果时,用低电平的读信号和引脚信号经过一级或非门后,产生正脉冲作为OE信号,用以打开三态输出锁存器。用查询方式等待A/D转换结束,ADC0809的通道号选择线ADDA、ADDB、ADDC 接系统数据线的低3位,因此ADC0809的8个通道地址分别为00H、01H、02H、03H、04H、05H 、 06H、07H。并行接口8255A是一款多功能的I/O器件,可作为CPU总线与外围的接口,它有24个可编程设置的I/O口,3组8位的I/O口为PA口,PB口和PC口. PA0PA7:端口A输入输出线。 PB0PB7:端口B输入输出线。PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。该设计主要用到PA和PB口,D0D7依次与7条数据总线连接,RD与WR依次接8086的读写信号端口, PA和PB口接LED显示电路,在本电路中,8255A的地址为8000H,其中PA口地址为8000H,PB口地址为8001H,工作方式控制字地址为8003H。LED动态显示是一位一位的轮流点亮各位数码管,各位数码管的段选线相应并联在一起,各位的位选线(公共阴极或阳极)由另外的I/O口线控制。动态显示时,各数码管分时轮流选通,要使其稳定显示,必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码,依此循环即可使数码管显示将要显示的字符,利用人眼的“视觉暂留效应”,就可以实现连续动态的多个数码管显示。二、芯片管脚图 ADC0809模数转换器的引脚功能说明:IN7IN0模拟量输入通道ALE地址锁存允许信号。对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。START转换启动信号。START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。A、B、C地址线。 通道端口选择线,A为低地址,C为高地址。LK时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500KHz的时钟信号EOC转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。D7D0数据输出线。为三态缓冲输出形式,可以和单片机的数据线直接相连。D0为最低位,D7为最高。OE输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。Vcc +5V电源。 Vref参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5V(Vref(+)=+5V, Vref(-)=-5V).8255A引脚说明:RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。 PC0PC7:端口C输入输出线,一个8位数据输出锁存器/缓冲器, 一个8位数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位端口, 每个4位端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。 CS:片选信号线,当输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。 RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。 WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。 D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。三、硬件接线图(见附页)四、程序流程图(见上图)五、程序代码;* ; 主程序和中断程序入口 ;* ORG 0000H LJMP START ORG 0003H RETI ORG 000BH RETI ORG 0013H RETI ORG 001BH RETI ORG 0023H RETI ORG 002BH RETISTART: LCALL MEMPRO ;初始化 LCALL KEY_CHECK ;调用数字键按键扫描程序 MAIN: LCALL TEST ;测量一次 LCALL LED_DISPLAY ;显示数据一次 AJMP MAIN LJMP STARTMEMPRO: CLR A : 初始化程序中的各变量 MOV P2,A MOV R0,#70H MOV R2,#0DHLOOPMEM: MOV R0,A INC R0 DJNZ R2,LOOPMEM MOV 20H,#00H MOV A,#0FFH MOV P0,A MOV P1,A MOV P3,A RET;* 按键检测程序 *;*KEY_CHECK:KCS: MOV P1,#0FFH ; 按键闭合测试程序,检查是否有键闭合 MOV A,P1 CPL A ANL A,#0FH ;若有键闭合,则(A0), 若无键闭合,则(A=0) RETKEY: ACALL KCS ;检查有键闭合否 JNZ LK1 ;有键按下则转移至防抖子程序 AJMP KEY ;无键按下则返回LK1: ACALL DELAY ;16ms延时消除抖动 ACALL KCS ;再查有键闭合否 JZ KEY ;有键闭合则进行键扫描计算键码 MOV R2,#0FEH ;置第一列扫描值 MOV R4,#00H ;置初始列号SCAN: JB ACC.0,LINE1 ;第一行无键闭合,转查第二行 MOV A,#00H ;第一行有键闭全,置第一行首键值 AJMP KJS ;转到计算键码LINE1: JB ACC.1,LINE2 ;第二行无键闭合,转查第三行 MOV A,#08H ;第二行有键闭全,置第二行首键值 AJMP KJS ;转到计算键码LINE2: JB ACC.2,LINE3 ;第三行无键闭合,转查第四行 MOV A,#10H ;第三行有键闭全,置第三行首键值 AJMP KJS ;转到计算键码KJS: ADD A,R4 ;计算键码 PUSH ACC ;保存键码KSF: ACALL DELAY ACALL KCS ;键释放否,若仍闭合则延时等待 JNZ KSF POP ACC ;若键已释放,则键码送A RETNEXT: INC R4 ;列扫描号加1 MOV A,R2 JNB ACC.2,KEY ;第3列已扫描完则进行下一循环扫描 RL A ;置下一列列扫描值 MOV R2,A AJMP SCAN ;扫描下一列 ;此程序执行后,键码保存在累加器A中DELAY: MOV R7,#40 ;16ms延时程序(2usXR7XR7) D1: MOV R6,#200 DJNZ R6,$ DJNZ R7,D1 RET ; 电压测量(模/数转换)程序 ;*TEST: MOV P0,A ;传送由按键选择得到的转换通道控制地址 CLR A ;采集电压值存放在70H-77H单元中 MOV R0,#70H ;转换值存放首址 LCALL TEST_START ;启动电压检测WAIT: JB P1.7,ADEND ;等待A/D转换结束信号EOC AJMP WAITTEST_START: SETB P1.6 ;电压检测启动 NOP NOP NOP RET ADEND: MOV A,P0 ;取A/D转换数据 MOV R0,A INC R0 ;数据存放地址加1TESTEND: JC TESTCON CLR A ;结束恢复端口 MOV P2,A MOV A,#0FFH MOV P0,A MOV P1,A MOV P3,A RETTESTCON: LCALL TEST_START LJMP WAIT; 共阴极LED动态显示程序 ;*LED_DISPLAY: MOV DPTR 8003H MOV A,80H ;设定8255A工作方式 MOV R0,#10H MOV R1,#1HDISPLAY_LOOP: LCALL TRUN_BCD ;显示数据转为三位BCD码存入7AH、79H、78H(最大5.00v) ACALL DELAY_10MS ;调用10ms延时程序 MOV A,RO MOV DPTR,#LED_TABLE MOVC A,A+DPTR ;查表得显示码 MOV DPTR,8001H MOVX DPTR,A ;将显示码送入数据口(PB口) MOV A,R1 MOV DPTR,#8000H MOVX DPTR,A ;将显示位选数据送入位选口(PA口) ACALL DELAY_10MS ;延时10ms RL R1 INC R0 CJNZ R0,#3,LED_DISPLAY ;判断3个LED显示屏是否完成显示 RETLED_TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DELAY_10MS: MOV R6,#0D0H ;10MS延时子程序DL1: MOV R7,#19HDL2: DJNZ R7,DL2 DJNZ R6,DL1 RET;显示数据转为三位BCD码存入7AH、79H、78H(最大值5.00v)TURN_BCD: MOV B,#51 DIV AB MOV 7AH,A ;个位数放入7AH MOV A,B ;余数大于19H,F0为1,乘法溢出,结果加5 CLR F0 SUBB A,#1AH MOV F0,C MOV A,#10 MUL AB MOV B,#51 DIV AB JB F0,LOOP2 ADD A,#5LOOP2: MOV 79H,A ;小数后第一位放入79H MOV A,B CLR F0 SUBB A,#1AH MOV F0,C MOV A,#10 MUL AB MOV B,#51 DIV AB JB F0,LOOP3 ADD A,#5LOOP3: MOV 78H,A ;小数后第二位放入78H RET END 设计总结本次课程设计是键控数据采集电路的设计,是有关计算机控制系统软硬件的综合应用。使用到的芯片主要有8051单片机、ADC0809A/D转换器、8255A并行接口、LED显示模块、键盘接口模块等。通过此次设计,使我对单片机应用有了更深刻的认识,对ADC0809芯片的控制方式有了较清楚的理解,对键盘及LED显示模块的功能设计有了不同程度的了解。0809的芯片控制方式有了大概认识,包括:中断法、查询法、以及无条件传送法,设计中使用的是延时等待,也即无条件传送法,主要是因为自己对中断法掌握不够熟练,延时等待编程较为简单。设计中用到74LS373来锁存ADC0809的地址,可减少单片机接口的使用。平时对键盘电路和LED显示电路的应用接触不多,此次用到了该部分的功能,刚开始时没有头绪,不知如何下手。在弄清楚设计要求后,查阅相关资料的基础上,对其应用有了较为清楚的了解之后,结合设计要求,完成了该部分的设计。此次设计使我明白了计算机控制系统相关工作原理及软硬件部分的结合应用,设计中感受到了软硬件结合工作的方式方法,对自己思路的拓展很有帮助。此次设计难点之处颇多,设计中困难重重,这是学完计算机控制技术一课程后第一次做这样比较大的设计,遇到困难是在所难免的。平时理论知识的学习,但对相关芯片的应用不够深入,通过该设计巩固了所学知识的同时,也检查出了自己的不足之处。最大的收获是,使我深刻理解了“眼高手低”的道理,该设计看上去简单,设计思路较为清楚,但在具体设计中对各模块的芯片选择和硬件接线以及功能实现,很多细节之处都要考虑周到。本次设计中细节错误之处是存在的,希望老师指正。参考文献1、 施保华、杨三青、周凤星 计算机控制技术,华中科技大学出版2007年2、 汪文、陈林 单片机原理及应用, 华中科技大学出版社 2007年3月3、 李玉峰、倪虹霞M CS-51系列单片机原理与接口技术,人民邮电出版社 2004年4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、