当前位置:文档之家› 电子跑表 单片机课程设计

电子跑表 单片机课程设计

目录第一章课题设计内容及要求 (2)1.1 内容 (2)1.2 要求 (2)第二章系统方案设计 (3)2.1设计方案 (3)2.2 设计原理 (3)第三章系统硬件设计 (4)3.1 硬件电路的设计方案及框图 (4)3.2 单片机的选择 (4)3.3 时钟与复位电路的设计 (5)3.3.1 时钟电路 (5)3.3.2 复位电路 (6)3.4 LED显示电路的设计 (7)3.4.1 控制方式 (7)3.4.2 段驱动芯片选择 (8)3.5 按键电路 (8)第四章系统软件设计 (9)4.1 主程序的设计 (10)4.2 时钟、跑表计时程序模块的设计 (12)4.3 T1断程序流程图如下: (16)4.4 代码转换程序: (18)4.5 显示程序 (19)第五章系统的安装调试说明 (21)第六章总结与体会 (22)参考文献 (23)附录 (24)1.程序原理图 (24)2.程序清单 (24)第一章课题设计内容及要求1.1 内容(1)本课题以单片机为核心,设计出电子跑表,具有以下功能:(2)具有电时钟和跑表功能;(3)做时钟时在4位LED 显示器上显示分、秒;(4)做跑表时显示范围000.0秒~999.9秒;(5)当按下启动按钮跑表开始计时,按下停止按钮停止计时,当按下复位按钮跑表回零。

1.2 要求用伟福编译程序,用Proteus画出电路图进行仿真。

第二章系统方案设计2.1设计方案电子跑表的设计有多种方法,例如,可用中小规模集成电路组成电子跑表;也可用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子跑表;还可以利用单片机来实现等等。

本次单片机综合实验需要进行硬件设计与软件设计。

2.2 设计原理(1)本系统采用AT89C51单片机、4位LDE显示、两块块74LS244芯片、4个调节按钮、共同构成我的单片机电子跑表的硬件。

(2)计时单元由单片机内部的定时器/记数器来实现。

(3)时间显示功能通过LED数码管动态扫描来实现。

由于数码管要显示时钟,还要显示跑表,因此,我分别用31H、32 H计时钟,用R5、R6计跑表,当要显示哪一个的时候,就把哪一个地址送到显示地址35 H、36 H中,达到跑表显示与时钟显示互不影响。

(4)电子跑表的启动/复位/清零功能由软件来实现。

P1.1接启动键,P1.3接停止键,P1.0接清零键。

P1.2实现时钟和跑表的转换功能。

(5)由于跑表和时钟的中断服务程序有冲突,我们就把跑表的中断服务程序写成另外的子程序了,这样就必须要引入标志位了,我们在此用42H标志位,用标志位来给跑表计数。

第三章系统硬件设计3.1 硬件电路的设计方案及框图根据设计要求和设计思路,确定该系统的设计方案,图1所示为该系统设计方案的硬件电路设计框图。

硬件电路有五部分组成,即单片机按键输入电路,单片机时钟电路,复位电路,LED显示器段码驱动电路,4位LED显示器电路。

图1 硬件电路设计框图3.2 单片机的选择根据初步设计方案的分析,设计这样一个简单的应用系统,可以选择带有EPROM的单片机,应用程序直接存储在片内,不用在外部扩展程序存储器,电路可以简化。

本系统选用AT89C51单片机。

该芯片的功能与MCS-51系列单片机完全兼容。

下图为MCS51的管脚图。

共有40个管脚,P口32个输入输出管脚本次设计用了16个。

3.3 时钟与复位电路的设计3.3.1 时钟电路单片机工作的时间基准是由时钟电路提供的。

在单片机的XTAL1和XTAL2两个管脚,接一只晶振及两只电容就构成了单片机的时钟电路,如下图所示。

电路中,电容器C1和C2对振荡频率有微调作用,通常的取值范围(20-40)pF。

