基于51单片机的数字钟设计 3.docx
《基于51单片机的数字钟设计 3.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字钟设计 3.docx(42页珍藏版)》请在冰豆网上搜索。
基于51单片机的数字钟设计3
武汉大学电子信息学院
电子系统综合设计课程论文
基于51单片机的数字钟设计
专业:
年级:
作者:
指导教师:
2012年6月13日
4.3蜂鸣器驱动电路5
5.3按键处理流程图7
5.4定时器中断流程图8
6.1.1调试软件
6.1.2仿真软件
1作品的背景与意义
近年来,随着电子产品的发展,人们对数字时钟的要求越来越高,本文针对人们的这一需求,设计了一种有单片机控制的多功能数字时钟。
该系统具有年、月、日、星期、时、分、秒设置及显示、闹钟定时等功能。
系统以C51单片机为核心,主要进行基于C51单片低功耗MCU的字符型数字钟及其系统的研究,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行定时、校时功能。
输出设备显示器可以用液晶显示技术和数码管显示技术。
系统带有数码管显示器,配合按键提供友好的用户界面,操作简单,同时具有定点报时功能,该数字钟能长期、连续、可靠、稳定的工作;同时还具有体积小、功耗低等特点,便于携带,使用方便。
系统软件设计包括单片机计算机两部分的编程。
计算机软件编程主要实现参数设置、串行口数据接收、指令发送以及数据的显示和存储。
单片机软件编程主要实现键盘、数码管显示、定点报时等各模块的功能,采用汇编语言编程。
钟表的数字化给人们生产生活带来了极大的方便而且大大地扩展了钟表原先的报时功能。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
2功能指标设计
本设计准备实现的功能:
(1)显示公历日期功能(年、月、日、时、分、秒)。
(2)可通过按键切换年、月、日及时、分、秒的显示状态。
(3)可随时调校年、月、日或时、分、秒。
(5)可实现闹钟功能。
3作品方案设计
3.1总体方案的选择
—————————基于51单片机的数字钟设计
单片机芯片作为控制系统的核心部件,它除了具备微机CPU的数值计算功能外,还具有灵活强大的控制功能,以便实时检测系统的输入量、控制系统的输出量,实现自动控制。
在本次设计中采用单片机技术来实现数字钟的功能。
方案的设计可以从以下几个方面来确定。
在本次设计中采用AT89C51单片机;显示电路的设计,在这里采用数码管显示;校时和定时电路的设计;实时控制电路是时钟电路的一个重要组成部分,采用的是一个时钟芯片,单片机从中读取数据送到显示器上显示,从而实现数字钟的功能;还有一些其他控制电路如复位电路、时钟电路等。
通过这些控制电路的连接构成了完整的电路。
3.2控制方案比较
程序设计内单片机的程序设计有其自身的特点。
在单片机系统中,硬件与软件紧密结合,由于硬件电路的设计不具有通用性,所以必须根据具体的硬件电路来设计对应的软件,硬件设计的优劣直接影响到软件设计的难易,软件设计的优劣又直接影响到硬件的发挥。
在很多时候,软件可以替代硬件的功能,当然,需要付出额外占用CPU时间的代价。
软件程序的设计是根据硬件电路图的连接和各个元器件的功能进行设计。
在编写软件时,可以按各个程序的功能将软件细分为各个功能模块,再通过主程序的调用来实现整个软件系统。
而一般编写的程序都是根据事前所用的流程图来编写的,而且,流程图中也包含了对设计所得结果的要求,因此,流程图的设计直接影响到源程序的设计。
控制键盘采用独立式按键,开机时,显示12:
00:
00的时间开始计时;P0.0/AD0控制“秒”的调整,每按一次加1秒;P0.1/AD1控制“分”的调整,每按一次加1分;P0.2/AD2控制“时”的调整,每按一次加1个小时;定时器1中断入口,产生秒基准时间并实现时间日期自增,定时器2中断入口,由软件控制蜂鸣器产生闹钟铃声。
3.3显示方案比较
单片机控制段式LED数码管显示。
码管由7段LED组成,因此可以称为七段数码管。
将这七个LED按一定规律点亮,就能够显示数字0~9,以及英文字母A、B、C、D、E、F。
而现在的数码管都有带有小数点(DP),实际上数码管就变成8段了。
显示二进制、十进制数、十六进制数,小数都不是问题。
数码管有共阳、共阴的区分。
顾名思义,共阳数码管公共阳极,即将8个数码管正极连接在一起,负极又8个不同端口控制。
共阴则与共阳相反。
段选引脚用于驱动一位数码管的八个段,即图上的a、c、d、e、f、g和dp。
根据不同的数字输出对应的电平,从而点亮一位数码管。
位选用于选择在某一时刻驱动哪一位数码管,设计里面使用两位数码管,因此需要两个引脚来控制这些位。
在控制位选时候,将数码管的位选引脚直接接到单片机的I/O口,是可行的。
原因是,单片机的I/O负载能力不足以驱动数码管,这时候,就需要外加上三极管作为电流放大使用。
使用了PNP三极管,将发射极接到电源的+5V,基极串上一10K电阻接到单片机的位选I/O口,集电极就接到数码管的位选端。
3.4公式
定时时间t=(
-T0初值)*振荡周期*12(1.1)
4硬件设计
4.1显示模块电路图
图4.1AD9851连接电路
4.24X4矩阵键盘硬件原理图
按钮未按下前,四个I/O口通过一个10K的电阻与VCC相连,所以此时四个I/O口的输入都为1即高电平;当按钮按下时,四个I/O口都接地,此时四个I/O口的输入都为即低电平。
图4.24*4键盘
4.3蜂鸣器驱动电路
蜂鸣器工作电压为+5V,将蜂鸣器的正极连接到电源+5V,负极连接到电源的GND,蜂鸣器就能发出声响。
单片机I/O的负载能力并不足以驱动蜂鸣器,为了解决这个问题,必需另需它法。
蜂鸣器的典型驱动电路是使用极管做开关。
5软件设计
5.1主程序流程图
图5.1主程序流程图
5.2显示模块流程图
5.3按键处理流程图
N
Y
N
Y
N
Y
5.4定时器中断流程图
N
Y
N
Y
N
Y
N
Y
6系统测试
6.1测试环境
6.1.1调试软件
KEIL:
KEILC51标准C编译器为微控制器的软件开发供了C语言环境,同时保留了汇编代码高效,快速的特点。
C51编译器的功能不断增强。
使你可以更加贴近CPU本身,及其它的衍生产品。
C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:
编译器,汇编器,实时操作系统,项目管理器,调试器。
uVision2IDE可为它们提供单一而灵活的开发环境。
一个单一的uVision2工程能够产生一个或多个目标程序。
产生目标程序的源文件构成“组”。
开发工具选项可以对应目标,组或单个文件。
同时uVision2包含一个器件数据库(devicedatabase),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定,微控制器的要求。
此数据库包含:
片上存储器和外围设备的信息,扩展数据指针(extradatapointer)或者加速器(mathaccelerator)的特性。
uVision2还可以为片外存储器产生必要的连接选项:
确定起始地址和规模。
uVision2编辑器包含了所有用户熟悉的特性,彩色语法显像和文件辩识都对C源代码进行和优化,也可以在编辑器内调试程序,它能提供一种自然的调试环境,使你更快速地检查和修改程序。
另外KEILC51编译器在遵循ANSI标准的同时,为8051微控制器系列特别设计。
因为语言上的扩展能让用户使用应用中的所有资源。
6.1.2仿真软件
PROTEUS:
Proteus软件是LabcenterElectronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。
Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。
通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。
6.2测试步骤
1.硬件调试,检测硬件是否合格;
2.默认为走时模式,按24小时制分别为“时时,分分.秒秒”。
然后进行走时调整;
3.万年历模式,为“年份,月份.日期”。
可以进行调整;
4.闹钟模式,可以定时闹钟。
6.3测试结果
单片机数字钟拥有时间模式,日历模式,闹钟模式三种模式。
6.4测试数据
表6.1功能数据测试
电子钟测试值/min
实际值/min
误差/%
平均误差/%
1
00:
00:
59.95
0.05
0.09
1
00:
00:
59.88
0.12
1
00:
01:
00.10
0.10
2
00:
01:
59.77
0.12
0.14
2
00:
02:
00.21
0.11
2
00:
01:
59.65
0.18
6.5心得体会
回顾起此次实验设计,我感慨颇多,从一开始的茫然到思路渐渐清晰,从开始选题到最终定稿,从理论到实践,在短短的五个星期的日子里,痛并快乐着,但是艰辛的付出是值得的。
电子综合设计课程作为一门开放性课程让适应了填鸭式教育的我们手足无措,但是老师的谆谆教诲和不厌其烦的耐心指导拨散了我们心中的迷雾,使我们有曲径通幽,豁然开朗之感。
从一开始的了解电路结构到最后的软硬件结合实现设计功能,我们遇到了各种问题。
这毕竟第一次做实验设计,难免会遇到过各种各样的问题。
在困难中前行,我们受益匪浅。
队友之间的相互磨合让我们学会了团队精神!
差错的出现考验了我们的随机应变能力!
实验设计遇到的阻力让我们明白了理论与实践相结合的重要性!
只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从操作中巩固理论,两者有机结合,提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中找出不足之处,加以改正不断提升自己的水平。
通过此次实验,在让我们体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐.。
这次电子设计实验,虽然短暂但是让我们得到多方面的提高:
1.我们了解并掌握了单片机的基本应用,学习了Keil软件的用法,.
2、提高了我们的逻辑思维能力,加强了实际操作能力。
我们在逻辑电路的分析与设计上有了质的飞跃。
我们理解了各种芯片的功能及构造,加深了对组合逻辑电路与时序逻辑电路的认识,进一步增进了对一些常见逻辑器件的了解。
3,查阅参考书的独立思考的能力以及培养非常重要。
我们在设计电路时,遇到很多不理解的东西,有的我们通过查阅参考书弄明白,有的通过网络查到,但由于时间和资料有限我们更多的还是独立思考。
所以不断的汲取知识是非常重要的。
4、队友之间的团结合作也是非常重要的,众人拾柴火焰高,我们三个人的力量加起来所有问题就能迎刃而解!
参考文献
[1]李朝青.单片机原理与接口技术(第三版).北京:
北京航空航天大学出版社,2005.
[2]李军.51系列单片机高级实例开发指南.北京航空航天大学出版社.
[3]王毓银.数字电路逻辑设计[M].高等教育出版社.2004-2.
[4]许伟敏程佩青.多功能电子数字钟.2009.
[5]电子技术基础实验课程组.电子技术基础实验指导书.武汉大学电子信息学院.
[6]李光飞.单片机设计实例指导.北京航空航天大学出版社.
[7]刘华东.单片机原理与应用.北京电子工业出版社.
附录1系统电路图
附录2系统软件代码
/****************************************************************************/
/****************************************************************************/
KEYEQU0F8FFH;按键地址
LED_SEGEQU0FAFFH;液晶段数据
LED_SELEQU0FBFFH;液晶段片选
KHEQU21H;保存按键行值
KKEQU22H;按键值地位
KVEQU23H;保存按键列位
KTEQU24H;临时保存按键状态
HOUEQU25H
SECEQU26H
MINEQU27H
HBEQU28H;数据高位
LBEQU29H;数据低位
DATE_TIMEEQU2AH;记录时间、日期模式,3表示时间,4表示日期
LP0EQU2BH;定时器1循环次数
LP1EQU2CH;定时器2循环次数
YEARHEQU2DH
YEARLEQU2EH
MONEQU2FH
DAYEQU30H
FLASHEQU31H;设置标记变量
FLASH_BITEEQU32H;设置位标记变量
FLASH_FIGUREEQU33H;设置位数值标记变量
SIGNEQU34H;闰年标记
BOOLEQU35H;是否按下
LP3EQU36H
LP4EQU37H
BITEEQU38H
LP2EQU39H
H_LBEQU3AH
H_HBEQU3BH
LP5EQU3CH;闹钟个数
LP6EQU4FH
LP7EQU50H
LP8EQU51H
LP_HEQU52H
LP_LEQU53H
BPBITP1.0;闹钟
LED_1BITP1.1
ON_OFF0BIT00H
ON_OFF1BIT01H
ON_OFF2BIT02H
ON_OFF3BIT03H
ON_OFF4BIT04H
BOOL_HBIT05H
BOOL_LBIT06H
/*********************************************************************************/
ORG0000H
LJMPMAIN
ORG000BH;定时器1中断入口,产生秒基准时间并实现时间日期自增
LJMPSERVE
ORG001BH;定时器2中断入口,
LJMPREDRAW
/*********************************************************************************/
ORG1000H
MAIN:
MOVSP,#60H
MOVBOOL,#0H
MOVLP0,#14H
MOVLP1,#250
MOVTMOD,#11H
MOVTH0,#3CH
MOVTL0,#0B0H;
MOVTH1,#03CH
MOVTL1,#0B0H
MOVLP7,#2;定时器1循环次数
MOVLP8,#50;
MOVSIGN,#0FFH
MOVFLASH,#0
MOVYEARH,#20
MOVYEARL,#12
MOVMON,#2
MOVDAY,#29
MOVHOU,#23
MOVSEC,#53
MOVMIN,#59
MOVR4,#0DFH
MOVDATE_TIME,#3H
MOVFLASH_BITE,#0FFH
MOVLP5,#0
MOVLP_H,#70
MOVLP_L,#70
SETBBP
SETBON_OFF0
SETBON_OFF1
SETBON_OFF2
SETBON_OFF3
SETBON_OFF4
SETBBOOL_H
SETBBOOL_L
MOV3DH,#0
MOV45H,#0
MOV4AH,#0
MOV3FH,#1
MOV47H,#1
MOV4CH,#1
/******************************定时器初始化*************************************/
SETBET0;允许T0中断
SETBET1;禁止T1中断
SETBEA;CPU开放中断
CLRTR1;关闭定时器T1
SETBTR0;开启定时器T0
/*********************************************************************************/
WHILE:
LCALLLP
KEY_NUM:
;按键处理
MOVDPTR,#KEY
MOVA,#0H
MOVX@DPTR,A
MOVA,FLASH
JZSETTR0
MOVA,DATE_TIME
CJNEA,#4,CLRTR0
SETTR0:
SETBTR0
JMPJUDGE
CLRTR0:
CLRTR0
JUDGE:
;扫描是否有键按下
MOVDPTR,#KEY
MOVXA,@DPTR
ANLA,#0FH
MOVR1,#0EFH
MOVR2,#4H
MOVKT,A
CJNEA,#0FH,FIND
MOVBOOL,#0
JMPWHILE
FIND:
;查询按下的键
MOVA,R1
RRA
MOVR1,A
MOVDPTR,#KEY
MOVX@DPTR,A
NOP
NOP
MOVDPTR,#KEY
MOVXA,@DPTR
ANLA,#0FH
MOVKV,A
XRLA,KT
JZPRO0
DJNZR2,FIND
PRO0:
;计算键值
MOVA,BOOL
JNZRETURN3
MOVBOOL,#1H
MOVKH,R2
DECKH
MOVA,KV
CPLA
ANLA,#0FH
MOVB,#2H
DIVAB
CJNEA,#4H,PRO1
MOVKV,#3H
JMPPRO2
PRO1:
MOVKV,A
PRO2:
MOVA,KH
MOVB,#4H
MULAB
ADDA,KV
MOVKK,A
KEYPRO:
;键功能处理
MOVA,KK
CJNEA,#0AH,KEYPRO1
KEYPRO1:
JCDIGPRO
KEYTBL:
;功能键处理
MOVDPTR,#JMPTBL
CLRC
SUBBA,#0AH
RLA
JMP@A+DPTR
JMPTBL:
;功能键入口地址表(前四行)
AJMPCAL
AJMPTIM
AJMPSETTING
AJMPYES
AJMPALARM
AJMPON_OFF_ALM
DIGPRO:
;数字键处理
MOVFLASH_FIGURE,A
MOVA,FLASH
JZRETURN3
LCALLPRO_CHANGE
JMPSETTING1
RETURN3:
LJMPRETURN1
CAL:
MOVP1,#0FFH;日期模式
MOVA,DATE_TIME
CJNEA,#4,CLASET
JMPRETURN1
CLASET:
MOVDATE_TIME,#4H
JMPYES
TIM:
MOVP1,#0FFH;时间模式
MOVLP5,#0
MOVA,DATE_TIME
CJNEA,#3,TIMSET
JMPRETURN1
TIMSET:
MOVDATE_TIME,#3H
JMPYES
SETTING:
;设置
SETTING1:
;判断当前模式
MOVA,DATE_TIME
CJNEA,#4H,SETTIME
SETDATE:
MOVA,FLASH
CJNEA,#8,INCF
JMPYES
INCF:
INCFLASH
MOVB,FLASH
MOVA,#0FEH
LOOP4:
RRA
DJNZFLASH,LOOP4
MOVFLASH,B
MOVFLASH_BITE,A
JMPRETURN1
SETTIME:
MOVA,FLASH
CJNEA,#6,INCF2
JMPYES
INCF2:
INCFLASH
MOVB,FLASH
MOVA,#0BFH
LOOP5:
RRA
DJNZFLASH,LOOP5
MOVFLASH,B
MOVFLASH_BITE,A
JMPRETURN1
RETURN4:
JMPRETURN1
YES:
;确认键
MOVFLASH,#0H
MOVFLASH_BITE,#0FFH
JMPRETURN1
ALARM:
MOVDATE_TIME,#3
MOVA,LP5
CJNEA,#5,NORMAL
MOVLP5,#0
NORMAL:
INCLP5
MOVA,LP5
MOV44H,A
MOVA,#0FEH
RLP:
RRA
DJNZ44H,RLP
MOVP1,A
NEX1:
MOVA,LP5
DECA
MOVDPTR,#ALM_TBL
RLA
JMP@A+DPTR
ALM_TBL:
AJMPL0
AJMPL1
AJMPL2
AJMPL3
AJMPL4
L0:
MOVC,ON_OFF0
MOVLED_1,C
AJMPYES
L1:
MOVC,ON_OFF1
MOVLED_1,C
AJMPYES
L2:
MOVC,ON_OFF2
MOVLED_1,C
AJMPYES
L3:
MOVC,ON_OFF3
MOVLED_1,C
AJMPYES
L4:
MOVC,ON_OFF4
MOVLED_1,C
AJMPYES
ON_OFF_ALM:
MOVA,LP5
CJNEA,#0,NEX
JMPRETURN1
NEX:
DECA
MOVDPTR,#ON_OFF_TBL
RLA
JMP@A+DPT