51单片机课设报告
- 格式:doc
- 大小:178.00 KB
- 文档页数:11
一、系统硬件设计
1、课程设计目的
①进一步熟悉和掌握单片机的结构及工作原理
②掌握单片机的接口技术及相关外围芯片的特性,控制方法
③通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。
④通过实际程序的设计和调试,逐步掌握模块化程序设计方法和调试技术。
⑤通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程。
⑥通过课程设计,培养学生综合运用所学专业知识分析问题和解决问题的能力。
2、系统工作原理
本系统采用51单片机内部的定时器0进行秒计数,用两个七段LED显示器显示秒时间(0~59s),同时由一个按键控制秒表的计数和清零。定时器0采用方式1,单次定时100ms,共循环10次达到定时一秒的目的。每定时1s计数时间加一,并将计时时间送七段LED显示。单片机通过两片74LS273与P0口相连进行I/O口的扩展,再与LED相连,LED显示方式为静态显示。按键入口选用P1口的P1.6引脚,同时按键采用软件去抖,保证只有当按键按下时间超过10ms并且弹开后超过10ms时系统才响应。
3、电原理图
说明:上方的74LS273(控制用来显示秒时间十位的LED)的CLK信号由读写信号和P2.0引脚控制,因此地址为FEFFH,下方的74LS273(控制用来显示秒时间个位的LED)的CLK信号由读写信号和P2.1引脚控制,因此地址为FDFFH。
4、系统工作过程
系统开始运行后,两LED均显示0,即等待有效按键信号开始计时。当产生一个有效的按键信号(P1.6引脚上查询到又高电平变为低电平且低电平持续时间超过10ms,再由低电平变为高电平且高电平持续时间超过10ms)时,定时器开启,系统开始计时,并且在两个LED上显示当前的计时时间(计时时间为0~59s)。每计时1s查询一次按键,当无有效按键信号产生时,系统循环计时。当有有效按键信号产生时系统停止计数,LED保持显示当前计时时间。同时查询按键,当无有效按键信号产生时,LED保持显示当前计时时间。当有有效按键信号产生时,系统对定时时间清零,同时使两LED均显示为0。继续等待有效按键信号开始计时,重复上述过程。
二、系统软件设计
1、程序设计说明
①主程序设计
主程序包含系统初始化,等待按键,响应按键三个部分。
系统初始化后,等待有效按键信号,当出现信号时,开启定时器0,不断查询中断标志TF0判断1s定时是否到,到了则秒表时间加一,送LED显示,否则继续等待信号。每加一秒则查询是否又出现有效按键信号,如无,则继续查询定时器中断标志,循环计时;如有,则关闭定时器,LED显示当前计时时间。继续查询是否有有效按键信号,如无,等待;如有则将计数时间清零,继续等待,重复上述过程。
②按键程序设计
在按键输入程序中,本系统设计了软件去抖功能。按键信号由P1.6引脚输入。当P1.6引脚从高电平转为低电平时,调用10ms延时子程序,当低电平维持10ms以上才进行下一步判断,否则认为是干扰。当P1.6引脚从低电平转为高电平时,继续调用10ms延时子程序,当高电平维持10ms以上才认为这是一个有效的按键信号,否则认为是干扰。达到了软件去抖的效果。
③显示程序设计
本系统用R7保存计时时间。进入现实子程序时,将R7中的数值对十取商(计时时间的十位),送入地址为FEFF的74LS273,由LED显示;将R7中的数值对十取余(计时时间的个位),送入地址为FDFF的74LS273,由LED显示。
④延时程序设计
由软件编程实现10ms延时。
0000 ORG 0000H
0000 020003 LJMP MAIN
0003 7F00 MAIN: MOV R7,#00H;数码管初始化显示“00”
0005 1171 ACALL LED
0007 780A MOV R0,#0AH;定时器循环10次,单次100ms,共定时1s 0009 758901 MOV TMOD,#01H;定时器方式字
000C 758C3C MOV TH0,#3CH;定时器初值
000F 758AB0 MOV TL0,#0B0H
0012 114E LP0: ACALL KEY;判断是否有键按下,有则开始计数,无则继续等待0014 D28C SETB TR0;启动定时器0
0016 108D02 LPPP2: JBC TF0,LPPP1;查询法等中断
0019 0116 AJMP LPPP2
001B 758C3C LPPP1: MOV TH0,#3CH
001E 758AB0 MOV TL0,#0B0H
0021 DB1D DJNZ R0,LP1
0023 780A MOV R0,#0AH
0025 0F INC R7;定时时间1s到,R7加1,送LED显示
0026 BF3C02 CJNE R7,#60,LPPP;计时时间到59则从0重新计时
0029 7F00 MOV R7,#00H
002B 1171 LPPP: ACALL LED
002D 2096E6 KEY1: JB P1.6,LPPP2;计时过程判断是否有键按下,有则停止计时,无则继续计时
0030 1165 ACALL DELAY
0032 309603 JNB P1.6,LP12
0035 020016 LJMP KEY1
0038 3096FD LP12: JNB P1.6,LP12
003B 1165 ACALL DELAY
003D 209603 JB P1.6,LP13
0040 020016 LP1: LJMP LPPP2
0043 C28C LP13: CLR TR0
0045 114E ACALL KEY;判断是否有键按下,有则清零,无则保持
0047 7F00 MOV R7,#00H
0049 1171 ACALL LED
004B 020012 LJMP LP0;以三次有效按键为周期(开始计数、停止计数、清零),循环执行程序
004E 2096FD KEY: JB P1.6,KEY;判断是否有键按下子程序(采用软件去抖,只有当按键又高到低后低电平持续10ms,再由低到高后高电平持续10ms才被认为是有效的按键信号)
0051 1165 ACALL DELAY
0053 309603 JNB P1.6,LP2
0056 02004E LJMP KEY