单片机课题设计.docx

上传人:b****6 文档编号:12619625 上传时间:2023-06-06 格式:DOCX 页数:29 大小:212.92KB
下载 相关 举报
单片机课题设计.docx_第1页
第1页 / 共29页
单片机课题设计.docx_第2页
第2页 / 共29页
单片机课题设计.docx_第3页
第3页 / 共29页
单片机课题设计.docx_第4页
第4页 / 共29页
单片机课题设计.docx_第5页
第5页 / 共29页
单片机课题设计.docx_第6页
第6页 / 共29页
单片机课题设计.docx_第7页
第7页 / 共29页
单片机课题设计.docx_第8页
第8页 / 共29页
单片机课题设计.docx_第9页
第9页 / 共29页
单片机课题设计.docx_第10页
第10页 / 共29页
单片机课题设计.docx_第11页
第11页 / 共29页
单片机课题设计.docx_第12页
第12页 / 共29页
单片机课题设计.docx_第13页
第13页 / 共29页
单片机课题设计.docx_第14页
第14页 / 共29页
单片机课题设计.docx_第15页
第15页 / 共29页
单片机课题设计.docx_第16页
第16页 / 共29页
单片机课题设计.docx_第17页
第17页 / 共29页
单片机课题设计.docx_第18页
第18页 / 共29页
单片机课题设计.docx_第19页
第19页 / 共29页
单片机课题设计.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课题设计.docx

《单片机课题设计.docx》由会员分享,可在线阅读,更多相关《单片机课题设计.docx(29页珍藏版)》请在冰点文库上搜索。

单片机课题设计.docx

单片机课题设计

 

单片机课程设计报告书

 

课题名称

秒表计时器的设计

姓名

马德明

学号

院、系、部

光电工程系

专业

应用电子技术

指导教师

2014年6月20日

一、设计任务及要求:

设计任务:

1、设计一个秒表计时器,含有启动、暂停、停止(至少)三个键,能够记录至多6组时间数据。

2、当启动按下后,开始计时,若按下停止键,数据存储并停止计时;若按下暂停键,数据存储的同时继续计时,直到计满了6组数据之后停止计时。

3、计数显示精确到0.1秒。

设计要求:

首先进行预设计,根据设计的任务要求,先确定设计的硬件电路方案,然后进行硬件电路的初步设计,在计算机上画出硬件电路图,在老师的指导下进行修正硬件电路图,并对所涉及的参数进行计算。

在确定硬件的基础上,要进行软件的总体设计,包括软件主流程的设计以及各子程序的设计,同时,要写出详细的操作说明,如时间的调整方法,显示窗口的时间切换等,以配合软件的设计。

然后进入硬件的调试及编程工作,设计组内的同学可根据任务分工,有调试硬件各功能模块的,如键盘子程序、显示子程序等,有进行整体程序的编制的,各模块的编制过程中要注意资源的衔接,最好采用伪定义的方式采用单片机的片内RAM资源。

最后进入联机调试,联机调试的原则也要采用分步走的原则,各个功能模块要逐步套入,通过一个再增加一项功能,从而达到设计的总体要求,不要上来编制个最大的程序,最后无法查找错误!

最后写出设计报告。

指导教师签名:

年月日

二、指导教师评语:

指导教师签名:

年月日

三、成绩

 

指导教师签名:

年月日

目录

一、绪言2

二、系统设计3

1设计任务3

2方案论证3

2.1系统整体设计框图3

2.2系统主要实现如下功能:

3

三、硬件电路设计5

3.1秒表/时钟计时器的硬件电路设计5

3.2单片机最小系统设计6

3.3数码管显示电路的设计6

3.4摁键控制系统模块的设计7

四、程序流程图8

4.1显示子程序8

4.2定时器T0中断服务程序9

4.3T1中断服务程序9

4.4调时功能程序10

4.5整点响程序10

4.6时钟/秒表功能程序10

五、汇编程序设计11

六、电子密码锁控制器仿真21

6.1Proteus调试21

七、结束语22

八、参考文献23

一、绪言

现今的计时器通常只能通过启/停按键实现断点计时的功能,即通过启/停按键来记录一段时间。

这种计时器查看的时间只能为计时结束时刻。

实际的应用中往往需要在不影响正常计时的基础上,能查看记录过程中的某些点的时间。

本课设即针对此问题,设计了一种能通过按键方式查看记录过程中任一时刻值的计时器。

