单片机实现数字钟LED显示小时.docx
- 文档编号:8571968
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:33
- 大小:455.48KB
单片机实现数字钟LED显示小时.docx
《单片机实现数字钟LED显示小时.docx》由会员分享,可在线阅读,更多相关《单片机实现数字钟LED显示小时.docx(33页珍藏版)》请在冰豆网上搜索。
单片机实现数字钟LED显示小时
单片机课程设计
题目:
单片机实现数字钟(LED显示小时:
分:
秒)
学院电子信息工程学院
学科门类工学
专业通信工程
学号
姓名
指导教师程亮亮
2015年06月16日
摘要
单片机模块中最常见的是数字时钟,数字时钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
数字时钟是采用数字电路实现对时、分、秒数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字时钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字时钟及扩大其应用,有着非常现实的意义。
关键词:
单片机;数字时钟;钟表数字化
摘要I
目录II
1.引言1
1.1设计背景及意义1
1.2设计目的2
1.3主要工作及结构安排2
1.4本章小结3
2.方案论证与选择4
2.1系统功能框图4
2.2AT89C51简介4
2.3DS1302简介8
2.4本章小结11
3.硬件电路设计12
3.1系统总原理图12
3.2PCB板图13
3.3器件清单14
3.4本章小结14
4.系统程序设计15
4.1软件开发环境15
4.2创建工程15
4.3代码程序设计16
4.4本章小结24
5.软件仿真25
5.1Proteus仿真原理图25
5.2仿真结果25
5.3本章小结26
6.总结27
参考文献28
附录28
附录I主函数代码29
附录IIDS1302代码29
1.引言
1.1研究背景及意义
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
下面是单片机的主要发展趋势。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
单片机模块中最常见的是数字时钟,数字时钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
数字时钟是采用数字电路实现对时、分、秒数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字时钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字时钟及扩大其应用,有着非常现实的意义。
1.2设计目的
课程设计是本课程教学中极为重要的实践性教学环节,它不但起着提高本课程教学质量、水平和检验学生对课程内容掌握程度的作用,而且还将起到从理论过渡到实践的桥梁作用。
因此,必须认真组织,周密布置,积极实施,本次课程设计以达到下述教学目的。
1.学会掌握KeilC51汇编语言程序的设计和调试。
2.学会将所学的单片机原理的有关知识应用于实践,提高单片机应用于技术的实践操作技能,提高动手能力、分析并解决实际问题的能力。
3.综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机软硬知识的理解,获得初步的应用经验。
4.掌握KeilC51的调试技巧:
如何查看和修改寄存器的内容,如何观察和修改变量,如何观察存储器区域,并行口的使用,定时/计数器的使用,串行口的使用,外中断的使用。
5.学会使用Altiumdesigner绘制硬件电路原理图并使用Proteus软件进行仿真测试。
1.3论文主要工作及结构安排
本此设计主要研究内容为如何使用STM32F103ZE系列单片机作为核心控制单元,通过其高效的硬件SPI控制NRF24L01无线模块实现对无线信号的稳定接收,并通过STM32F103ZE芯片自带硬件USART将所接收到的数据传输到PC端实时显示出来[2]。
论文主要介绍了硬件电路的理论知识和PCB设计制作过程,讲解了芯片软件程序代码的编写流程,最后进行硬件与软件的联合调试。
论文一共分为六章,具体每章的内容概述如下:
第一章介绍了课题研究背景及意义,国内外现状以及论文主要工作和结构安排;
第二章介绍了硬件电路设计,介绍了STM32最小系统电路及其外围电路设计,NRF2401无线模块的介绍及引脚与STM32芯片连接;
第三章主要阐述了如何由设计绘制好的电路原理图生成完整的PCB图,并简介了PCB焊接的方法与注意事项;
第四章讲述了控制芯片STM32代码程序的设计流程:
STM32的开发环境、工程构建,代码编写等,并根据代码画出了主函数和中断函数的流程图;
第五章讲述软硬件调试方法与过程,首先对STM32系统的串口通信进行调试,接着是无线模块进行调试,最后对整个接收机系统的性能测试,测试成功达到预期效果;
第六章主要是对课题内容进行总结与展望。
1.4本章小结
本章首先介绍了本次课程设计的背景及其研究意义。
接着对课程设计的目的进行了阐述,然后对本课题的设计内容及原理做了简单的介绍。
最后,对论文的主要内容和工作安排及各章节所要叙述的内容进行综述。
本章节内容为接下来的工作及论文的编写确定了方向,奠定了良好的理论依据和基础。
2.方案论证与选择
设计方案的选择对此次设计至关重要,首先我们要对整个系统的组成有一定的了解,然后了解我们所使用的元器件以及芯片的性能,这样我们才能选择出来符合要求的设计方案,满足此次设计的需求。
2.1系统功能框图
本次设计的基本设计框图如下:
图2-1硬件设计框图
我们可以看出整个设计是围绕单片机控制模块为核心设计外围电路,单片机控制模块采用AT89S51芯片,并且采用DS1302时钟芯片。
2.2AT89C51简介
本设计课题选用的控制芯片是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机AT89C51,片内含4KBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及AT89C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元。
单片机AT89C51强大的功能可为许多嵌入式控制应用系统提供高性价比的解决方案。
本次设计采用的AT89C51芯片为DIP40封装,一共有32个I/0口,芯片的封装引脚分布如图2-2。
图2-2AT89C51引脚分布图
一、功能特性概括
AT89C51提供以下标准功能:
40个引脚、4KBytesFlash片内程序存储器、128Bytes的随机存取数据存储器(RAM)、32个外部双向输入/输出(I/O)口、5个中断优先级2层中断嵌套中断、2个数据指针、2个16位可编程定时/计数器、2个全双工串行通信口、看门狗(WDT)电路、片内振荡器及时钟电路[1]。
此外,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲模式下,CPU暂停工作,而RAM、定时/计数器、串行通信口、外中断系统可继续工作。
掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
二、管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,也即地址/数据总线复用口。
作为输出口用时,能驱动8个TTL逻辑门电路。
对端口写“1”时,被定义为高阻输入。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1口是一个带内部上拉电阻的8位双向I/O口,P1口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I
)。
在Flash编程和程序校验期间,P1接收低8位地址。
部分端口还有第二功能,如表3所示:
端口引脚
第二功能
P1.5
MOSI(用于ISP编程)
P1.6
MISO(用于ISP编程)
P1.7
SCK(用于ISP编程)
表3P1口部分引脚第二功能
P2口:
P2口是一个带有内部上拉电阻的8位双向I/O口,P2口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I
)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据寄存器(例如执行MOVX@Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
在Flash编程或校验时,P2亦接收高位地址和其它控制信号。
P3口:
P3口是一个带有内部上拉电阻的双向8位I/O口,P3口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写“1”时,它们被内部的上拉电阻拉高并可作为输入端口。
作输入口使用时,被外部信号拉低的P3口将用上拉电阻输出电流(I
)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表4所示:
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外中断0)
P3.3
(外中断1)
P3.4
T0(定时/计数器0)
P3.5
T1(定时/计数器1)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
表4P3口引脚第二功能
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上的高电平时间将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRTO位(地址8EH)可打开或关闭该功能。
DISRTO位缺省为RESET输出高电平打开状态。
ALE/
:
当访问外部存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部寄存器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
值得注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(
)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只要一条MOVX和MOVC指令才会激活ALE。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
:
程序存储允许(
)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次
有效,即输出两个脉冲。
当访问外部数据存储器时,没有两次有效的
信号。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需要注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端保持高电平(接VCC端),CPU则执行内部程序存储器中的指令。
Flash存储器编程期间,该引脚用于施加+12V编程电压(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入端。
XTAL2:
反向振荡放大器器的输出端。
2.3DS1302简介
DS1302[1]是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5V。
时钟可工作在24小时格式或12小时(AM/PM)格式。
DS1302与单片机的接口使用同步串行通信,仅用3条线与之相连接。
可采用一次传送一个字节或突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
一、DS1302引脚功能与内部结构
DS1302的引脚功能如表1所示,外形及内部结构如图1所示[2]:
引脚号
引脚名称
功能
1
VCC2
主电源
2、3
X1、X2
振荡源,外接32768Hz晶振
4
GND
地线
5
RST
复位/片选线
6
I/O
串行数据输入/输出端(双向)
7
SCLK
串行时钟输入端
8
VCC1
后备电源
表1DS1302引脚功能表
图1DS1302管脚图及内部结构图
二、DS1302的控制字
DS1302的控制字节如图2所示:
76543210
1
RAM
A4
A3
A2
A1
A0
RAM
图2DS1302控制字节的含义
控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
三、DS1302的复位引脚
通过把
输入驱动置高电平来启动所有的数据传送。
输入有两种功能:
首先,
接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,
提供了终止单字节或多字节数据的传送手段。
当
为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中置
为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,
必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
四、DS1302的数据输入输出
在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位至高位7,数据读写时序如图3所示:
图3数据读写时序
五、DS1302的寄存器
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
其日历、时间寄存器及其控制字见表2。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器的内容。
DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H--FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
寄存器名
命令字
取值范围
各位内容
写操作
读操作
7
6
5
4
3
2
1
0
秒寄存器
80H
81H
00--59
CH
10SEC
SEC
分寄存器
82H
83H
00--59
0
10MIN
MIN
时寄存器
84H
85H
01-12或00-23
12/24
0
10
HR
HR
表2DS1302的日历、时钟寄存器及其控制字
2.4本章小结
本章首先对整个设计的硬件组成进行了情况作了一个简单的介绍,通过绘制硬件结构设计框图的方法,让人们能够直观、明了的看出整个设计的思路。
并对本次设计所使用的控制器AT89C51以及时钟芯片DS1302进行了详细的介绍,包括芯片的性能、优点,主要性能参数。
3.硬件电路设计
本次课程设计使用Altiumdesigner软件进行原理图以及PCB板的设计与制作[2]。
3.1系统总原理图
系统总原理图如下:
3.2PCB板图
电路如下图:
我们这里采用8个数码管来显示时分秒,在单片机的P0引脚上外接上10k的上拉电阻。
利用锁存器控制段码与位码。
3.3、器件清单
元件序号
元件名
参数
数量
RP1
排阻
10k
1
U1、U2
锁存器
2
L1、L2
4位8段数码管
2
C1、C2
电容
30pf
2
Y1
晶振
12M
1
Y2
晶振
32768K
1
S1、S2、S3、S4
按键
4
3.4、本章小结
本章主要介绍了此次课程设计所设计的电路原理图以及PCB的制作结果,列出元件清单。
4.、程序设计
AT89C51芯片程序的设计对于整个设计来说十分重要,本章主要介绍了软件设计环境,设计流程以及设计的思路。
4.1软件开发环境
硬件部分设计完成后,我们就可以进行软件部分的设计了。
经过比较我们选择C语言来编写程序[3],并且发现keilc的开发界面更为直观,方便我们进行代码的编写。
软件编辑界面如图4-1所示
图4-1软件编辑界面
4.2创建工程
我们在使用KeilC开发环境时首先需要新建一个工程,打开软件后我们通过选择菜单Project下的“NewProject”下拉菜单来创建一个新的工程,如图4-2。
此时,系统会弹出一个对话框,要求用户为新建的工程起一个名字,我们可以根据自己实际需求进行命名。
另外为了方便我们日后查找,我们可以先在电脑中新建一个文件夹,将主要工程项目文件都保存在内[12]。
将工程新建好以后,我们需要选择我们编程使用的芯片型号如图4-3所示,我们选择ATMEL公司菜单下的AT89C51这款型号。
图4-2新建工程图图4-3选择芯片图
在工程新建好后,我们需要在工程项目下添加源代码进行编程。
我们使用菜单“File”|“New”或者单击工具栏上的“新建文件”按钮,就可已在项目工程窗口右侧打开一个文本编辑窗口,我们就可以在该窗口输入程序代码及头文件。
一般情况下我们在对STM32进行编程时,需要向工程里添加意法半导体公司提供的相关函数库,这样在我们进行编程时,就可以直接调用相对于的库函数,而不必了解其寄存处具体如何操作,既简单又方便,右击工程项目树中的相关文件夹,选择AddFiletoGroup命令。
4.3代码程序设计
因为此次使用单片机AT89S51对时钟芯片DS1302的控制需要通过程序驱动来实现,程序主要完成两个方面的任务:
①利用单片机实现对DS1302寄存器的地址定义和控制字的写入,②实现对DS1302的数据读取。
初始化DS1302要求
为低电平,SCLK为低电平。
被设置为高电平就启动了一个数据传送的过程。
SCLK的16个方波完成一次数据传送,前8个方波用于输入命令字节,后8个方波用于数据的输出(读DS1302)或数据的输入(写DS1302)。
在SCLK的上升沿,I/O线上的数据被送入DS1302;在SCLK的下降沿,DS1302输出数据在I/O线上。
写和读各需要一个程序,写DS1302程序流程图如图4-5所示,读DS1302程序流程图如图4-6所示。
图4-4系统程序流程
一、主程序代码:
voidmain(void)
{
unsignedcharnum;
Init_Timer0();
Ds1302_Init();
while
(1)//主循环
{
num=KeyScan();按键扫描函数
switch(num)
{
case1:
time_buf1[4]++;if(time_buf1[4]==24)time_buf1[4]=0;
Ds1302_Write_Time();break;//正常时间小时加1
case2:
time_buf1[4]--;if(time_buf1[4]==255)time_buf1[4]=23;
Ds1302_Write_Time();break;//正常时间小时减1
case3:
time_buf1[5]++;if(time_buf1[5]==60)time_buf1[5]=0;
Ds1302_Write_Time();break;//分加1
case4:
time_buf1[5]--;if(time_buf1[5]==255)time_buf1[5]=59;
Ds1302_Write_Time();break;//分减1
default:
break;
}
if(ReadTimeFlag==1)
{
ReadTimeFlag=0;
Ds1302_Read_Time();
//数据的转换,因我们采用数码管0~9的显示,将数据分开
TempData[0]=dofly_DuanMa[time_buf1[4]/10];//时
TempData[1]=dofly_DuanMa[time_buf1[4]%10];
TempData[2]=0x40;//加入"-"
TempData[3]=dofly_DuanMa[time_buf1[5]/10];//分
TempData[4]=dofly_DuanMa[time_buf1[5]%10];
TempData[5]=0x40;
TempData[6]=dofly_DuanMa[time_buf1[6]/10];//秒
TempData[7]=dofly_DuanMa[time_buf1[6]%10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实现 数字 LED 显示 小时