单片机课程设计报告动态精确秒表.docx
《单片机课程设计报告动态精确秒表.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告动态精确秒表.docx(11页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告动态精确秒表
目录
前言基于AT89S51的编汇语言动态扫描秒表设计-1-
第一章设计的目的-1-
第二章功能说明-2-
第三章设计思路-2-
第四章设计方案-3-
第五章软件设计-4-
第六章仿真电路图-7-
第七章源程序清单-8-
第八章设计总结-12-
前言
基于AT89S51的汇编语言动态扫描秒表设计
利用一块芯片完成除时钟源、按键和显示器(数码管)之外的所有数字电路功能。
所有数字逻辑功能都在AT89S51器件上用汇编语言实现。
这样设计具有体积小、设计周期短(设计过程中即可实现时序仿真)、调试方便、故障率低、修改升级容易等特点。
该芯片可以完成彩灯控制、音乐播放器、交通灯、秒表、数字电压表等等一些功能的实现,在我们生活中运用很广泛,希望我利用所学的知识设计一个计时器可以完成更精确的计时。
它也许比较简单,而且有可能达不到很多人的要求,但我相信通过我们过一步的学习,我们一定会制造出更好的系统,为社会大众服务。
第一章设计的目的
基于单片机的综合实验仪器,利用汇编语言来编写一个秒表计时器。
通过该课程设计进一步了解单片机硬件组成的目的以掌握它的整机工作原理,掌握单片机的中断系统,以便掌握对单片机随机事件的高效响应和处理手段。
通过秒表的计时进一步掌握计数器的4种工作方式以及在不同工作方式下的时间和计数器常数的设定方法,并掌握中断功能在定时计数器中的应用。
1、利用单片机定时器中断和外部中断1来分别完成秒表的计时和暂停。
2、利用动态扫描的方式来实现数值的显示。
3、通过阅读和调试简易秒表整体程序,掌握如何编制含LED动态显示定时器中断外部中断等多种功能的综合程序,初步体会到大程序的编制和调试技巧。
第二章功能说明
已完成功能
1.完成秒/微秒的依次显示并正确计数;
2.秒/微秒各段个位满10正确进位;
3.利用四位一体数码管动态扫描完成秒、微秒显示:
A、精度达10ms;B、可以起动;C、完成暂停
4.秒表暂停记录数据后能在原有基础上继续计时,而是复位重新开始。
可以随时记时、暂停后记录数据。
待改进功能:
1.秒表不能向秒进位,也就是最多只能记时100ms;
2.多次电子秒表功能、倒计时电子秒表功能等。
第三章设计思路
软件整体设计思路是以键盘扫描、中断处理和数码管显示作为三大模块。
主程序调用显示扫描子程序,不断循环。
采用定时器T1进行定时,外部中断及计数的开启与关闭受控于按键处理。
1、要求:
用四位一体显示管来实现秒表的计时显示,在现实时秒的个位要加小数点,用按键来实现秒表的开始和暂停。
2、方法:
利用单片机定时器T1中断方式来实现10ms的计时,用逢十进一来实现进位,误差小,用判断到了秒的个位位时在秒的个位加一个小数点,用复位键来实现秒表的计时开始,用外部中断1来实现秒表的暂停,用外部中断0来实现秒表秒表暂停记录数据后能在原有基础上继续计时。
3、软件设计:
软件设计的整体思路是以中断、动态显示、加法累加器的运用。
主程序中用到外部中断0来控制秒表暂停后能在原有基础上继续计时的启动功能,外部中断1来控制秒表计时的暂停功能,定时器中断1来控制秒表以10ms为单位的计时功能,调用显示程序来显示秒表的数值。
显示程序用动态扫描将数值送到P0口,用p2口位来控制每一位的亮灭,延时时间很短,所以就可以看到四个显示管同时显示数值。
1s定时采用定时器T1中断,每10ms中断一次,用50H做10ms计数单元,每10次一个循环,计满10次,100ms计数单元(51H)计数一次,每10次一个循环,计满10次,1s计数单元(52H)计数一次,每10次一个循环,计满10次,10s计数单元(53H)计数一次。
第四章设计方案
✧主程序模块
中断设置、显示程序调用
✧中断模块
外部中断0、外部中断1、定时器中断1
✧计数模块
定时器中断1计数、逢十进一
✧显示模块
动态扫描、小数点显示
第五章软件设计
主程序流程图:
定时器中断子程序流程图:
显示子程序流程图:
第六章仿真电路图
✧元器件清单
元件
规格
数量
单片机
AT89S51
1
按钮
\
3
晶振
12MHz
1个
起振电容
30pF瓷片电容
2个
复位电容
10uf25V电解电容
1个
电阻
10kΩ、4.7Ω、220Ω
2/4/8个
三极管
9012
4个
四位一体显示管
共阳极
1个
DIP封装插座
40脚集成插座
1个
排线
/
若干
✧仿真图
第七章源程序清单
ORG0000H
LJMPSTART
ORG0003H;外部中断0入口地址
LJMPIN0BUT
ORG0013H;外部中断1入口地址
LJMPIN1BUT
ORG001BH;定时器T1中断入口地址
LJMPT1KOU
START:
MOVSP,#60H
MOV50H,#00
MOV51H,#00
MOV52H,#00
MOV53H,#00
MOVTMOD,#10H;定时器T1初始化
MOVTL1,#0F0H;设定初值
MOVTH1,#0D8H
MOVDPTR,#DOT
SETBEA;开中断
SETBIT0;开外部中断0控制位
SETBEX0;开外部中断0中断
SETBIT1;开外部中断1控制位
SETBEX1;开外部中断1中断
SETBTR1;开定时器T1控制位
SETBET1;开定时器T1中断
WJ:
LCALLDISPLAY;调用显示子程序
LJMPWJ
T1KOU:
MOVTL1,#0F0H;重装定时初值
MOVTH1,#0DBH
LCALLNBCD;调用定时器中断服务程序
RETI
IN0BUT:
SETBTR1;开定时器T1中断
RETI
IN1BUT:
CLRTR1;关定时器T1中断
RETI
NBCD:
MOVA,50H
MOV50H,A
ADDA,#1;毫秒加一
MOV50H,A
CJNEA,#0AH,EXIT;判断毫秒值是否为10
MOV50H,#00;毫秒值清零
MOVA,51H
MOV51H,A
ADDA,#1
MOV51H,A
CJNEA,#0AH,EXIT
MOV51H,#00
MOVA,52H
MOV52H,A
ADDA,#1
MOV52H,A
CJNEA,#0AH,EXIT
MOV52H,#00
MOVA,53H
MOV53H,A
ADDA,#1
MOV53H,A
CJNEA,#0AH,EXIT
MOV53H,#00
EXIT:
RET
DISPLAY:
MOVR0,#50H;显示数据缓冲区,首选地址送R0
MOVR3,#01H
MOVA,R3
LOOP:
CJNER0,#52H,LOOP1
MOVP2,A
MOVA,@R0;取欲显示数据
MOVCA,@A+DPTR;查得字形码
SUBBA,#10000000B
MOVP0,A
LCALLDL1;调用延时子程序
INCR0;指向下一个显示数据地址
MOVA,R3
JBACC.3,ELD1;扫描到第四个显示位否
RLA;扫描到扫描位左移一位
MOVR3,A
SJMPLOOP
LOOP1:
MOVP2,A
MOVA,@R0;取欲显示数据
MOVCA,@A+DPTR;查得字形码
MOVP0,A
LCALLDL1;调用延时子程序
INCR0;指向下一个显示数据地址
MOVA,R3
JBACC.3,ELD1;扫描到第四个显示位否
RLA;扫描到扫描位左移一位
MOVR3,A
SJMPLOOP
ELD1:
RET
DOT:
DB0C0H,0F9H,0A4H,0B0H,99H
DB92H,82H,0F8H,80H,90H
DL1:
MOVR7,#50;延时子程序
DL:
MOVR6,#100
DL6:
DJNZR6,DL6
DJNZR7,DL
RET
END
第八章设计总结
该设计在单片机系统上采用数码管显示,直观简洁;采用定时器中断,计时准确。
可随时启动、停止、清零。
设计、调试大型程序时,需先根据要求划分模块,优化结构;再根据各模块特点确定何为主程序,何为子程序,何为中断服务程序,相互间如何调用;再根据各模块性质和功能将各模块细化,设计出程序流程图;最后才根据各模块流程图编制具体程序。
调试时应先调主程序,实现最基本最主要的功能,在此基础上再将各模块功能往主程序上堆砌,直至各模块联调、统调,实现全部功能。
本例子将整个程序划分为按键扫描程序子程序,显示子程序,定时器中断服务子程序三大模块。
三大模块运行协调一致,既保持了动态显示的稳定性,又保持了键盘的可靠性,还保持了秒计时的准确性,较好地实现了全部功能。
通过一周的设计学习,让我了解了设计电路的程序,以及电子秒表的原理与设计。
同时在软件设计编程上,让我了解到很多编程方面的技巧,并且使我对单片机的各个引脚的功能有更深入的了解,巩固了单片机的书面知识,发现了以往在学习中忽视的东西,明白了在实际的设计工作中只有书面知识是不足的,只有在自己的实践中才能发现问题并解决问题,从而不再犯眼高手低的错误。
在此次的设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。
在设计电路中,是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的。
在使用WAVE6000软件时运用其中一些自带的仿真软件包能很好的找出程序中的错误,例如当你单步调试时,打开CPU窗口,你能观察到各个寄存器,累加器等对应值。
总的来说,通过这次的设计实验更进一步地增强了实验的动手能力,提高组成系统、编程、调试的动手能力。
而且在此次设计中,我了解到了团队合作的重要性,对以后步入社会积累了很好的经验。