这种计时器在查看中间值时不会影响整个记录过程,并且能把相应数据送入存储模块及显示模块,以便查看。

二、系统设计

1设计任务

通过对秒表计时器发展现状的了解,结合自己本次设计的课题,本次设计任务要完成的目标是:

1、设计一个秒表计时器,含有启动、暂停、停止(至少)三个键,能够记录至多6组时间数据。

2、当启动按下后,开始计时,若按下停止键,数据存储并停止计时;若按下暂停键,数据存储的同时继续计时,直到计满了6组数据之后停止计时。

3、计数显示精确到0.1秒。

2方案论证

2.1系统整体设计框图

图1系统总体设计框图

2.2系统主要实现如下功能:

2.2.1时钟功能

对于时钟功能,需要在数码管上显示小时、分钟和秒钟,因此,可以在内部存储空间分别定义它们的显示缓存空间,来存放小时、分钟和秒钟的BCD码,各2个字节。

由于时钟是不能停止的,因此需要采用内部定时器自动计时,并使用定时器中断处理程序来定时进行时间数值的刷新。

52单片机的2个定时器都具有16位定时器的

工作模式。

当晶振为12MHz时,16位定时器的最大定时值为65.536mS;要达到1秒钟,可以采用两种方法:

采用一个定时器定时与软件计数相结合的方法;或者采用两个定时器级联的方法。

由于秒表在计时功能时也需要用到1个定时器,因此,我们采用第一个方法,只使用1个定时器,例如使用T0。

为了达到较为准确的计时,使T0的溢出时间为50ms,使用一个字节作为软件计数器ST,计数值为20。

定时器的中断处理程序对ST进行减1操作,当ST为0时,1秒到达,此时更新存放小时、分钟、秒钟的显示缓存区。

2.2.2计时功能

当秒表用作计时功能时,也需要一个定时器进行10MS的定时,在本例中使用单片机的TIMER1。

在TIMER1的中断处理程序中对SS和ss的缓存空间进行更新,与上面类似。

2.2.3功能按键

再看按键的处理。

这3个键可以采用中断的方法,也可以采用查询的方法来识别。

对于A、B键,主要功能在于功能切换和数值复位,对于时间的要求不是很严格,而C键主要用于时间的锁定,需要比较准确的控制。

因此可以考虑,对A、B键采用查询的方式,而对于C键采用外部中断。

2.2.4中断嵌套和控制

现在在我的方案中有3个中断,T0、T1中断和外部中断INT0。

这3个中断的特点是:

T0的工作是连续的,可以在误差范围内可以被打断但不可以停止;T1的工作同样可以在误差范围内被打断,但可以被INT0停止;INT0是用来启动或停止T1的。

三硬件电路设计

3.1秒表/时钟计时器的硬件电路设计

采用AT89C52单片机,数字显示采用共阳六段LED显示器,P0口输出段码数据,P2.0-P2.5口作为列扫描输出,P1.0、P1.1、P1.3口接三个开关按钮,用以实现调时及秒表/时钟功能切换设置。

为了给共阳LED数码管提供驱动电压,采用三极管作电源驱动输出。

采用12MHZ晶振,有利于提高系统计时的精确性。

对于A、B键,主要功能在于功能切换和数值复位,对于时间的要求不是很严格,而C键主要用于时间的锁定,需要比较准确的控制。

因此可以考虑,对A、B键采用查询的方式,而对于C键采用外部中断。

图2电子密码锁控制线路图

3.2单片机最小系统设计

图3单片机最小系统

 

3.3数码管显示电路的设计

显示部分采用动态显示。

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的共阴极增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的位选通端,就使各个数码管轮流受控显示,这就是动态驱动。

动态显示是利用人眼视觉暂留特性来实现显示的。

事实上,显示器上任何时刻只有一个数码管有显示。

由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因此看到的是连续显示的现象。

为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。

图4LED显示器及工作原理

3.4摁键控制系统模块的设计

由P1口作为独立摁键信号的输入端控制时钟的加1s、减1s、复位60.0s等操作。

用外部中断0作为秒表计时器的开启和暂停的操作。

且所有摁键均为低电平有效。

其中部分摁键为单刀双掷开关用于控制增计时或减计时以及限60.0s计时和60.0s外计时。

四、程序流程图

 

图5主程序流程图

4.1显示子程序

数码管显示的数据存放在内存单元70H-75H中。

