基于单片机的秒表课程设计
基于单片机的秒表课程设计
姓名:
班级:
学号:
专业:
指导老师:
年月日
目录1、总体设计方案简介
1.1设计课程任务
1.2系统分析
1.3系统方案
1.4方案论证
2、硬件设计
2.1控制芯片的介绍
2.2硬件接线
2.2.1硬件接线接口
2.2.2硬件接线图
3、软件设计
3.1程序设计思路
3.2流程图
3.3源程序
3.4仿真结果
4、元件清单
5、心得体会
基于单片机的秒表课程设计
摘要
本设计的成品是在单片机最小系统的基础上增加显示电路和控制电路来完成数字式秒表的硬件电路的。电子秒表电路主要由AT89S51单片机最小系统电路、七段数码管动态显示电路和控制电路组成,它能实现八段数码显示和计时,能通过控制电路控制时间的暂停和开始。
关键字:AT89S51 数码管最小系统
1总体设计方案简介
1.1设计课题任务
设计一个具有特定功能的数字式秒表。用AT89C52设计一个2位LED 数码显示“秒表”,显示时间为00-59,另设计一个“开始”按钮和一个“复位”按钮。按键说明:按“开始”按键,开始计数,数码管从00开始每秒自动加一;按“复位”按键,系统清零,数码管显示00。
1.2系统分析
设计的电路主要是能多次计时,计时的多少通过显示电路出来,设计框图如图所示;
控制部
分技术和
存储部显示部分
1.3系统方案
利用AT89C52单片机设计数显定时器。此方案采用AT89C52单片机系统来实现。AT89C52芯片内含8KB 的EEPROM ,不需要外扩展存储器,可是系统整体结构更为简单。设计框图如图所示;
1.4方案论证
此方案是以AT89C52芯片为中心控制系统,可实现计时、清零等功能,大大提高了系统的智能化,也是的系统所测结果精度大大提高。所以此方案可行。
2硬件设计
2.1控制芯片的介绍
AT89S52是一种低功耗、高性能的片内含有4KB 快闪可编程/擦除只读存储器,的8位CMOS 微控制器,使用高密度、非易失存储技术制造,
外部控制开关
AT89C52
单 片 机
七段数码显示
并与80S52引脚和指令系统完全兼容。
主要性能:
与MCS-51微控制器产品系列兼容。
片内有4KB可在线重复编程的快闪擦写存储器
存储数据保存时间为10年
宽工作电压范围:VCC可为2.7V到6V
全静态工作:可从0Hz至16MHz
程序存储器具有3级加密保护
128*8位内部RAB
32条可编程I/O线
两个16位定时器/计数器
中断结构具有5个中断源和2个优先级
可编程全双串行通道
空闲状态维持低功耗和掉电状态保存存储内容
2.2硬件接线
2.2.1硬件接线端口
时钟引脚:XTAL1和XTAL2与内部的反相放大器构成一个振荡器,它提供单片机的时钟控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
P2口:P2.6和P2.7端口分别控制数码管的十位和个位供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过三极管给数码
管相应的位供电,这是只要PO口送出数字的显示代码,数码管就能正常显示数字。
PO口:PO.O-PO.6端口用排线连接到数码管显示模块区域中的A-G端口上;PO.O对应着A,......,PO.6对应着G。P0.7接高电平。
P1.0接“开始”按键
2.2.2硬件接线图(见附录图)
3软件设计
3.1程序设计思路
在硬件的基础上,可以通过软件完成数字式秒表的设计。我先用了矩阵键盘上的任意两个独立按键作为控制键。用一个键去控制计时的开始;用一个键做计时的清零按键。用按键扫描的方式判断按键是否按下。
用动态显示的方法扫描秒表的计数,显示所记下的数。用中断的方法来进行计时加1,每10ms中断一次进行重新赋值并加1,当10ms单元达到10,就令该单元赋0,并让100ms单元加1,以此类推。
3.2流程图
1主程序流程图
程序开
程序初
开个中
P1.0
关定时器
调用显示
P1.0=
开定时器
3.3源程序
FIRST EQU P2.7 ;第一位数码管的位控制
SECOND EQU P2.6 ;第二位数码管的位控制
SEC EQU 00H ;1S到的标记
UALUE EQU 21H ;秒计数器
COUNT EQU 22H ;软件计数器
DISPBUF1 EQU 5EH ;5EH是显示缓冲区
DISPBUF2 EQU 5FH ;5EF是显示缓冲区
HIDDEN EQU 10 ;消隐码在字型码表的第10位
ORG 0000H
LJMP START1
ORG 000BH
LJMP INT_T0
ORG 0100H
START1:JB P1.0,START1
LJMP START
START:MOV SP,#5FH ;设置堆栈指针初值
MOV VALUE,#0 ;秒计数器
MOV COUNT,#0 ;软件计数器
MOV DISPBUF1,#0 ;显示缓冲区填充0
MOV DISPBUF2,#0 ; 显示缓冲区填充0
MOV TMOD,#01H
MOV TH0,#0ECH ;取60536的高8位,60536=65536-10000*6/12定时器初值,定时时间10ms
MOV TL0,#98H ; 取60536的高8位,60536=65536-10000*6/12定时器初值,定时时间10ms
SETB ET0 ;开T0中断
SETB TR0 ;定时器T0开始运行
CLR SEC
SETB EA ;开总中断
LOOP:JBC SEC,NEXT ;1s到,消除1s到的标记
LCALL DISP ;1s未到,调用显示程序
SJMP LOOP ;继续循环
NEXT:MOV A,VALVE ;获得秒的数值
MOV B,#10
DIV AB ;二进制转化为十进制,十位和个位分别送显示缓冲区
JZ NEXT1 ;如果A中值是0,高位0消隐
SJMP NEXT2 ;否则直接送去显示
NEXT1:MOV A,#HIDDEN
NEXT2:MOV DISPBUF1,A
MOV DISPBUF2,B ;个位送显示缓冲区
LCALL DISP
LJMP LOOP ;主程序到此结束
DISP: : 显示子程序
PUSH ACC ;ACC入栈
PUSH PSW ;PSW入栈
MOV A,DISPBUF1 ;取第一个带显示数
MOV DPTR,#DISPTAB ;字型表首地址
MOVC A,@A+DPTR ;取字形码
MOV P0,A ;将字型码送P0位
CLR FIRST ;开第一位显示器口
LCALL DELAY ;延时5MS
SETB FIRST ;关闭第一位显示器(开始准备第二位的数字)
MOV A,DISPBUF2 ;去显示缓冲区的第二位
MOV DPTR,#DISPTAB
MOVC A,@A+DPTR
MOV P0,A ;将第二个字型码送P0口
CLR SECOND ;开第二位显示器
LCALL DELAY ;延时
SETB SECOND ;关第二位显示器
POP PSW
POP ACC
RET ;显示程序结束
DELAY:;以下是延时程序
PUSH PSW ;5ms延时程序
SETB RSO
MOV R7,#50
D1: MOV R6,#50
D2: DJNZ R6,$
DJNZ R7,D1
POP PSW
RET
DISPTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;显示字型表,最后一个OFFH是消隐码,它是表中的第11位元素
INT_T0: ;定时中断处理
PUSH ACC
PUSH PSW ;中断保护
MOV TH0,#OECH
MOV TLH,#98H ;定时计数器重置初值
INC COUNT ;软件计数器加一
MOV A,COUNT
CJNE A,#100,INT_RET
MOV COUNT,#0 ;计到100,软件计数器清零
SETB SEC ;将秒标志置位一
INC VALVE ;秒的值加一
MOV A,VALVE
CJNE A,#60,INT_RET
MOV VALVE,#0
INT_RET: POP PSW
POP ACC
RETI
END
4元件清单
元件名数量
AT89C52 1
八段数码管 2
NPN三极管 2
12M晶振 1
按键 2
330Ω电阻9
200Ω电阻 1
无极性电容(30pf) 2
电解电容(10U/25V) 1
5心得体会
本文主要从硬件方面说明设计的总体思路和设计的实现过程,预期的设计目的是:能够实现秒表的基本功能,正常显示计数。
在设计中有好多问题都是因为理论知识不扎实,在有些管脚的置零和置一上概念模糊,这让我知道自己的理论知识学习的不够扎实,同时我明白要把所学的理论转化为实践需要一段努力学习的过程。
最近几年,科学发展很快,通过本次课程设计让我有了更深的认识,只有在设计制作的过程中不断的学习才能有更新的进步,不论我们在什么地方、什么岗位上都要以学为主、学以致用,才能把我们的工作做得更好。