石英晶体选择6MHz或12MHz都可以,起结果只是机器周期时间不同,影响计数器的计数初值。

3.3.2 复位电路单片机的RST管脚为主机提供一个外部复位信号输入端口。

复位信号是高电平有效,高电平有效的持续时间应为2个机器周期以上。

单片机的复位方式有上电自动复位和手工复位两种。

复位电路图是下图所示。

下图是51系列单片机常用的上电复位和手动复位组合电路。

3.4 LED显示电路的设计3.4.1 控制方式LED显示器的显示控制方式分为静态显示和动态显示两种,若选择静态显示,则LED驱动器的选择较为简单,只要驱动器的驱动能力与显示器的电流相匹配即可,而且一般只需考虑段的驱动;动态显示则不同,由于一位数据的显示是由段和位选信号共同配合完成的,因此,要同时考虑段和位的驱动能力,而且段的驱动能力决定位的驱动能力。

此设计选用共阴极接法的4位时钟型LED显示器。

其中管脚a,b,c,d,e,f,g为4位LED各段的公共引出端;D1,D2,D3,D4分别是每一位的共阴极输出端;dp是小数点引出端。

对于这种结构的LED显示器,它的体积和结构都符合我们的设计要求,由于4位LED阴极的各段已经在内部接在一起,所以必须使用动态扫描方式。

如下图所示。

段码输入端位码输入端3.4.2 段驱动芯片选择LED的段驱动电路有很多种,在本设计中选择了型号为74LS244的芯片。

该芯片具有锁存,译码,驱动的功能。

即在输入端输入要显示字形的BCD码,在输出端局可以得到具有一定驱动能力的7段显示字形码。

3.5 按键电路按键的开关状态通过一定的电路转换为高、低电平状态。

按键闭合过程在相应的I/O端口形成一个负脉冲。

闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。

抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。

为了避免CPU多次处理按键的一次闭合,应采用措施消除抖动。

第四章系统软件设计进行应用软件设计时可采用模块化结构设计,其优点是:首先,每个模块的程序结构简单,任务明确,易于编写,调试和修改;其次,程序可读性好,对程序的修改课局部进行,其他部分可以保持不变,便与功能扩充和版本升级;最后,便与多个模块调用和分工合作。

将本系统分为,时钟记时程序模块,数制转换模块,显示模块,跑表工作模块。

如下图所示。

将这些事先划分好的模块用汇编语言编成不同的子程序,再将它们有机的结合起来从而达到系统的整体功能。

其中显示程序贯穿整个系统软件的始终,其它的程序以一定的规律改变显示程序的显示内容为目的。

电子跑表软件设计的模块4.1(1)程序的起始地址:MCS-51单片机复位后,(PC)=0000H,而0003H-002BH分别是各中断源的入口地址。

所以,编程时应在0000H处写一条跳转指令。

当CPU接收到中断请求信号并予以响应后,CPU把当前的PC内容压入栈中进行保护,然后转入响应的中断服务程序入口处执行。

(2)主程序的初始化:将要用到的MCS-51系列单片机内部部件或扩展芯片进行初始工作设定。

ORG 0000HLJMP MAINORG 000BH ;T0中断入口地址LJMP INTT0ORG 0030HMAINMOV TMOD, #01H ;T0工作方式MOV TH0, #3CH ;T0初值MOV TL0, #0B0HMOV IE,#82H ;开中断MOV R7,#2 ;中断两次MOV 31H,#0 ;放后两位数字MOV 32H,#0 ;放前两位数字MOV 41H,#0 ;用在定时器计中断个数MOV P1,#0FFH ;开放P1口SETB TR0 ;启动定时器LOOP:JNB P1.0,ZHONG ;判开关P1.0信号,时钟与跑表切换。

