电子信息工程-课程设计(倒计时器电子秒表)_第1页
电子信息工程-课程设计(倒计时器电子秒表)_第2页
电子信息工程-课程设计(倒计时器电子秒表)_第3页
电子信息工程-课程设计(倒计时器电子秒表)_第4页
电子信息工程-课程设计(倒计时器电子秒表)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

PAGE2课程设计报告课程名称单片机原理与应用课题名称倒计时器设计专业电子信息工程技术班级学号姓名指导教师2011-12-22设计内容及要求(1)设计一个倒计时器,由单片机接收小键盘阵列设定倒计时时间,倒计时范围最大为60分钟,由LED显示模块显示剩余时间,显示格式为XX(分):XX(秒).X,精确到0.1s的整数倍。倒计时时间到,由蜂鸣器发出报警。(2)绘制系统硬件接线图,并进行系统仿真。(3)画出程序流程图并编写程序实现上述功能2、设计方案(1)单片机定时系统工作原理我们知道单片机的外接石英体振荡器能提供稳定、准确的频率,并经12分频后向内部定时器提供实时基准频率信号,我们设定定时工作在中断方式下,连续对此频率信号进行分频计数,便可得到秒信号,在对秒信号进行计数便可得到分、时、实时时钟信息。石英晶体振荡频率为6MHz,设定定时器工作在方式1下,定时常数为3CB0H,则定时器每100ms产生1次中断,在定时器的中断定时处理中,每10次中断,则向秒计数器减1,秒计数器计数到00时则向分计数器退位(并建立退位标志),分计数器计数到00时则向时计数器退位,计数器退位······如此周而复始地连续计数,便可获得时、分、秒的信号,建立一个实时时钟,接下来便可以进行报警输出,当主程序检测到有分退位标志时,便开始比较当前时间(小时与分,存放在RAM中)与规定时间(小时与分及秒,存放在ROM中)是否有相同者,则进行蜂鸣器报警,如无相同者则返回主程序,如此便实现了定时控制的要求。要准确到秒,则时、分、秒三者均需参与比较,并且建立秒进位标志位,即每秒钟的偶也要对定时设定值比较一遍。(2)电路原理定时电路的核心是AT89C51单片机,其内部带有4KB的FLASHROM,无须外扩程序存储器。电脑时钟没有大量的运算和短暂缓存数据,现有的128B片内RAM亦能满足要求,也不必外扩片外RAM。系统配备5位LED显示和3*4键盘,用P3口作为减排接口电路,P2口作为5位LED显示的位选通口,P0口则作为字形码输出口。采用共阳极LED数码管,PO口、P2口和数码管之间传接了驱动芯片74LS245,因此P2口输出高电平选中相应的位,而对P0口输出低电平点亮相应的段。(3)系统工作流程进入主程序。设置各中断的入口地址。把相关的寄存器清零。设置数码管显示的初始状态。对键盘进行扫描。显示下一个数字。进行倒计时。判断计时是否到了。到了清零处理。没到继续倒计时知道清零为止。3、程序设计根据上述工作流程,软件设计可分为以下几个功能模块:主程序:初始化与键盘监控。计时:未定时器0中断服务子程序,完成刷新计时缓冲区的功能。显示:完成5位LED动态显示。键盘扫描:判断是否有键按下,并求取键号。其他辅助功能程序,如键盘设置、拆字、合字、等。下面分模块进行软件设计:计时程序模块。如前所述,系统定时采用定时器与软件循环相结合的方法。定时器0每隔100ms溢出中断一次,则循环中断10次延时时间为1秒,上述过程重复60次为1分钟,分计时60次为1小时。设系统使用6MHz的晶振,定时器0工作方式1,则100ms定时对应的定时器初值可以下计算得到定时时间=(216-定时器0初值)*(12/fosc)如果定时器0初值为3CB0H,则TH0=3CH,TL0=0B0H。当系统使用其他频率的晶振时,可以由上式计算相应的定时器0初值,也可以改变定时时间。例如当系统晶振为12MHz时,同样的初值对应的设定时间为50ms,则循环中断次数为20次时,延时为1秒。这里有两个问题要特别重视。Ⅰ.定时器溢出产生中断请求,CPU并不一定立即响应中断,而可能需要延迟一定的中断响应时间之后才能响应中断,中断响应时间大约为3~8个机器周期。显然,这将在定时时间中加入额外的延时时间,导致即计时误差。为了保证计时精度,必须采取措施进行补偿。我们采用增大重装的定时器0初值的方法来减少定时器0的定时时间。具体应调整为多大,一般需要通过调试来确定。经测试,定时器0重装初值设为3CB7H~3CBFH可以满足精度要求。Ⅱ.时间是按十进制递增,而MCS-51系列单片机只有二进制加法指令,因此用加法指令计时必须进行二——十进制转换。,时间校时对设置程序和定时报时程序模块。将键盘输入的5位时间值合并为3位压缩BCD码(时、分、秒)送入即使缓冲区,作为当前倒计时起始时间。该模块的入口为即使缓冲区或报时值寄存区的首地址。程序调用一个键盘设置子程序将键入的5位时间值送入键盘缓冲区,然后程序将键盘设置缓冲区中的5位LED码合并为5位BCD码,送入即使缓冲区或计时值寄存区。二,键盘扫描程序模块。此模块的功能是判断是否有键按下,无键按下则循环等待,有键按下则求取键号并将键号送累加器A返回。程序中的去抖延时和循环等待延时都用显示子程序来代替,从而保证随时刷新显示。键盘扫描程序在前面已有详细叙述,在此不再累述。三,显示程序模块。将显示缓冲区中的5位BCD码用动态扫描方式扫描显示,为此必须首先将3字节计时缓冲区中的分、秒、毫秒,压缩BCD码拆分为5字节。四,拆字程序与合字程序,如前所述,拆字程序的功能是将3字节计时缓冲中的分、秒、毫秒压缩BCD码拆分为5字节,BCD码并刷新显示缓冲区,合字程序的功能是将键盘设置缓冲区中的5位BCD码合并为3位压缩BCD码,送入计时缓冲区或计时值寄存区。下面分别对各程序模块进行介绍。主程序。主程序流程图如图9-2所示。LED数码管扫描显示程序模块(流程图略)。键盘扫描程序模块键值处理程序模块倒计时程序模块流程图见图9-3。主程序:主程序的设计一般包括:主程序的起始地址,中断服务程序的起始地址,有关内存单元及相关部件的初始化和一些子程序调用等等。程序的起始地址MCS-51系列单片机复位后,(PC)=0000H,而0003H~002BH分别为个中断源的入口地址。所以,编程池应在0000H处写一跳转指令。当CPU接受到中断请求信号并予以响应后,CPU把当前的PC内容压入栈中进行保护,然后转入响应的中断服务程序入口处执行。一般在响应的中断服务程序入口处写一条跳转指令,并以跳转指令的目标地址作为中断服务程序的其始地址进行编程。主程序的初始化内容所谓初始化,是对用到的单片机内部部件或拓展芯片进行初始工作状态设定。本次设计中,使用了两个中断,即T0、T1。其中:1.T0中断:采用T0定时中断工作方式,完成倒计时。2.T1中断:采用T1定时中断工作方式,完成蜂鸣器报警。对于时钟而言,显示显然是另一个重要环节。如前所述,通常有两种显示方式:动态显示和静态显示。方案一:串口扩展,LED静态显示。该方案占用资源少,采用串口传输实现静态显示,显示亮度有保证,但硬件开销大、电路复杂、信息刷新速度慢,比较适用于并行口资源较少的场合。方案二:直接利用AT89C51单片机的P0和P2口,LED动态显示。该方案硬件连接简单,但动态扫描的显示方式需占用CPU较多时间,在单片机没有太多实时测控任务的情况下可以采用,本次系统选择动态显示方式。4.单片机倒计时控制系统硬件原理图5.流程图(1)主程序流程图:主程序主程序设置各中断服务程序的入口地址相关寄存器清零设置数码管显示初始状态按键扫描显示按下的数字进行倒计时时间到零否报警YN(2)倒计时器设计框图:主程序主程序数码管动态扫描模块当前时间倒计时模块输入倒计时时间模块蜂鸣器报警模块(3)倒计时器设计流程图:开始倒计时开始倒计时寄存器清零设置定时器0工作方式判断按键次数N启动定时器0关闭定时器01次2次3次等待中断T1中断发声提示达到最大值(4)按键消抖框图:开始开始有键闭合?调用延时字程序Y有键闭合?确定闭合的YNN6、调试问题与解决方法完成了硬件的设计、制作和软件编程后,要使系统能够按设计意图正常运作,必须进行系统调试。系统调试包括软件调试和硬件调试。不过,作为一个小计算机系统,其运行是软硬件相结合的,因此,软硬件的调试也是不可能绝对分开的,硬件的调试常常需要利用调试软件,软件的调试也可能需要对硬件的测试和控制来进行。(1)硬件调试。硬件调试的主要任务是排除硬件故障,其中包括设计错误和工艺性故障。1)脱机检查。用万用表逐步按照电路原理图检查印制电路中所有器件的各引脚,尤其是电源的连接是否正确:检查数据总线、地址总线和控制总线是否有短路等故障,顺序是否正确;检查各开关按键是否能正常开关,是否连接正常;各限流电阻是否短路等内容。为了保护芯片,应先对各IC电位进行检查,确定其无误后再插入芯片检查。2)联机调试。暂时拔掉89C51芯片,将仿真器的40仿真插入89C51的芯片插座进行调试,检验键盘/显示接口电路是否满足要求设计。可以通过一些简单的测软件来查看接口工作是否正常。例如,我们可以设计一个软件,使89C51的P1、P2口输出55H或AAH,同时读P3口,运行后用万用表检查相应端口电平是否一高一低,在仿真器中检查读入的P3口8位是否为1,如果正常则说明89C51正常工作。还可以设计一个使所有LED全显示“8.”的静态显示程序来检验LED的好坏。如果运行测试结果与预期不符,很容易根据故障现象判断故障原因并采取针对性措施排除故障。(2)软件调试。软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现硬件故障。程序的调试应一个模块一个模块地进行,首先单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来进行联调。联调需要注意的是,各程序模块间能否正常传递参数,特别要注意各子程序的现场保护与恢复。调试的基本步骤如下:1)用仿真器修改显示缓冲区内容,屏蔽拆字程序,调试动态扫描显示功能。例如将DISP0~DISP4单元置为“01234”,应能在LED上从左到右显示“01234”。若显示不正确,可在显示子程序相应设置断点调试检查,然后用仿真器修改计时缓冲区内容,调试显示模块,例如,将HOUR、MIN、SEC单元置为“01235”检查是否能正确显示“01.23.5”,若显示不正确,应在显示子程序相应位置设置断点,反复调试检验直至完全正确。2)运行主程序调试时模块,不按下任何键,检查是否从由60.00.0开始正确计时,若不能正确计时则应在定时器中断服务子程序中设置断点,检查HOUR、MIN、SEC、MSEC单元是否随断点运动而变化。然后屏蔽缓冲区初始化部分,用仿真器修改计时缓冲区内容为40:33.5,运行主程序,检验能否正确进位。3)调试键盘模块扫描,先用延时10ms子程序代替显示子程序延时消抖,在求取键号后设置断点,中断后观察A累加器中的键号是否正确,然后恢复用显示子程序延时消抖,检验与显示模块能否正常连接。4)调试时间设置/闹钟定时模块TIMSEF。首先屏蔽中断子程序,单独调试键盘设置模块CKECKEY,观察显示缓冲区DISP0~DISP4单元的内容是否随键入的键号改变,以及键号能否在LED上显示。然后屏蔽CKECKEY子程序,分别将R1设置为时间缓冲区和闹钟值寄存区的首地址,修改显示缓冲区内容,程序运行后查看时间设置缓冲区HOUR、MIN、SEC单元和闹钟值寄存区AHOUR、AMIN、ASEC单元内容是否正确。最后联调TIMSET模块。5)运行主程序联调,检查能否用键盘修改当前时间以及设置闹钟,能否正确计时、启闭、停闹。(3)脱机运行。软、硬件调试成功之后,可以将程序固化到89C51的FLASHROM中,插入89C51芯片,接上电源脱机运行。既然软硬件读都可以调试成功,脱机运行似乎肯定成功,然而事实往往并非如此,仍有可能出现以下故障;1)系统不工作。其原因主要有晶振不起振,或是EA脚没有接高电平(接地或悬空)等。2)系统工作时好时坏。这主要是由于干扰引起的。由于本系统没有传感输入通道和控制输出通道,干扰源相对较少且简单,因此,在电源、总线处对地接滤波电容一般可以解决问题。对本节介绍的单片机报时控制系统,需要做以下几点说明:(1)软件陷阱。为是跳飞的程序重新返回主程序区,恢复程序的正常运行,在EPROM的未编程区加入若干个如下的程序段:NOPNOPLJMPNEXTTNOP输出驱动加光电隔离元件,如果是驱动高压大电流,继电器选用过零触发的固态继电器,继电器安装部位应尽量远离单片机并加装良好的电磁屏蔽,减少对单片机干扰。7、仿真图8、程序模块;以下8个存储单元分别存放8位数码管的段码LED_BIT_1EQU 30HLED_BIT_2EQU 31HLED_BIT_3EQU 32HLED_BIT_4EQU 33HLED_BIT_5EQU 34HLED_BIT_6EQU 35HLED_BIT_7EQU 36HT_COUNTEQU 38HKEY_CNTEQU 39HLINE EQU 3AHROW EQU 3BHVAL EQU 3CHTCOUNT EQU 40HKCOUNT EQU 41HKEY BIT P3.3;************************************** ORG 00H SJMP START ORG 0BH LJMP INT_T0 ORG1BH LJMPINT_T1START: MOV T_COUNT,#00H ;初始化 MOV KEY_CNT,#00H MOV LINE,#00H MOV ROW,#00H MOV VAL,#00H MOV LED_BIT_1,#3FH MOV LED_BIT_2,#3FH MOV LED_BIT_3,#40H MOV LED_BIT_4,#3FH MOV LED_BIT_5,#3FH MOV LED_BIT_6,#80H MOV LED_BIT_7,#3FH MOV DPTR,#TABLEA0: LCALL DISP;**************************************;按键扫描LSCAN: MOV P3,#0F0H ;行码扫描 L1: JNB P3.0,L2 LCALL DELAY JNB P3.0,L2 MOV LINE,#00H LJMP RSCAN L2: JNB P3.1,L3 LCALL DELAY JNB P3.1,L3 MOV LINE,#01H LJMP RSCAN L3: JNB P3.2,L4 LCALL DELAY JNB P3.2,L4 MOV LINE,#02HRSCAN: MOV P3,#0FH ;列码扫描 C1: JNB P3.4,C2 MOV ROW,#00H LJMP CALCU C2: JNB P3.5,C3 MOV ROW,#01H LJMP CALCU C3: JNB P3.6,C4 MOV ROW,#02H LJMP CALCU C4: JNB P3.7,C1 MOV ROW,#03H ;***********************************************CALCU: INC KEY_CNT ;统计按键次数 MOV A,KEY_CNT CJNE A,#9,K1 ;如果按键3次,发声提示 MOV TMOD,#01H MOV TH1,#(65536-700)/256 MOV TL1,#(65536-700)MOD 256 MOV IE,#82H SETB TR1 W10:MOV A,P3 ;等待按键抬起 CJNE A,#0FH,W11 MOV P0,#00H CLR TR0 LJMP START W11:MOV A,P3 CJNE A,#0F0H,W12 MOV P0,#00H CLR TR0 LJMP START W12:SJMP W10;**************************************************;第1次按键,清除已显示的0,显示按下的数字 K1: CJNE A,#1,K2 MOV A,LINE MOV B,#04H MUL AB ADD A,ROW MOV VAL,A MOVC A,@A+DPTR MOV LED_BIT_1,ACJNEP3.3,#1,AA1DISP1: LCALL DISP W20:MOV A,P3 ;等待按键抬起 CJNE A,#0FH,W21 LJMP A0 W21:MOV A,P3 CJNE A,#0F0H,W22 LJMP A0 W22:SJMP DISP1 ;***************************************************;第2次按键,显示按下的数字 K2: MOV A,LINE MOV B,#04H MUL AB ADD A,ROW MOV VAL,A MOVC A,@A+DPTR MOV LED_BIT_2,A LCALLAA1 DISP2: LCALL DISP W30:MOV A,P3 ;等待按键抬起 CJNE A,#0FH,W31 LJMP A0 W31:MOV A,P3 CJNE A,#0F0H,W32 LJMP A0 W32:SJMP DISP2 ;**************************************************;开始倒计数AA1:MOV TCOUNT,#00H MOV KCOUNT,#00H MOV TMOD,#01H ;定时器0工作在方式1 MOV TL0,#(65536-50000)/256 MOV TH0,#(65536-50000)MOD 256 K1: JB KEY,$ ;等待按键 LCALL DELAY JB KEY,$ MOV A,KCOUNT CJNE A,#00H,K2 ;判断按键次数 SETB TR0 ;第1次按键,启动定时器 MOV IE,#82H JNB KEY,$ INC KCOUNT ;按键抬起,按键次数值加1 LJMP K1 K2: CJNE A,#01H,K3 CLR TR0 ;第2次按键,关闭定时器 MOV IE,#00H JNB KEY,$ INC KCOUNT ;按键抬起,按键次数值加1 LJMP K1 K3: CJNE A,#02H,K1 ;第3次按键,返回初始状态 JNB KEY,$ LJMP AA1INT_T0:MOV TH0,#(65536-50000)/256 MOV TL0,#(65536-50000)MOD256 INC TCOUNT MOV A,TCOUNT CJNE A,#2,A1 ;是否计够0.1秒 MOV A,LED_BIT_7 INC A MOVLED_BIT_7,A CJNEA,#9,DISP MOVLED_BIT_7,#00H MOVA,LED_BIT_5 DECA MOVLED_BIT_5,A CJNEA,#0,DISP MOVLED_BIT_5,#00H MOVA,LED_BIT_4 DECA MOVLED_BIT_4,A CJNEA,#0,DISP MOVLED_BIT_4,#00H MOVA,LED_BIT_2 DECA MOVLED_BIT_2,A CJNEA,#0,DISP MOVLED_BIT_2,#00H MOVA,LED_BIT_1 DECA MOVLED_BIT_1,A CJNEA,#0,DISP MOV TMOD,#01H A1:RETI;****************************************;定时器1中断服务程序,驱动扬声器发声INT_T1:MOV TH1,#(65536-700)/256 MOV TL1,#(65536-700)MOD 256 CPL P1.0 RETI;****************************************DISP: CLR P2.6 MOV P0,LED_BIT_7 LCALL DELAY SETB P2.6 CLR P2.5 MOV P0,LED_BIT_6 LCALL DELAY SETB P2.5 CLR P2.4 MOV P0,LED_BIT_5 LCALL DELAY SETB P2.4 CLR P2.3 MOV P0,LED_BIT_4 LCALL DELAY SETB P2.3 CLR P2

温馨提示

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

评论

0/150

提交评论