09计1w 单片机秒表的设计Word格式文档下载.docx
《09计1w 单片机秒表的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《09计1w 单片机秒表的设计Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
![09计1w 单片机秒表的设计Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/8/d397f810-d6a6-42c3-a2b7-d5ab68a503c4/d397f810-d6a6-42c3-a2b7-d5ab68a503c41.gif)
一、用户需求分析
1、能同时记录四个相对独立的时间并分别显示。
2、两位LED动态显示,显示时间为00~99秒。
3、每秒自动加1。
4、一个开始按键、一个复位按键、一个暂停按钮和一个计录按钮(附加功能)。
5、翻页按钮查看四个不同的计时值。
(1)、增加“语音报时”功能;
(2)、增加“倒计时提醒”功能。
3、分析
1、利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。
2、综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。
3、通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握,对单片机实际的应用作进一步的了解。
4、通过本次系统设计,增强自己的动手能力。
认识单片机在日常生活中的应用的广泛性,实用性。
本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。
模拟利用AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计数的开启/暂停/继续与复位!
其中有两个数码管用来显示数据,一个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。
计秒数码管采用两位的数码管,当计数超过范围是所有数码管全部清零重新计数。
二、系统设计
本设计的最主要的元器件就是MCS-51单片机。
MCS-51单片机在一块芯片上集成了CPU,存储器RAM,ROM以及输入与输出接口电路,这种芯片习惯上被称为单片微型计算机,简称单片机。
MCS-51单片机是INTEL公司在1980年推出的高档8位单片机。
它的典型产品有:
8051,8031,8751,80C51,80C31,87C51。
AT89C51(图1)单片机由CPU,振荡器与时序电路,4个8位的I/O端口(P0,P1,P2,P3),串行口等组成。
P0口有三个功能:
1、外部扩展存储器时,当做数据总线(如图中的D0~D7为数据总线接口)。
2、外部扩展存储器时,当作地址总线(如图中的A0~A7为地址总线接口)。
3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。
P1口只做I/O口使用:
其内部有上拉电阻。
P2口有两个功能:
1、扩展外部存储器时,当作地址总线使用;
2、做一般I/O口使用,其内部有上拉电阻;
P3口有两个功能:
除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由寄存器来设置。
ALE:
地址锁存控制信号
PSEN:
外部程序存储器读选通信号
EA/VPP:
访问和序存储器控制信号
RST:
复位信号XTAL1和XTAL2外接晶振引脚VCC:
电源+5V输入VSS:
GND接地。
图2:
整体设计框图
这个系统中的复位电路是采用上电加按钮来实现的。
因为MCS-51单片机的复位是靠外部电路实现的。
MCS-51单片机工作之后,只要在他的RST引线上加载10ms以上的高点平,单片机就能有效地进行复位。
MCS-51单片机通常采用上电自动复位、按键复位、以及上电加按键复位等,我们采用的是上电加按键复位方式,这样做的优点是上电后可以直接进入复位状态,当程序出现错误时,可以随时使电路复位。
图3:
复位电路
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
MCS--51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。
图4:
晶振震荡电路
2.3键盘电路:
用部分P1口做开始开关,P1.0停止,P1.1复位,P1.3暂停记录,P1.4上翻,P1.5下翻,用外中断INT0开始,用软件法消除抖动。
图5:
键盘电路
图6:
显示电路
三、硬件设计
1、原理图
2、元器件清单
名称
型号
数量(片/只)
单片机
STC89C52
1
LED共阳极数码管
2
缓冲驱动器
74LS244
按键
触发式
6
晶振
12MHz
电容
30pF
电解电容
10uF
电阻
1kΩ
16
10kΩ
基板
蜂鸣器
四、测试方法设计
1、基本测试
检查电源端、地线、信号线、元器件
2、调试
(1)上电后查供电
用万用表测9v,5v,cpu,ea,复位电容,三极管的引脚
(2)编程序指示灯闪动测试cpu是否工作正常
ORG00H
LJMPMAIN
ORG10H
MAIN:
CLRP2
LJMOMAIN
END
(3)编写显示程序测试数码管是否正常显示
CLRP0
3、固化器的使用
安装相关软件,设置cpu型号,选择串口,导入编写好的测试程序生成的可执行文件,通过固化器将程序烧到芯片上。
五、软件流程设计
因为秒表设计相对较为简单,因此在软件设计中我们一般采用模块化程序设计的方法。
模块是一个具有独立功能的程序,可以单独设计、调试与管理,模块可分为功能模块和控制模块两类。
我们通过模块化程序设计可按适当的原则把一个情况复杂、规模较大的程序系统划分为一个个较小的、功能相关而又相对独立的模块。
每个小的模块完成一个确定的功能,在这些小的模块之间建立必要的联系,互相协作完成整个程序要完成的功能。
它具有明显的优点,把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。
其中的模块即为子程序,子程序是功能独立的程序段。
子程序的基本思想是编写一次,可以重复使用。
子程序的形式可以是一个程序文件,也可以是一个过程或函数。
子程序总被其他程序调用而不单独执行,这与主程序相对。
这个主程序也是由多个子程序模块组成,各程序模块都要完成一个明确的任务,实现某个具体的功能,、快加、复位,计数和显示等,在具体需要时调用相应的模块即可。
定时器流程图
加1子程序流程图:
2、程序代码及注解
(1):
主程序
MOVSP,#50H
MOVTMOD,#11H
MOVTH1,#0D8H;
定时10ms
MOVTL1,#0F0H
MOVTH0,#0CFH;
定时25ms
MOVTL0,#02CH
MOV20H,#00H;
BINSECOND
MOV30H,#00H;
SECOND
MOV31H,#00H
MOV40H,#40
MOV71H,#00H
MOV72H,#00H
MOV73H,#00H
MOV74H,#00H
MOVR2,#04H
MOVR3,#04H
MOVR1,#71H
SETBEA
SETBEX1
CLRET1
SETBET0
CLRPT0
CLRPT1
SETBPX1
SETBIT1
MOVP2,#0FFH
CLRTR0
CLRTR1
CLR7FH
判断是否有键按下,并确定是哪一个键,转移到相应的子程序的入口地址去执行子程序。
没有键按下则一直等待,直到有键按下。
ML1:
ACALLDISP;
调用显示程序
P1.0键按下时,计数停止
START:
JBP1.0,LOOP1
ACALLDELAY10;
延时
JBP1.0,LOOP1;
P1.0=1,跳转到LOOP1执行
JNBP1.0,$
LJMPSTOP;
P1.0=0,跳转到停止子程序
P1.1键按下时,数字清零复位
LOOP1:
JBP1.1,LOOP2
JBP1.1,LOOP2;
P1.1=1,跳转到LOOP2执行
JNBP1.1,$
LJMPRESET;
P1.1=0,跳转到复位子程序
P1.3键按下,暂停记录
LOOP2:
JBP1.3,LOOP3
ACALLDELAY10;
JBP1.3,LOOP3;
P1.3=1,跳转到LOOP3执行
JNBP1.3,$
LJMPJILU;
P1.3=0,跳转到暂停记录子程序
P1.4键按下时,执行上翻功能
LOOP3:
JBP1.4,LOOP4;
P1.4=0,SHANGFAN
ACALLDELAY10;
JBP1.4,LOOP4;
P1.4=1,跳转到LOOP4执行
JNBP1.4,$
LJMPXIAFAN;
P1.4=0,跳转到上翻子程序
P1.5键按下时,执行下翻功能
LOOP4:
JBP1.5,LOOP;
P1.5=0,XIAFAN
JBP1.5,LOOP;
P1.5=1,跳转到LOOP执行
JNBP1.5,$
LJMPSHANGFAN;
P1.5=0,跳转到下翻子程序
LOOP:
SJMPHERE
(2)停止子程序
软件对定时器0和定时器1的控制位清零,使定时器停止工作
STOP:
CLRTR0
CLRTR1;
关闭定时器0,1
ACALLDISP
(3)复位子程序
软件对显示的各内存单元清零,并回到开始前的初始状态,具体程序如下所示:
RESET:
CLRTR0
关闭定时器0,1
MOV20H,#00H
MOV30H,#00H
MOV31H,#00H
调用显示子程序
SJMPHERE
(4)按键消抖程序
DELAY10:
MOVR4,#14H
延时10ms再次判断该位的状态,若仍是0则说明该键被按下,弹起后去执行该按键功能;
若为1,则说明是抖动则继续向下判断。
例如下面的程序中就调用了这个子程序。
JBP1.3,LOOP3;
P1.3=0时,暂停记录
ACALLDELAY10
JBP1.3,LOOP3
JNBP1.3,$
LJMPJILU
六、设计总结与体会
经过两周的不懈努力,单片机的课程设计终于完成了。
在这期间我们学会了很多,也学到了很多,同时,对单片机这门课程有了更深一步的理解和掌握。
1、本次课程设计使我加深了对单片机课程的全面认识,复习和掌握,对MC-51单片机有了更深入的了解,对I/O口的使用,晶振电路的接法,以及复位电路等的掌握都有了很大程度的提高,这为以后的实践打下了良好的基础。
2、掌握了定时器、外部中断的设置和编程原理。
3、通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。
4、还要根据实验的实际情况,添加些额外程序来使系统更加的稳定,如开关的消震荡(采用延迟)。
5、程序要尽量做到由各个子程序组成,在有些程序后面最好加注释,这样在程序出错的检查过程中可以更容易查找的到,也更简洁,更明白易懂。
6、我在编程过程中还有好多不理解的地方,经过同学的帮助终于完成了这次设计。
在这个过程中体会到了合作的好处,更了解的互相帮助的重要性。
由于编程能力的有限和所学知识的局限性,在这个程序和设计系统中虽然实现了所有的基本要求和部分的高级要求,但是这其中还有许多不完善的地方,有时在上翻和下翻时会出现一些问题,这说明我在这方面还存在着很多不足,知识不够完备和系统,在以后的学习中还有待提高。
另外,在实践中虽然焊接好了硬件电路,却没能实践成功,希望老师能在以后的学习和生活中对我多加指导,促使我能取得更大的进步。
七、附录
附录一:
三篇相关论文
附录二:
程序
ORG0000H
LJMPMAIN
ORG0003H
ORG000BH
LJMPTIME1
ORG0013H
LJMPZHONGDUAN
ORG001BH
LJMPTIME10
ORG0100H
JBP1.0,LOOP1;
P1.0=0,STOP
JBP1.0,LOOP1
JNBP1.0,$
LJMPSTOP
JBP1.1,LOOP2;
P1.1=0时,复位
JBP1.1,LOOP2
JNBP1.1,$
LJMPRESET
P1.4=0时,上翻
JBP1.4,LOOP4
LJMPXIAFAN
P1.5=0时,下翻
JBP1.5,LOOP
LJMPSHANGFAN
CLRTR0;
停止程序
CLRTR1
CLRTR0;
复位程序
JILU:
MOVA,20H;
暂停记录程序
MOV@R1,A
INCR1
DJNZR2,HERE
MOVR1,#71H
SJMPSTOP
XIAFAN:
MOVA,@R1;
下翻程序
MOV20H,A
MOVB,#0AH
DIVAB
MOV31H,A
MOV30H,B
LCALLDISP
MOVR1,#74H
SHANGFAN:
上翻程序
DECR1
DJNZR3,HERE
HEE:
JNBTF1,HEE
CLRTF1
ACALLJIA1
JNBP1.0,STOP
SJMPHEE
HERE:
LJMPML1
ZHONGDUAN:
SETBTR0;
启动定时器0
RETI
TIME1:
PUSHACC;
定时1秒
PUSHPSW
MOVTH0,#0D8H
MOVTL0,#0F0H
DJNZ40H,RET0
LCALLJIA1
MOV40H,#100
RET0:
POPPSW
POPACC
TIME10:
PUSHACC;
定时10毫秒
MOVTH0,#0D8H
MOVTL0,#0F0H
RET1:
JIA1:
MOVA,20H;
加1
CLRC
INCA
CJNEA,#100,GO1
RET
GO1:
MOVB,#0AH
DISP:
MOVR0,#30H;
显示
MOVR3,#0FEH
MOVA,R3
PLAY:
MOVP1,A
MOVA,@R0
MOVDPTR,#DSEG1
MOVCA,@A+DPTR
MOVP2,A
LCALLDL1
MOVP1,#0FFH
MOVA,R3
RLA
JNBACC.2,LD1
INCR0
MOVR3,A
LJMPPLAY
LD1:
DL1:
MOVR7,#05H
DL:
MOVR6,#0FFH
DL6:
DJNZR6,$
DJNZR7,DL
MOVR4,#14H;
延时10毫秒
DL00:
MOVR5,#0FFH
DL11:
DJNZR5,DL11
DJNZR4,DL00
DSEG1:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
END