基于单片机的秒表课程设计.docx
《基于单片机的秒表课程设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的秒表课程设计.docx(11页珍藏版)》请在冰豆网上搜索。
基于单片机的秒表课程设计
基于单片机的秒表课程设计
姓名:
班级:
学号:
专业:
指导老师:
年月日
目录
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微控制器,使用高密度、非易失存储技术制造,并与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主程序流程图
3.3源程序
FIRSTEQUP2.7;第一位数码管的位控制
SECONDEQUP2.6;第二位数码管的位控制
SECEQU00H;1S到的标记
UALUEEQU21H;秒计数器
COUNTEQU22H;软件计数器
DISPBUF1EQU5EH;5EH是显示缓冲区
DISPBUF2EQU5FH;5EF是显示缓冲区
HIDDENEQU10;消隐码在字型码表的第10位
ORG0000H
LJMPSTART1
ORG000BH
LJMPINT_T0
ORG0100H
START1:
JBP1.0,START1
LJMPSTART
START:
MOVSP,#5FH;设置堆栈指针初值
MOVVALUE,#0;秒计数器
MOVCOUNT,#0;软件计数器
MOVDISPBUF1,#0;显示缓冲区填充0
MOVDISPBUF2,#0;显示缓冲区填充0
MOVTMOD,#01H
MOVTH0,#0ECH;取60536的高8位,60536=65536-10000*6/12定时器初值,定时时间10ms
MOVTL0,#98H;取60536的高8位,60536=65536-10000*6/12定时器初值,定时时间10ms
SETBET0;开T0中断
SETBTR0;定时器T0开始运行
CLRSEC
SETBEA;开总中断
LOOP:
JBCSEC,NEXT;1s到,消除1s到的标记
LCALLDISP;1s未到,调用显示程序
SJMPLOOP;继续循环
NEXT:
MOVA,VALVE;获得秒的数值
MOVB,#10
DIVAB;二进制转化为十进制,十位和个位分别送显示缓冲区
JZNEXT1;如果A中值是0,高位0消隐
SJMPNEXT2;否则直接送去显示
NEXT1:
MOVA,#HIDDEN
NEXT2:
MOVDISPBUF1,A
MOVDISPBUF2,B;个位送显示缓冲区
LCALLDISP
LJMPLOOP;主程序到此结束
DISP:
:
显示子程序
PUSHACC;ACC入栈
PUSHPSW;PSW入栈
MOVA,DISPBUF1;取第一个带显示数
MOVDPTR,#DISPTAB;字型表首地址
MOVCA,@A+DPTR;取字形码
MOVP0,A;将字型码送P0位
CLRFIRST;开第一位显示器口
LCALLDELAY;延时5MS
SETBFIRST;关闭第一位显示器(开始准备第二位的数字)
MOVA,DISPBUF2;去显示缓冲区的第二位
MOVDPTR,#DISPTAB
MOVCA,@A+DPTR
MOVP0,A;将第二个字型码送P0口
CLRSECOND;开第二位显示器
LCALLDELAY;延时
SETBSECOND;关第二位显示器
POPPSW
POPACC
RET;显示程序结束
DELAY:
;以下是延时程序
PUSHPSW;5ms延时程序
SETBRSO
MOVR7,#50
D1:
MOVR6,#50
D2:
DJNZR6,$
DJNZR7,D1
POPPSW
RET
DISPTAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;显示字型表,最后一个OFFH是消隐码,它是表中的第11位元素
INT_T0:
;定时中断处理
PUSHACC
PUSHPSW;中断保护
MOVTH0,#OECH
MOVTLH,#98H;定时计数器重置初值
INCCOUNT;软件计数器加一
MOVA,COUNT
CJNEA,#100,INT_RET
MOVCOUNT,#0;计到100,软件计数器清零
SETBSEC;将秒标志置位一
INCVALVE;秒的值加一
MOVA,VALVE
CJNEA,#60,INT_RET
MOVVALVE,#0
INT_RET:
POPPSW
POPACC
RETI
END
4元件清单
元件名
数量
AT89C52
1
八段数码管
2
NPN三极管
2
12M晶振
1
按键
2
330Ω电阻
9
200Ω电阻
1
无极性电容(30pf)
2
电解电容(10U/25V)
1
5心得体会
本文主要从硬件方面说明设计的总体思路和设计的实现过程,预期的设计目的是:
能够实现秒表的基本功能,正常显示计数。
在设计中有好多问题都是因为理论知识不扎实,在有些管脚的置零和置一上概念模糊,这让我知道自己的理论知识学习的不够扎实,同时我明白要把所学的理论转化为实践需要一段努力学习的过程。
最近几年,科学发展很快,通过本次课程设计让我有了更深的认识,只有在设计制作的过程中不断的学习才能有更新的进步,不论我们在什么地方、什么岗位上都要以学为主、学以致用,才能把我们的工作做得更好。