MOV R5,#0 ;跑表清0MOV R6,#0TING:LCALL PAO ;调跑表子序MOV R5,#0 ;跑表清0MOV R6,#0ZHONG:MOV 35H,31H ;用于时钟记数的31H,32H送入显示地址MOV 36H,32HLCALL DIVID ;时钟显示MOV A,52H ;加小数点(分和秒之间)ADD A,#10MOV 52H,ALCALL DZSPLAYLJMP LOOP ;循环执行主程序RET4.2 时钟、跑表计时程序模块的设计(1)60分钟与1000秒时间的产生。

选择定时器T0,用工作方式1,定时 50ms,R7先置2,T0定时50ms中断一次,利用R7寄存器减1,当R7寄存器的值=0时,时间正好是0.1s,再利用R0寄存器计数,当R0=10时,时间刚好是1s,再利用R1寄存器计数60s,依次类推,累计60分钟的是时间值,需要用到以下几个寄存器:R7:累计0.1s时间寄存器。

T0每中断一次R7=R7-1,计数10次向30H进位,并将R7置2。

30H:累计1s时间寄存器。

当R0=60s时,向31H进位,然后将30H清零。

31H:累计60s时间寄存器。

当31H=60s时,当31H=60时,将30H、31H清零。

30H、31H用于时钟计时,以下R6、R5用于跑表计时。

R5:累计10S时间寄存器。

当R5=100时,向R6进位,然后将R5清零。

R6:累计1000S时间寄存器。

当R6=100时,将R6清零。

42H:为标志寄存器。

42H=1时,跑表、时钟计数器都计数,42H=0时,仅时钟计数器计数。

(2)内部计数器用作定时器时,是对机器周期计数。

每个机器周期的长度是12个振荡器周期。

因为实验系统的晶振是11.0592MHz,所以定时常数的设置可按以下方法计算:机器周期=12÷11.0592MH z=1.0857μS(65536-定时常数)*1.0857μS=50mS定时常数=EC78H初值寄存器的初值 TH1=ECH,TL1=78H工作方式计数器 TMOD=0000 0001B=01H(3)启动跑表时,T1计时到0.1s时,置42H=1,则在时钟计数器工作的同时,跑表计数器也在工作,并将跑表计数器的值送到显示缓冲区显示。

跑表程序如下:WATCH:CLR RS0CLR RS1CJNE R6,#0FFH,TP ;跑表程序MOV R6,#0H ;清标志位INC R4CJNE R4,#100,TP ;判是否到10s MOV 41H,R4 ;送41H单元MOV R4,#0HINC R5CJNE R5,#100H,TP ;判是否到1000sMOV 42H,R5MOV R5,#0HMOV R4,#OHTP: LCALL DIVID ;调代码转换程序RET4.3 T1断程序流程图如下:T1定时器程序设计流程图T1中断服务程序如下:INT_T0:PUSH DPHPUSH DPLPUSH ACCPUSH PSWCLR TR1 ;关T1MOV TH0,#4CH ;重置T1初值MOV TL0,#00HSETB TR0 ;启动T1CLR RS1 ;选择0区工作寄存器CLR RS0DJNZ R7,EXIT ;判断是否完成0.1s定时MOV R7,#2 ;到0.1sMOV R6,#0FFH ;置标志位INC R0CJNE R0,#10,EXIT ;判断是否到1sMOV R0,#0HINC R1MOV 41H,R1 ;秒值送41H单元CJNE R1,#60,EXIT ;判断是否到1minMOV R1,#0HINC R2MOV 42H,R2 ;分值送42H单元CJNE R2,#60,EXIT ;判断是否到1hMOV R2,#0HINC R3MOV 43H,R3 ;CJNE R3,#24,EXIT ;MOV R3,#0HMOV R2,#0HMOV R1,#0HEXIT:POP PSWPOP ACCPOP DPLPOP DPHRETI4.4 代码转换程序:由于人们日常习惯使用十进制数,而计算机的键盘输入、输出以及显示常采用二进制编码的十进制(即BCD码)或ASCII码。

相关主题