毕业设计论文电子跑表的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南工程学院
课程设计
课程名称单片机原理与应用
课题名称电子跑表的设计
专业
班级
学号
姓名
指导教师王迎旭、伍萍辉、周向红、汪超、沈学军
2005年 5 月27 日
湖南工程学院
课程设计任务书
课程名称单片机原理与应用
课题电子跑表的设计
专业班级
学生姓名
学号
指导老师王迎旭、伍萍辉、周向红、汪超、沈学军
审批
任务书下达日期2005 年 5 月16 日任务完成日期2005 年 5 月27 日
目录
一.系统总体设计方案……………………………………………………………
1.1总体结构……………………………………………………………………
1.2软件设计模块…………………………………………………………
二.硬件设计………………………………………………………………
2.1硬件设计原理……………………………………………………………
2.2接口说明…………………………………………………………………
三.软件设计
3.1软件设计说明………………………………………………………………3.2程序流程图………………………………………………………………
3.3程序设计及功能…………………………………………………………
3.4软件调试…………………………………………………………
四、统功能及使用说明……………………………………………………………
4.1系统功能…………………………………………………………………
4.2操作使用说明……………………………………………………………
五心得体会……………………………………………………………………六参考文献………………………………………………………………………
附录A 定时器中断流程图………………………………………………………
一.系统的总体设计方案
1.1总体结构
根据本次课程设计的要求,设计一个电子跑表具有时钟和跑表的功能,并在4位LED显示器上显示,并具有启动停止复位功能.
我利用单片机定时器中断和定时器计数方式实现跑表和时钟功能,并采用P1接口来输出. 当P1.1拨1时,跑表计数显示;当P1.1拨1时,跑表停止计数;当P1.3拨1时,返回时钟计数.在实现跑表的功能时,时钟是不能停止的,否则显示的时间就会不正确。
因此我们使时钟的中断优先级高于秒表的优先级,在执行跑表程序时,会被时间中断,从而消除时钟的误差。
但这会使跑表的时间产生误差,这是不可避免的,因为单片机每次只能执行一个任务,所以我们只能尽量减少误差。
如果我们使时钟的中断周期大于跑表的中断周期,这样误差会相对减少些。
应当注意,跑表和时钟的中断服务程序有冲突,我们就把跑表的中断服务程序写成另外的子程序了,这样就必须要引入标志位了,我们在此用49H做标志为。
还要协调开关的位置和功能。
1.2软件设计模块
对于单片机的电子跑表在设计时要解决3个方面的主要问题:
一是LED显示模块的编程,二是有关单片机中定时器使用,三是如何利用单片机的外中断实现时钟功能和运行模块的转化。
二.硬件设计
2.1硬件设计说明
在讲设计原理之前我们先来介绍一下8279它是INTEL公司MCS-51系列单片机中最基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,标准MCS-51单片机的体系结构和指令系统。
它内置中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、2个16位定时/计数器和5个两级中断结构,一个全双工串行通信口. LED 动态显示程序模块的设计采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率.在单片机中,定时功能即可以由硬件实现,也可由通过软件定时程序实现.
2.2接口说明
在本次实验中我们采用P1口,P1口是一个内部带上拉电阻的8位准双向I/O口,当P1口输出高电平时,能向外部提供拉电流负载,因此不需再外接上拉电阻. 系统功能采用T0定时器工作于方式1,启动定时器工作,用软件启动,编程时TCON中的TR0置位即可启动;若由外部管脚启动,则对TCON中的TR0置位后,还需给外管脚加启动电平.
三:软件设计
3.1软件设计说明
计算定时器T0的计数初值X.
当时钟频率为12MHz时,
12×1000×50
X=65536 –
12
X=15536=3CB0
初值寄存器的初值TH0=3CH TL0=B0H
工作方式寄存器TMOD=00000001B=01H
T0定时器每50ms中断一次,中断两次为0.1s.
8279的初始化
我们知道8279的数据口地址0FF80H。
状态口地址0FF82H。
其中给,键盘/显示方式设置命令字00H
时钟编码命令字2FH
清除命令字0C1H
开关设置
P1.1 时钟转跑表
P1.2 跑表暂停
P1.3 跑表转时钟;
寄存器说明
41H 放置对应LED灯的1,2位42H 放置对应LED灯的3,4位50H 放置41H中的个位
51H 放置41H中的十位
52H 放置42H中的个位
53H 放置42H中的十位
48H 放置2,计两次定时器动作49H 放置标志位
3.2程序流程图
ORG 0000H
LJMP MAIN ;转至主程序入口地址
ORG 000BH ;中断服务子程序入口地址LJMP T0 ;转至中断程序
ORG 0040H ;设置主程序起始地址
MAIN:
MOV TMOD,#01H 设置T0工作方式:定时器,工作方
式1
MOV TL0,#0B0H ;计数初值的设定
MOV IE,#82H ;开中断
MOV 48H,#2 ;中断两次
MOV 31H,#0 ;时钟计数单元31清0
MOV 32H,#0 ;时钟计数单元32清0
MOV 47H,#0
MOV P1,#0FFH ;开放端口P1
SETB TR0 ;启动定时器
LOOP1:
JNB P1.1 TP0 ;判断P1.1口是否为零,来选择是
时钟和跑表
MOV 35H,#0 ; 跑表计数单元35清0
MOV 36H,#0 跑表计数单元36清0
TP2:
LCALL TP5 ;调用跑表计数程序
JNB P1.2,TP2 ;判断P1.2是否为0来控制跑表
暂停
JNB P1.3,$ ;返回时钟
TP0:
MOV 41H,31H ; 时钟计数内容送入显示地址MOV 42H,32H
LCALL DIVID
MOV A,52H ;加小数点
ADD A,#10
MOV 52H,A
LCALL DZSPLAY ;调用显示程序
SJMP LOOP1
TP5: ;跑表计数程序
MOV A,49H
CJNE A,#0FFH,TP ;判断0.1秒是否到
MOV 49H,#0 ;49单元清0
INC 35H ;
MOV A,35H
CJNE A,#10,TP ;判断10秒是否到
MOV 35H,#0 ;
INC 36H
MOV A,36H
CJNE A,#100,TP ;判断100秒是否到
TP: ;
MOV 41H,35H ;跑表计数内容送41单元
MOV 42H,36H ;跑表计数内容送42单元LCALL DIVID
MOV A,51H ;加小数点
ADD A,#10
MOV 51H,A
LCALL DZSPLAY 调用显示程序
RET
T0: 中断程序
PUSH ACC ;保护现场
MOV TH0,#3CH ;重装初值
MOV TL0,#0B0H
DJNZ 48H,RETE ;判断是否完成1秒定时MOV 48H,#2
MOV 49H,#0FFH ;给跑表0.1秒
INC 47H
MOV A,47H
CJNE A,#10,RETE ;判断1秒钟是否到
MOV 47H,#0
INC 31H
MOV A,31H
CJNE A,#60,RETE ;判断1分钟是否到
MOV 31H,#0
INC 32H
MOV A,32H
CJNE A,#60,RETE ;判断1小时是否到
MOV 32H,#0
MOV 31H,#0
RETE :POP ACC ;恢复现场
RETI ;返回
DIVID: ;将41单元42单元分为4位PUSH ACC ;保护现场
MOV A,41H ;1,2位LED显示
MOV B,#10
DIV AB
MOV 51H,A ;51单元为高位
MOV 50H,B ;50单元为低位
DIV AB
MOV 53H,A ;单元53位为高位
MOV 52H,B ;单元52位为低位
POP ACC ;恢复现场
RET
DISLED: ;显示字符子程序
PUSH DPH ;现场保护
PUSH DPL
PUSH ACC
MOV A,#80 ;置显示起始地址
ADD A,R4 ;加偏移地址
MOV DPTR,#0FF82H
MOVX @DPTR,A ;设定显示位
MOV DPTR,#LEDSEG ;置显示常数表起始地址
MOV A,R5
MOVC A,@A+DPTR
MOV DPTR,#0FF80H
MOVX @DPTR,A ;显示数据
POP ACC ;恢复现场
POP DPL
POP DPH
RET
DZSPLAY: ;显示程序
MOV R5 52H
MOV R4,#2
LCALL DISLED 显示D3位
MOV R5 53H
MOV R4,#3
LCALL DISLED 显示D4位
MOV R5 50H
MOV R4,#0
LCALL DISLED 显示D1位
MOV R5 51H
MOV R4,#1
LCALL DISLED 显示D2位
RET
LEDSEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH ;
END ;程序结束
LED动态扫描程序流程图
LED显示器十六进制数的字形代码
3.4、软件调试
软件调试的任务是利用软件的开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现硬件故障。
程序的调试应该一个模块接一个模块地进行,首先单独调试各共能子程序,检查程序是否能够实现预期的功能,接口电路的控制是否正确等;最后是逐步将各个子程序连接起来总调试。
联调需要注意的是:各个子程序间能否正确传递参数,特别需要注意各个子程序的现场保护与恢复.
四系统功能及使用说明
4.1系统功能
电子跑表,具有电时钟和跑表功能。
做时钟时在4位LED 显示器上显示分、秒,做跑表时显示范围000.0秒~999.9秒并具有跑表启动和跑表复位功能键.
4.2操作使用说明
当拨动一个开关时就做跑表用,跑表精度0.1秒,000.0~999.9秒,到达最大后重新计时。
还有一个开关控制暂停,另一个控制从跑表返回时钟。
但是,还有几点不足了。
一,当时钟转跑表时跑表缺一个控制启停跑表的开关。
二,在两者互相转换的时候都没有保存两者在转以前的数值。
还有,按钮不能同时按下,这样会使机子不能正常工作。
五心得体会
为期两周的课程设计结束了,在这两周当中我学到了很多东西,它包括课本上的也包括课本以外的.知识是无穷尽的,只有我们不断的去追求去探索,才能发现其中的奥秘.
当接到课题的时候,我就觉得一点头绪都没有,无从下手.只好整天埋在图书馆里查找资料,刚开始几天的时候还是觉得没有头绪,但是经过我跟同组同学的交流商讨之后有了思路,我们一起查找资料,功夫不负有心人,我们终于找到了可行方案.我们兴致勃勃的上机编程调试,但是有好多的错误,我们根据提示的错误来修改程序,有的是最基本的错误比如程序中出现非法字符,还有是我们粗心的错误漏掉一些字符.这些都是我们不应该出现的错误,是我们平时的基础知识掌握的不够牢固.而在平时的时候我们总觉的这里也会那里也会,觉得老师教的知识我都掌握了.其实不然,实践是检验真理的唯一标准,我们在这次课程设计中深深的体会到了.虽然程序调试的没有错误,但是这并不意味着我们实验成功了,我们还要看它能不能调试成功,我们把硬件接好以后发现显示的时间错误,只有时钟显示没有秒表显示,我们又从先开始找错误,在大家的努力下我们又把编好的程序重新上机编程调试,终于成功了.
在这次实验中我熟悉8259器中断和定时器计数方式的功能使用,为以后的工作和学习打下坚实的基础。
学会如何编制含定时器中断、键盘扫描和LED静态显示等多种功能的综合程序初步体会大型程序的编制和调试技巧。
我非常感谢老师让我们有这么好的条件亲自动手作实验,也非常感谢老师们对我们的指导.
六参考文献
附录
电气与信息工程系课程设计评分表
指导教师签名:________________
日期:________________
注:①表中标*号项目是硬件制作或软件编程类课题必填内容;
②此表装订在课程设计说明书的最后一页。
课程设计说明书装订顺序:封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。