电子表单片机设计.doc_第1页
电子表单片机设计.doc_第2页
电子表单片机设计.doc_第3页
电子表单片机设计.doc_第4页
电子表单片机设计.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学校 班级 学号 姓名_uuuuuuuuuuuuuuu装uuuuuuuuuuuuuuu订uuuuuuuuuuuuu线uuuuuuuuuuuuuuu淄博职业学院2009-2010学年第一学期 单片机原理与应用期末考核 考核注意事项(1)考核时间为两周。(2)考核方式为写单片机产品设计论文。(3)使用计算机答题。考核结束时需提交纸介质和电子稿。纸介质即为本试卷的打印稿,直接交给老师。电子稿通过“数字化综合教学服务平台”提交。一、任务设计一台电子表。结构如图所示。51核单片机LED显示器4X4键盘二、要求(1)单片机只要采用51核的即可。(2)自动计时,用6位LED显示器显示时、分、秒。(3)可以设定当前时间。(4)字数在1万字以上。(5)标题用3号黑体字,正文用小四号字体。(6)要有方案比较和论证。(7)要有单元设计。(8)要有硬件原理图、程序框图、源程序。(9)编程使用汇编语言,要有注释,书写要规范。(10)要有检测方法。 三 总体设计方案整体程序主要分为3个部分:主程序、显示子程序和定时器中断程序。 主程序主要是初始化部分和不断调用动态显示子程序部分。动态显示子程序完成6位LED的轮流位扫描,它被主程序不断调用,以保证稳定可靠的显示。 设计、调试大型程序时,需先跟据要求划分模块,优化结构;再根据各模块模块的特点确定主程序、子程序、中断服务程序以及相互间的调用关系,再根据各模块的性质和功能将各模块细化,设计出程序流程图;最后才根据各模块的流程图编制具体程序,调试时应先调试主程序,实现最基本、最主要的功能,在此基础上再将功能往主程序上堆砌,直至各模块联调、统调,实现全部功能。本次设计将整个程序划分为主程序,秒计时程序为定时器中断服务程序,键盘的扫描也用中断来实现。三个模块之间的关系是:系统上电后,不断运行动态显示子程序,显示初始时间0000;无按键按下时,一直显示初始值,有按键按下时,进入按键的中断服务程序;按键启动定时器后,开始计时,在定时器的中断服务程序中完成显示时间的刷新;回到主程序继续运行动态显示程序,显示内容不断更新。经过处理后,三个模块的运行协调一致,既保持了动态显示的稳定性,又保持了键盘的可靠性,还保持了秒计时的准确性较好的实现了全部功能。根据硬件设计,由单片机的P2口控制位码输出,P0口控制段码输出。动态显示程序中,在单片机内部RAM中设置待显示数据缓冲区,由查表程序完成显示译码,将缓冲区内带显示数据转换成相应的段码,再将段码通过8051的P0口输出;位码数据由累加器循环左移指令产生,再通过P2口输出。设计要求进行计时并在数码管上显示时间,为外部中断0的入口地址,并实现“开始”按键的功能;外部中断1的入口地址,实现“清零”按键的功能:数据信号DATA输入的入口地址;时钟信号CLK输入的入口地址。定时器T0作为每秒加一的定时器;定时器T1作为“快加”键的定时器。其中“开始”按键当开关由1拨向0(由上向下拨)时开始计时;“清零”按键当开关由1拨向0(由上向下拨)时数码管清零,此时若再拨“开始”按键则又可重新开始计时。下面为总体设计方案具体分划:1、 计时方案方案一:采用实时时钟芯片。 实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据每秒自动更新一次,不需程序干预。计算机可通过中断或查询方式读取计时数据并进行显示,因此实现计时功能不占用CPU的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能。方案二:软件控制。利用MCS-51内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能够使我们在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,因此本系统采用软件方法实现计时。2、键盘/显示方案方案一:串口扩展,LED静态显示。如图10.1(a)所示,该方案占用口资源少,利用串口扩展并口,实现静态显示,显示亮度有保证,但硬件开销大,电路复杂,信息刷新速度慢,比较适用于并行口资源较少的场合。方案二:直接接口,LED动态显示。如图10.1(b)所示,直接使用单片机的并行口作为显示接口,无需外扩接口芯片,但占用口资源较多,且动态扫描的显示方式需占用CPU较多的时间,在单片机没有太多外围接口及实时测控任务的情况下可以采用。在本系统中,单片机没有太多外围接口接实时测控任务,因此采用方案二。 四:硬件设计1、电路原理图电子表的硬件原理图如图(a)所示。电子表电路的核心是AT89S51单片机,其内部带有4KB的Flash ROM,无需外扩程序存储器;电子表没有大量的运算和暂存数据,现有的128B片内RAM已能满足要求,也不必外扩片外RAM。系统配备6位LED显示和4*3键盘,采用单片机的并行口作为键盘/显示器接口电路。利用P0口作为6位LED显示的位选口,其中,P0.0P0.5分别对应位LED0LED5,P1口则作为段选口,P2口的低3位为键盘输入口,对应02行,P0口同时用作键盘的扫描口。由于采用共阴极数码管,因此P0口输出低电平选中相应的位,而P1口输出高电平点亮相应的段。 2、系统工作流程本电子表具备以下功能:(1) 时钟显示:6位LED从左到右依次显示时、分、秒,采用24小时 计时。(2) 键盘功能:采用4*3键盘,包括:09:数字键,键号为00H09H。 C/R键: 时间设定/启动计时键,键号为0AH。 RET键: 复位键,键号为0BH。其工作流程如下:(1) 时间显示:上电后,系统自动进入时钟显示,从00:00:00开始计时,此时可以设定当前时间。(2) 时间调整:按下C/R键,系统停止计时,进入时间设定状态,系统保持原有显示设置值,直至6位设置完毕。系统将自动由设定后的时间开始计时显示。(3) 复位键:按下RET键,系统停止计时,数码管显示00:00:00。3、软件设计1、系统资源分配(1)、定时器:定时器0用作时钟定时,按方式1工作,每隔100ms溢出中断一次。(2)、片内RAM及标志位的分配与定义见下表。地址功能名称初始化值30H35H显示缓冲区,小时、分、秒(高位在前)DISP0DISP500H3CH3FH计时缓冲区,时、分、秒、100msHOUR,MIN,SEC,MSEC00H50H7FH堆栈区PSW.5计时显示允许位(1:禁止,0:允许)F002,软件流程根据上述工作流程,软件设计可分为以下几个功能模块:(1)、主程序:初始化与键盘监控。(2)、计时:为定时器0中断服务子程序,完成刷新计时缓冲区的功能。(3)、时间设置:由键盘输入设置当前时间。(4)、显示:完成6位动态显示。(5)、键盘扫描:判断是否有键按下,并求取键号。(6)、其他辅助功能子程序:如键盘设置、拆字、时间合法性检测等。下面分模块进行软件设计:(1)、主程序模块MAIN:流程图如图所示。NY开始定义堆栈区定时器0、数据缓冲区初始化调用键扫描子程序是C/R键?地址指针指向计时缓冲区调用时间设置程序(d)主程序流程图(2)、即使程序模块CLOCK:流程图如图所示。YYYYNNNN保护现场时间校正重装定时器0初值循环次数减1满10次秒单元加160s到秒单元清0分单元加160分到分单元清0小时单元加1返回24小时到恢复现场小时单元清0(e)计时程序流程图 如前所示,系统定时采用定时器与软件循环相结合的方法。定时器0每隔100ms溢出中断一次,则循环中断10次延时时间为1s,上述过程重复60次为1分,分计时60次为1小时,小时计时24次则时间成新回到00:00:00.设系统使用6MHz的晶振,定时器0工作方式1,则100ms定时对应的定时器初值可由下式计算得到: 定时时间=(216 -定时器0初值)*(12/fosc )因此,定时器0初值=3CB0H,即TH0=3CH,TL0=0B0H 当系统使用其它频率的晶振时,可以由上式计算相应的定时器0初值,也可以该变定时时间。例如当系统晶振为12MHz时,同样的初值对应的定时时间为50ms,则循环中断次数为20次时,延时时间为1s。+( 3 )、时间设置程序模块MODIFY:流程图如图所示。保护现场调用键盘设置子程序ACALL KEYIN调用合字程序ACALL COMB恢复现场返回 (f)时间设置流程图 将键盘输入的6位时间值合并为3位压缩BCD码(时、分、秒)并送入计时缓冲区,作为当前即使起始时间。该模块的入口为计时缓冲区寄存区的首地址,将其置入R1中。程序调用一个键盘设置子程序KEYIN(其流程图如(e)所示)将键入的6位时间值送入键盘设置缓冲区,然后用合字子程序COMB将键盘设置缓冲区中的6位BCD码合并为3位压缩BCD码,并送如计时缓冲区。该程序同时作为时间值合法性检测程序,可完成检测功能;若键盘输入的小时值大于23,分和秒值大于59,则不合法,将取消本次设置,清0重新开始计时。(4)、键盘扫描程序模块KEYSCAN:流程图如图所示。NY保护现场显示缓冲区置首地址送R0键盘输入次数送R7调用键盘扫描程序ACALL KEYSCAN键号送R0返回显示缓冲区地址加1 INC R0恢复现场循环次数到循环次数减1(g)键盘设置子程序流程图 判断是否有键按下:无键按下则循环等待;有键按下则求取键号并将键号送A累加器返回。程序中的去斗延时和循环等待延时都用DISPLAY子程序来替代,从而保证随时刷新显示。(5)、显示程序模块DISPLAY:流程图如图所示。NY保护现场返回允许显示计时时间动态扫描显示调用拆字程序(m)显示流程图 将显示缓冲区的6位BCD码用动态扫描方式显示。为此,必须首先将3字节计时缓冲区中的时、分、秒压缩BCD码拆分为6字节(时、分、秒的十位、个位分别占用1字节)BCD码,这一功能由拆字子程序SEPA来实现。 当按下时间设置键后,在6位设置完成之前,应显示输入的数据么而不显示当前时间。为此,我们设置了一个计时显示允许标志位F0,在时间设置期间F0=1,不调用SEPA,即调用SEPA刷新显示缓冲区的前提条件是F0=0。(6)、拆字程序SEPA与合成程序COMB:如前所述,拆字程序的功能是将3字节计时缓冲区中的时、分、秒压缩BCD码才分位6字节(时、分、秒的十位、个位分别占用1字节)BCD码并刷新显示缓冲区;合字程序的功能是将键盘设置缓冲区的6位BCD码合并为3位压缩BCD码,送入计时缓冲区,同时检测时间值的合法性。 下面是个模块的源程序。*主程序MAIN* ORG 0000H AJMP MAINORG 000BHAJMP CLOCKORG 0030HDISP0 EQU 30HDISP1 EQU 31HDISP2 EQU 32HDISP3 EQU 33HDISP4 EQU 34HDISP5 EQU 35HHOUR EQU 3CHMIN EQU 3DHSEC EQU 3EHMSEC EQU 3FHMAIN: MOV SP, #50 ;设置堆栈区CLR F0 ;允许计时显示 MOV #10HMOV R0, #DISP0CLR ALOOP: MOV R0, A INC R0 DJNZ R7, LOOP ;设置初值 MOV TMOD, #01H MOV TL0, #0B0H MOV TH0, #3CH ;定时器0的初始化,定时时间100ms SETB TR0 ;启动定时器 SETB EA SETB ET0 ;开中断BEGIN: ACALL KEYSCAN ;调用键盘扫描 CJNE A , #0AH, NEXT1 ;是CLR/RET键否? CLR TR0 ;是则暂时停止计时 MOV R1, #HOUR ;地址指针指向计时缓冲区首地址 *键盘扫描子程序*KEYSCAN: ACALL TEST ;调用判断按键是否按下子程序TESTJNZ REMOV ;有键按下则调消抖延时ACALL DISPLAYACALL ALARMAJMP KEYSCAN ;无键按下则继续判是否有;键按下REMOV: ACALL DISPLAY ;调用延时子程序消抖ACALL TEST ;再判是否有键按下JNZ LIST ;有键按下则转逐列扫描ACALL DISPLAYACALL ALARMAJMP KEYSCAN ;无键按下则继续判断是否有键按下LIST: MOV R2, #0FEH ;首列扫描字送R2 MOV R3, #00H ;首列键号送R3LINE0: MOV A, R2 ;首列扫描字送R2 MOV P2, A ;首列扫描字P2口MOV A, P0 ;读入P0口的行状态JB ACC.0 LINE1 ;第0行无键按下,转第1行MOV A, #00H ;第0行有键按下,行首键号;送AAJMP TRYK ;求键号LINE1:JB ACC.1, LINE2 ;第一行无键按键,转第2行 MOV A,#04H ;第一行有键按下,行首键号送A AJMP TRYK ;求键号LINE2: JB ACC.2,NEXT ; 第2行无键按键,转第3行 MOV A,#08H ; 第2行有键按下,行首键号送A AJMP TRYK ;求键号NEXT: INC R3 ;扫描下一列 MOV A,R2 ;列扫描送A JNB ACC.3,EXIT ;4列扫描完,重新进行下一轮扫描 RL A ; 4列未扫描完,扫描字左移扫描下一列 MOV R2,A ;扫描 字送A AJMP LINE0 ;转向扫描下一列EXIT: AJMP KEYSCAN ;等待下一次按键TRYK: ADD A,R3 ;按公式计算键码,求得键号 PUSH ACC ;键号如栈保护 LETK: ACALL TEST ;等待按键释放 JNZ LETK ;按键未释放,继续等待 POP ACC ;按键释放,键号出栈 RET ;键盘扫描结束,返回TEST: MOV A,# 00H MOVX P0,A ;全扫描字00H送P0口 MOVX A,P2 ;读入P2口行状态 CPL A ;A取反,以高电平表示有键按下 ANL A,#07H ;屏蔽高5位 RET*显示子程序DISPLAY*DISPLAY: JB F0,DISP ;允许时间显示标志F0=1转DISP ACALL SEPA ;否则调用SEPA刷新显示缓冲区DISP: PUSH PSW ;动态扫描显示子程序 PUSHACC SETB RS0 MOV A,#0FFH MOV P2,A ;关显示 MOV R0,#DISP0 MOV R7,#00H MOV R6,#06H MOV R5,#0FEHDIS1: MOV DPTR,#TAB MOV A,R0 ;取显示缓冲区数据 MOVC A,A+DPTR ;查表得字型码 MOV P1,A ;字型码送P1口 . MOV A,R5 MOVX P0,A ;位选码送P0口HERE: DJNZ R7,HERE ;延时 INC R0 ;更新显示缓冲区地址 MOV A,R5 RL A ;位码左移 MOV R5,A DJNZ R6,DIS1 ;判断6位显示完否 CLR RS0 POP ACC POP PSW RET TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H;共阴极字型码表*合字子程序COMB*COMB: MOVR0,#DISP1 ;R0指向显示缓冲区小时低位 ACALLCOMB1 ;合字 CJNEA,#24H,CHK ;小时大于24否?CHK:JNCEXIT1 ;大于24则取消本次设置,退出 MOVR1,A ;否则,小时送计时缓冲区/闹钟 ;值寄存区小时单元 INC R1 MOV R0,#DISP3 ;R0指向显示缓冲区分低位 ACALL COMB1 CJNE A,#60H,CHK1CHK1: JNC EXIT1 MOV R1,A INC R1MOV R0,#DISP5 ;R0指向显示缓冲区秒低位 ACALL COMB1 CJNE A,#60H,CHK2CHK2: JNC EXIT1 MOV R1,A RETEXIT1: AJMPMAIN ;输入不合法退出,重新清 ;0计时COMB1:MOVA,R0 ANLA,#0FH ;取出低位 MOV43H,A ;暂存于43H单元 DECR0 ;指向高位 MOVA,R0 ANLA,#0FHSWAPA ;高位送高4位 ORLA,43H ;高低位合并 RET;*拆字子程序SEPA*SEPA: PUSH PSW PUSH ACC SETB RS0 MOV R0,#DISP5 ;指向显示缓冲区秒低位 MOV A,SEC ACALLSEPA1 MOV A,MIN ACALLSEPA1 MOV A,HOUR ACALLSEPA1POP ACC POP PSW CLR RS0 RETSEPA1: MOV 44H,A ;暂存44H ANL A,#0FH ;取出低位 MOV R0,A ;送显示缓冲区低位 DEC R0 ;指向显示缓冲区高位 MOV A,44H ANL A,#0F0H ;取出高位 SWAP A ;高位送往低4位形成高位数据 MOV R0,A ;高位数据送显示缓冲区高位 RET*定时器0中断服务子程序CLOCK*CLOCK: MOV TL0,#0B7H MOV TH0,#3CH ;重装初值,时间校正 PUSH PSW PUSH ACC ;保护现场 INC MSEC MOVA,MSEC CJNEA,#0AH,DONE MOV MSEC,#00H MOVA,SEC INC A DA A ;二十进制转换 MOVSEC,ACJNEA,#60H,DONE MOVSEC,#00H MOVA,MIN INC A DA A MOVMIN,A CJNEA,#60H,DONE MOVMIN,#00H MOVA,HOUR INC A DA A MOV HOUR,A CJNEA,#24H,DONE MOVHOUR,#00HDONE: POP ACC POP PSW ;恢复现场 RETI五: 系统调试与脱机运行1. 硬件调试硬件调试的主要任务是排除硬件故障,其中包括设计错误和工艺性故障。(1) 脱机检查。用万用表逐步按照电路原理图检查印制电路板中所有器件的各引脚,尤其是电源的连接是否正确;检查数据总线、地址总线和控制总线是否有短路等故障,顺序是否正确;检查各开关按键是否能正常开关,是否连接正确;各限流电阻是否短路等。为了保护芯片,应先对各IC座(尤其是电源端)电位进行检查,确定其无误后再插入芯片检查。 (2) 联机调试。暂时拔掉AT89S51芯片,将仿真器的40芯仿真插头插入AT89S51的芯片插座进行调试,检验键盘/显示接口电路是否满足设计要求。可以通过一些简单的测试软件来查看接口工作是否正常。例如,我们可以设计一个软件,使P1、P2口输出55H或AAH,同时读P0口,运行后用万用表检查相应端口电平是否一高一低,在仿真器中检查读入的P0口低3位是否为1,如果正常则说明8155工作正常。还可设计一个使所有LED全显示“8.”的静态显示程序来检验LED的好坏。如果运行测试结果与预期不符,则很容易根据故障现象判断故障原因并采取针对性措施排除故障 2. 软件调试软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现硬件故障。程序的调试应一个模块一个模块地进行,首先单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来总调。联调需要注意的是,各程序模块间能否正确传递参数,特别要注意各子程序的现场保护与恢复。调试的基本步骤如下: (1) 用仿真器修改显示缓冲区内容,屏蔽拆字程序,调试动态扫描显示功能。例如将DISP0DISP5单元置为“012345”,应能在LED上从左到右显示“012345”。若显示不正确,可在DISP子程序相应位置设置断点,调试检查。然后用仿真器修改计时缓冲区内容,调用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论