其中70H-71H存放秒数据,72H-73H存放分数据,74H-75H存放时数据,每一地址单元内均为十进制BCD码。

由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。

显示时,先取出70H-75H某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。

为了显示小数点及“-”、“A”等特殊字符,在显示班级及计时时采用不同的显示子程序。

4.2定时器T0中断服务程序

定时器TO用于时间计时,定时溢出中断周期可分别设为50ms和10ms.中断进入后,现判断是时钟计时还是秒表计时,时钟计时累计中断20次(即1s)时,对秒计数单元进行加1操作,秒表计时每10ms进行加1操作。

时钟计数单元地址分别在70H-71H(秒)、76H-77H(分)和78H-79H(时),最大计时值为23时59分59秒。

而秒表计数单元地址也在70H-71H(0.01毫秒)、76H-77H(秒)和78H-79H(分),最大计时值为99分59.99秒。

7AH单元内存放“熄灭符”数据(#0AH)。

在计数单元中采用十进制BCD码计数,满60(秒表功能时有100)进位,T0中断服务程序执行流程见下图

图6

定时器T0、T1溢出周期为50ms(10ms),T0为秒计数用,T1为调整时闪烁用;P1.0,P1.1,P1.2为调整按钮,P0口为字符输出口,采用共阳显示管。

4.3T1中断服务程序

T1中断服务程序用于指示调整单元数字的亮闪。

在时间调整状态下,每过0.3s,将对应单元的显示数据换成“熄灭符”数据(#0AH)。

这样在调整时间时,对应调整单元的显示数据会间隔闪亮。

4.4调时功能程序

调时功能程序的设计方法时:

按下P1.0口按键,若按下时间短于1s,则进入省电状态(数码管不亮,时钟不停);否则进入调分状态,等待操作,此时计时器停止走动。

当再按下按钮时,若按下时间短于0.5s,则时间加1分;若按下时间长于0.5s,则进入小时调整状态。

在小时调整状态下,当按键按下的时间长于0.5s,退出调整状态,时钟继续走动。

P1.1口按键在调时状态下可实现减1功能。

4.5整点响程序

如果在时钟状态下,如果是整点那么就用P3.2这个引脚来控制蜂鸣器。

4.6时钟/秒表功能程序

在正常计时状态下,若按下P1.1口按键,则进行时钟/秒表功能的转换,转换后计时从开始。

当按下P1.2口的按键时,可实现清0、计时启动、暂停功能。

五、汇编程序设计

程序清单:

/*AT89C52秒表/时钟程序*/

/*定时器T0、T1溢出周期为50ms(10ms),T0为秒计数用,T1为调整时闪烁用*/

/*P1.0P1.1P1.2为字符输出口,采用共阳显示管。

*/

/*主程序*/

START:

    MOV R0,#70H/*清零70H~7AH共11个内存单元*/

    MOV R7,#0BH

CLEARDISP:

MOV @R0,#00H

      INC R0

DJNZ R7,CLEARDISP

MOV 20H,#00H/*清20H(标志用)*/

MOV 7AH,#0AH/*放入“熄灭符”数据*/

MOV TMOD,#11H/*设置T0、T1为16位定时器*/

MOV TL0,#0B0H/*50ms定时初值(T0计时用)*/

MOV TH0,#3CH

MOV TL1,#0B0H/*50ms定时初值(T1闪烁定时用)*/

MOV TH1,#3CH/*50ms定时初值*/

SETB EA/*总中断开放*/

SETB ET0/*允许T0中断*/

SETB TR0

MOV R4,#14H

START1:

LCALL DISPLAY /*调用显示子程序*/

JNB P1.0,SETMM1/*P1.0口为0时,转时间调整程序*/

JNBP1.1,FUNSS/*秒表功能,P1.1按键调时时作减1操作*/

JNBP1.2,FUNPT/*STOP、PUSE、CLR*/

SJMPSTART1/*P1.0口为1时跳回START1*/

SETMM1:

LJMPSETMM/*转到时间调整程序SETMM*/

FUNSS:

LCALL DS20MS 

JB P1.1,START1

WAIT11:

JNB P1.1,WAIT11

CPL 03H

MOV 70H,#00H

MOV 71H,#00H

MOV 76H,#00H

MOV 77H,#00H

MOV 78H,#00H

MOV 79H,#00H

AJMP START1

ACALLZDBS

FUNPT:

LCALL DS20MS

JB P1.2,START1

WAIT22:

JNB P1.2,WAIT21

CLR ET0

CLR TR0

WAIT33:

JB P1.2,WAIT31

LCALL DS20MS

JB P1.2,WAIT33

WAIT66:

JNB P1.2,WAIT61/*清70~79H共10个内存单元*/

MOV R0,#70H

MOV R7,#0AH

CLEARP:

MOV @R0,00H

INC R0

DJNZ R7,CLEARP

WAIT44:

JBP1.2,WAIT41

LCALLDS20MS

JBP1.2,WAIT44

WAIT55:

JNBP1.2,WAIT51

SETBET0

SETBTR0

AJMPSTART1

WAIT21:

LCALLDISPLAY

AJMPWAIT22

WAIT31:

LCALLDISPLAY

AJMPWAIT33

WAIT41:

LCALLDISPLAY

AJMPWAIT44

WAIT51:

LCALLDISPLAY

AJMPWAIT55

WAIT61:

LCALLDISPLAY

AJMPWAIT66

/*中断入口程序*/

ORG 0000H;/*程序执行开始地址*/

LJMPSTART;/*跳到标号START执行*/

ORG 0003H;/*外部中断0中断程序入口

RETI /*外部中断0中断返回*/

ORG 000BH/*定时器T0中断程序入口*/

LJMP INTT0

ORG 0013H/*外部中断1中断程序入口*/

TETI/*外部中断1中断返回*/

ORG 001BH

LJMP INTT1/*跳至INTT1执行*/

ORG 0023H/*串行中断程序入口地址*/

RETI

/*T0中断服务程序*/

INTT0:

PUSH ACC/*累加器入栈保护*/

    PUSH PSW /*状态字入栈保护*/

   CLR ET0/*关T0中断允许*/

    CLR TR0/*关闭定时器T0*/

    JB 03H,FSS/*标志为1转秒表处理程序(10ms定时)*/

    MOV A,#0B7H/*中断响应时间同步修正*/

    ADD A,TL0/*低8位初值修正*/

    MOV TL0,A/*重装初值(低8位修正值)*/

    MOV A,#3CH/*高8位初值修正*/

    ADCC A,TH0

    MOV HT0,A/*重装初值(高8位修正值)*/

    SETB TR0/*开始定时器T0*/

    DJNZ R4,OUTT0/*20次中断未到中断退出*/

ADDSS:

MOV R4,#14H/*20次中断到(1s)重赋初值*/

    MOV R0,#71H /*指向秒计时单元(71H~72H)

    ACALL ADD1/*调用加1程序(加1s操作)

    MOV A,R3

    CLR C/*清进位标志*/

    CJNE A,#60H,ADDMM

ADDMM:

JC OUTT0/*短于60s时中断退出*/

    ACALL CLR0/*长与或者等于60s时对秒计时单元清零*/

    MOV R0,#77H/*指向分计时单元(76H~77H)*/

    ACALL ADD1/*分计时单元加1min*/

    MOV A,R3/*分数据放入A*/

    CLR C/*清零位标志*/

    CJNE A,#60H,ADDHH

ADDHH:

JC OUTT0/*短于60min时中断退出*/

    ACALL LCR0/*长与或者等于60s时对秒计秒单元清零*/

    MOV R0,#79H/*指向小时计时单元(78H~79H)*/

    ACALL ADD1/*小时计时单元加1h*/

    MOV A,R3/*时数据放入A*/

    CLR C /*清进位标志*/

    JB 03H,OUTT0/*秒表时最大数为99*/

    CJNE A,#24H,HOUR

HOUR:

JC OUTT0/*短于24h时中断退出*/

   ACALL CLR0/*长与或者等于24h时对秒计时单元清零*/

OUTT0:

MOV 72H,76H/*中断退出时将分、时计时单元数据移

    MOV 73H,77H入对应显示单元*/

    MOV 74H,78H

    MOV 75H,79H

    POP PSW /*恢复状态字(出栈)*/

    POP ACC /*恢复累加器*/

    SETB ET0/*开放T0中断*/

    RETI/*中断返回*/

/*秒表计时程序(10min加1),低2位为0.1、0.01秒,中间2位为秒,最高2位为分。

*/

最大计数值为99分59.99秒

FSS:

MOVA,#0F7H

ADDA,TL0

MOVTL0,A

MOVA,#0D8H

ADDCA,THO

MOVTHO,A

SETBTHO

MOVR0,#71H

ACALLADD1

CLRC

MOVA,R3

JZFSS1

SETBC

FSS1:

AJMPADDMM

/*闪动调时程序*/

/*T1中断服务程序,用作时间调整时时调整单元闪烁指示*/

INTT1:

PUSH ACC /*中断现场保护*/

   PUSH PSW 

   MOV TL1,#0B0H/*装入定时器T1定时初值*/

   MOV TH1,#3CH

   DJNZ R2,INTT1OUT

   MOV R2,#06H

   CPL 02H

   JB 02H,FLASH1

   MOV 72H,76H

   MOV 73H,77H

   MOV 74H,78H

   MOV 75H,79H

INTT1OUT:

POP PSW/*恢复现场*/

      POP ACC

      RET1

FLASH1:

JB 01H,FLASH2/*01位为1时,转[小]时熄灭控制*/

     MOV 72H,7AH

     MOV 73H,7AH

     MOV 74H,78H

     MOV 75H,79H

     AJMP INTT1OUT 

FLASH2:

MOV 72H,76H

     MOV 73H,77H

     MOV 74H,7AH

     MOV 75H,7AH

     AJMP INTT1OUT

/*加1子程序*/ 

ADD1:

MOV A,@R0/*取当前计时单元数据到A*/

    DEC R0

    SWAP A

    ORL A,@R0

    ADD A,#01H

    DA A

    MOV R3,A

    ANL A,#0FH

    MOV @R0,A 

    MOV A,R3

    INC R0

    SWAP A

    ANL A,#0FH

    MOV @R0,A

    RET

/*分减1子程序*/

SUB1:

MOV A,@R0  /*取当前计时单元数据到A*/

    DEC R0

    SWAP A

    ORL A,@R0

    JZ SUB11

    DEC A

SUB111:

MOV R3,A/*移入R3中暂存数据*/

    ANL A,#0FH 

    CLR C

    SUBB A,#0AH

SUB1111:

JC SUB1110

     MOV @R0,#09H

SUB110:

MOV A,R3/*取回R3中存数据*/

     INC R0

     SWAP A

     ANL A,#0FH

     MOV @R0,A

     RET

SUB11:

MOV A,#59H

    AJMP SUB111

SUB1110:

MOV A,R3/*移入R3存储器*/

     ANL A,#0FH

     MOV @R0,A

     AJMP SUB110

/*时减1子程序*/

SUBB1:

MOV A,@R0/*取当前计时单元数据到A*/

    DEC R0

    SWAP A

    ORL A,@R0

    JZ SUBB11

    DEC A

SUBB111:

MOV R3,A/*移入R3存储器*/

    ANL A,#0FH

    CLR C

    SUBB A,#0AH

SUBB1111:

JC SUBB1110

     MOV @R0,#09H

SUBB110:

MOV A,R3

     INC R0

     SWAP A 

     ANL A,#0FH

     MOV @R0,A

     RET

SUBB11:

MOV A,#23H

     AJMP SUBB111

SUBB1110:

MOV A,R3

      ANL A,#0FH

      MOV @R0,A 

      AJMP SUBB110

/*清0程序*/

/*为计时单元复0用*/

CLR0:

CLR A

    MOV @R0,A

    DEC R0

    MOV @R0,A

    RET

/*时钟调整程序*/

当调时按键按下进入此程序

SETMM:

CLR ET0/*关定时器T0中断*/

     CLR TR0/*关定时器T0*/

    LCALL DLIS

    JB P1.0,CLOSEDIS

    MOV R2,#06H

    SETB ET1

    SETB TR1

SET2:

JNB P1.0,SET1/*P1口为0,等待*/

   SETB 00H

SET4:

JB P1.0,SET3/*等待键按下*/

   LCALL DL05S

   JNB P1.0,SETHH

   MOV R0,#77H

   LCALL ADD1

   MOV A,R3

   CLR C

   CJNE A,#60H,HHH

HHH:

JC SET4

   LCALL CLR0

   CLR C

   AJMP SET4

CLOSEDIS:

SETB ET0

      SETB TR0

CLOSE:

JB P1.0,CLOSE /*无键按下,等待*/

    LCALL DISPLAY

    JB P1.0,CLOSE

WAITH:

JNB P1.0,WAITH

    LJMP START1

SETHH:

CLR 00H

SETHH1:

JNB P1.0,SET5

     SETB 01H

SET6:

JB P1.0,SET7/*等待键按下*/

   LCA

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2