基于单片机的电脑时钟设计.docx
《基于单片机的电脑时钟设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电脑时钟设计.docx(29页珍藏版)》请在冰点文库上搜索。
![基于单片机的电脑时钟设计.docx](https://file1.bingdoc.com/fileroot1/2023-7/4/e41e078a-a4d9-40db-9f54-9fe4182364b7/e41e078a-a4d9-40db-9f54-9fe4182364b71.gif)
基于单片机的电脑时钟设计
电子工程系
毕业设计任务书
装订线
专业:
电子信息工程技术 年级:
姓名
学号
指导教师(签名)
毕业设计题目
基于单片机的电脑时钟设计
任务下达日期
2007年1月10日
设计提交期限
2008年6月10日
设计主要内容
我们设计的是基于单片机的电脑时钟,采用的是键盘输入和LED显示方案。
本硬件电路的核心MCS-51单片机,我们选用89C51,没有外部扩展RAM。
系统采用6位共阴极数码管从左到右依次显示时、分、秒,采用24小时计时。
采用3×4键盘,采用8155作为键盘/显示接口电路。
系统工作流程有时间显示,时间调整,闹钟设置/启闹/停闹。
软件设计是采用单片机软件设计,它的过程是描述实现硬件原理的过程。
软件模块设计有主程序模块,计时模块,时间设置与闹钟设置模块,显示模块,键盘扫描,定时
主要技术参数指标
定时器初值为3CB0H,即TH0=3CH,TL0=0B0H,系统使用的是12MHz,定时器的最大定时时间为65.536ms。
时钟的小时,分钟,秒单元各占一个字节键盘占6个字节。
成果提交形式
1.论文
2.实物
设计进度安排
第一周拟定基于单片机的电脑时钟的设计的组成框图
第二到第五周设计各单元电路,并组合成总电路
第六至十周制作电路板并进行逻辑功能测试
第十一至十二周撰写毕业设计论文
教研室
意见
签名:
200年月日
系主任
意见
签名:
200年月日
电子工程系
毕业设计开题报告
姓名
学号
指导教师
毕业设计题目
基于单片机的电脑时钟设计
同组者
设计目的意义
通过毕业设计对自己在大学三年里所学的电子专业知识进行系统掌握,提高自己的电子动手能力,以加强对自己的就业岗位尽快熟悉.
方案论证
1.计时方案
采用实时时钟芯片,如DS1287,DS12887,DS1302.也可以单片机内部的可编程定时器,利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分,秒的计时.该方案节省硬件成本,但程序设计较为复杂.
2.LED显示方案.
有动态显示和静态显示,静态显示优点:
显示亮度有保证,单片机CPU的开销小,节约CPU的工作时间.LED动态显示硬件连接简单,但动态扫描的显示方式需要占用CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用.本系统需要采用6位LED数码管来分别显示小时,分,秒,因数码管较多,故本系统选择动态显示方案.
时间安排
第一周拟定液晶显示温控报警电路的组成框图
第二到第五周设计各单元电路,并组合成总电路
第六至十周制作电路板并进行逻辑功能测试
第十一至十二周撰写毕业设计论文
指导教师
意见
签字:
200年月日
审核小组意见
组长签字:
200年月日
第一章引言................................................7
第二章方案设计与论证.......................................7
2.1测量部分.............................................8
2.1.1方案一...........................................8
2.1.2方案二...........................................8
2.2主控制部分...........................................8
2.2.1方案一...........................................8
2.2.2方案二...........................................8
2.3显示部分.............................................8
2.3.1方案一...........................................8
2.3.2方案二...........................................9
2.4总结.................................................9
第三章各电路的设计.........................................9
3.1单片机AT89S51电路...................................9
3.2键盘电路............................................13
3.3加热器控制电路......................................14
3.4温度测试电路........................................14
3.51602LCD显示电路.....................................18
第四章程序设计...........................................21
4.1主程序..............................................21
4.2读出温度子程序......................................21
4.3温度转换命令子程序..................................22
4.4计算温度子程序......................................22
4.5显示数据刷新子程序..................................23
第五章测试方法和测试结果..................................23
5.1测试环境............................................23
5.2测试方法............................................23
5.3测试结果...........................................23
5.4测试结果分析.......................................23
第六章总结................................................24
【参考文献】..........................................25
附:
1使用说明.......................................25
2原理、PCB图....................................26
3源程序.........................................27
前言
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。
由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。
这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由直流电源供电,通过数码管能够准确显
数字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及至我们每个人的日常生活中都发挥着重要的作用。
本系统是基于AT89C51单片机设计的一个具有六位LED显示的数字时实时钟,采用独立式按键进行时间调整,同时引入一个内部充电电源在停止外部供电时,仍具有内部计时的功能。
该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点
电路组成及工作原理
本文数字时钟设计原理主要利用AT89C51单片机,由单片机的P0口控制数码管的位显示,P2口控制数码管的段显示,P1口与按键相接用于时间的校正。
在设计中引入两个电源电路,一个是外部电源系统产生+5V电压,用于给CPU及显示电路提供工作电压,这是数字时钟正常工作时的总电压。
另一个是备用电源,当外部电源关断时由它提供工作电压使CPU继续工作,利用单片机的空闲方式降低功耗,数码管不显示但能使计时保持正常,不会造成掉电时计时清零的现象。
针对内外两个电源情况又加入了MC34064电压检测电路,用于时实判断是哪各电源在工作。
整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
显示电路将“时”、“分”、“秒”计数器的输出,通过六个七段LED显示器显示出来。
校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。
基于单片机的电脑时钟设计
除了专用的时钟,计时显示牌外,许多应用系统常常需要带有实时时钟显示,如工业过程控制系统,各种智能化仪表以及家用电器等。
实现实时时钟显示的方式多种多样,应根据系统要求及成本综合选用。
(一)系统设计要求
设计一个具有如下功能的基于单片机的电脑时钟:
(1)自动计时,并用6个LED自动显示小时,分钟,秒;
(2)具备时间调整功能;
(3)具备定时启闹功能;
(4)精度要求一天的时间误差不超过1秒钟。
(二)总体方案设计
1.计时方案
方案1:
采用实时时钟芯片。
现在市场上有很多实时时钟集成电路,如DS1287,DS12887,DS1302等。
这些实时时钟芯片具备年,月,日,时,分,秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需要程序干预。
因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。
方案2:
使用单片机内部的可编程定时器。
利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时,分,秒的计时。
该方案节省硬件成本,但程序设计较为复杂。
2.LED显示方案
对于实时时钟而言,显示显然是另一个重要的环节。
通常LED显示有两种方式:
动态显示和静态显示
静态显示的优点是程序简单,显示亮度有保证,单片机CPU的开销小,节约CPU的工作时间。
但占用I/O口线多,每一个LED都要占用一个I/O口,硬件开销大,电路复杂。
需要几个LED就必须占用几个并行I/O口,比较适用于LED数量较少的场合。
当然当LED数量较多的时候,可以使用单片机的串行口通过移位寄存器的方式加以解决,但程序编写比较麻烦。
LED动态显示硬件连接简单,但动态扫描的显示方式需要占用CPU较多的时间,在单片机没有太多实时测控的情况下可以采用
本系统需要采用6位LED数码管来分别显示小时,分,秒,因数码管个数较多,故本系统选择动态显示方式。
3.键盘输入方案
单片机的键盘结构可以采用独立式按键和矩阵式键盘两种。
独立式按键指直接用I/O口线构成单个按键电路。
每个独立式按键单独占用一位I/O口线。
电路配置灵活,软件结构简单。
但在按键数量较多时,I/O线浪费较大。
如果应用系统中的键较少,就可采用简单的键盘接口电路。
在按键比较多的时候,采用矩阵式键盘比独立式键盘要节省很多I/O线。
一个端口(如P1口)就可以构成4×4=16个按键,比这直接将端口线用于键盘多出了一倍。
本系统要设置12键,其中10个键用于输入0~9十个数字,还有两个键用于调整时间和设置闹钟时间。
因此本系统采用3×4的矩阵式键盘。
(三)硬件设计
1.电路原理图
图13-1是本电脑时钟的硬件电路。
本硬件电路的核心是MCS-51单片机,我们选用89C51,因为其内部带有4KB的FlashROM,我们的程序不是很长,4KB够用,无须扩展外部程存储器,并且本系统也没有大量的数据需要运算和存储,现有的128B片内RAM已能满足要求,也不必扩展RAM。
系统采用6位共阴极数码管从左到右依次显示时,分,秒,采用24小时计时。
系统采用3×4键盘共12个键,其中10个键用于输入0~9十个数字,还有两个键用于调整时间和设置闹钟时间。
因此本系统采用3×4的矩阵式键盘。
系统采用8155作为键盘/显示接口电路。
其中利用8155的A口中的6位(PA0~PA5)作为6位LED显示的位码输出口,B口则作为字型码输出口,C口的低三位为键盘行线输入口,A口中的低4位(PA0~PA3)同时用作键盘的列扫描口。
系统采用在P1.0上接一个发光二极管,通过发光二极管的亮,灭来模拟闹钟功能。
由此可得8155内部各端的地址分配:
控制寄存器:
8000H,定义为PORT;
A口:
8001H,定义为PORTA;
B口:
8002H,定义为PORTB;
C口:
8003H,定义为PORTC。
2.系统工作流程
按设计要求,我们规划了电脑时钟的工作流程如下:
时间显示:
上电后或手动复位后,系统自动从00:
00:
00开始计时,并利用LED动态显示当前时间。
时间调整:
在正常计时状态下,可以设定当前时间。
按下C/R键,系统停止计时,进入时间设定状态,系统保持原有显示,等待键入当前时间。
按下0到9数字键可以顺序设置时,分,秒,并在相应LED管上显示设置值,直至6位设置完毕。
系统将自动由设定后的时间开始计时显示。
闹钟设置/启闹/停闹:
在正常计时状态下,也可以设定当前时间。
按下ALM键,系统继续计时,显示00:
00:
00,进入闹钟设置状态,等待键入启闹时间。
按下0到9数字键可以顺序进行相应的时间设置,并在相应LED管上显示设置值,直至6位设置完毕。
这将启动定时启闹功能,并恢复时间显示。
定时时间到,发光二极管点亮,直至重新按下ALM键熄灭,并取消闹钟设置。
(四)软件设计
单片机软件设计过程就是描述实现硬件原理的过程。
较复杂的程序应该注意对单片机片内RAM单元的合理分配。
注意编程前先画出程序流程图再编程。
1.系统资源分配
为了方便编写程序,增加程序的可读性,我们将软件设计中用到的片内RAM各单元及标志以符号表示,并在程序中定义。
软件片内RAM及标志位分配如表:
表:
软件片内RAM标志位分配表
地址
功能
30H~35H
显示缓冲区,小时,分,秒
DISP0~DISP5
00H
3CH~3FH
计时缓冲区,时,分,秒,100ms
HOUR,MIN,SEC,MSEC
00H
40H~42H
闹钟值寄存区,时,分,秒
AHOUR,AMIN,ASEC
FFH
50H~7FH
堆栈区
0
PSW.5
计时显示允许位(1:
禁止,0:
允许)
F0
0
PSW.1
闹钟标志位(1:
正在闹响,0:
未
F1
3.软件模块设计
根据上述电脑时钟的工作流程,软件设计可分为以下几个功能模块:
(1)主程序模块.主程序主要用于系统初始化:
设置计时缓冲区,闹钟值寄存区的位置及初值,设置8155的工作方式,定时器的工作方式和计数初值等参数.主程序流程图如下图所示:
(2)计时模块.即定时器0中断服务子程序,完成刷新计时缓冲的功能。
计时模块流程图如下:
系统使用12MHz的晶振,假设定时器0工作在方式1,则定时器的最大定时时间为65.536ms,就是最小的”秒”也比这个时间长的多.因此本系统采用定时器与软件循环相结合的定时方法.设定时器0工作在方式1,每隔50ms溢出中断一次,则循环中断20次延时时间为1s,上述过程重复60次为1分,分计时60次为1小时,小时计时24次则时间重新回到00:
00:
00。
因定时器0工作在方式1,则50ms定时对应的定时器初值为:
216-50000=15536=3CB0H,即TH0=3CH,TL0=0B0H。
这里有两个问题需要重视:
第一,定时器每隔50ms就会计数溢出,并产生中断请求,但CPU并不一定立即响应中断,而可能需要延迟一个中断响应时间之后才能响应中断,对于只有一个中断源来说,中断响应时间大约为3到8个机器周期。
显然,这将在定时时间中加入额外的延时时间,导致计时误差。
为了保证计时精度,必须采取措施进行补偿。
一般采用增大重装的定时器初值的方法来减少定时器0定时时间。
具体增加多少需要经过调试来确定。
经过测试,定时器0重新装入的计数初值设为3CB7H到3CBFH,可以满足精度要求。
第二,MCS-51单片机只有二进制加法指令,而时间是按十进制递增,因此用加法指令后必须进行二-十进制转换。
(3)时间设置与闹钟设置模块。
该模块由键盘输入相应的数据来设置当时间与定时启闹时间。
程序通过调用一个键盘设置子程序通过键盘扫描将键入的6位时间值送入显示缓冲区。
设置时间后,时钟要从这个时间开始计时,而小时,分钟,秒单元各占一个字节(3CH,3DH,3EH,),键盘(30H到35)占6个字节。
因此程序中要调用一个合字子程序将显示缓冲区中的6位BCD码合并为3位压缩BCD码,并送入计时缓冲区或闹钟值寄存区,作为当前计时起始时间或闹钟定时时间。
该程序同时要检测输入时间值的合法性,若键盘输入的小时值大于23,分,秒值59,则不合法,将取消本次设置,清零重新开始计时。
设置与闹钟时间设置流程如下:
是
键盘设置子程序的流程图如下:
显示模块.该模块完成小时,分钟,秒6位LED的动态显示.因为显示为6位分,秒的十位,个位分别占有1字节),而计时是3个字节单元,为此,必须将3字节缓冲区中的时,分,秒压缩BCD码拆分为6字节BCD码,并送入显示缓冲区中。
按下调整时间或闹钟设置键后,在6位LED应该显示键入的不显示当前时间。
为此,我们设置了一个计时显示允许标志位F0,在时间/闹钟设置F0=1,不调用刷新显示缓冲区的子程序。
显示程序流程图如下:
(5)键盘扫描。
该模块用来判断是否有键按下,无键按下则循环等待;有键按下则求取键号送累加器返回。
程序中的去抖延时都用显示程序来代替,从而保证随时刷新显示。
键盘扫描程序流程图如下:
(6)定时比较模块。
该模块用来将当前时间(计时缓冲区的值)与预设的启闹时间(闹钟设置寄存区中的值)比较,二者完全相同时,点亮发光二极管,并置位闹钟标志位。
重新按下ALM键停闹,熄灭发光二极管。
定时比较程序流程图如下图:
2.各模块的源程序
ORG0000H
LJMPMAIN
ORG000BH
LJMPCLOCK
ORG0030H
PORTEQU8000H;
PORTAEQU8001H
PORTBEQU8002H
PORTCEQU8003H
DISP0EQU30H;
DISP1EQU31H
DISP2EQU32H
DISP3EQU33H
DISP4EQU34H
DISP5EQU35H
HOUREQU3CH;
MINEQU3DH
SECEQU3EH
MSECEQU3FH
AHOUREQU40H;
AMINEQU41H
ASECEQU42H
F1BITPSW.1
MAIN:
MOVSP,#50H
MOVDPTR,#PORT
MOVA,#03H
MOVX@DPTR,A
CLRF1
CLRF0
MOVAHOUR,#0FFH
MOVAMIN,#0FFH
MOVASEC,#0FFH
MOVR7,#10H
MOVR0,#DISP0
CLRA
LOOP:
MOV@R0,A
INCR0
DJNZR7,LOOP
MOVTMOD,#01H
MOVTL0,#0B7H
MOVTH0,#3CH
SETBTR0
SETBEA
SETBET0
BEGIN:
LCALLALARM
LCALLKEYSCAN
CJNEA,#0AH,NEXT1
CLRTR0
MOVR1,#AHOUR
LJMPABC
NEXT1:
CJNEA,#0BH,BEGIN
JBF1,NEXT2
MOVR1,#AHOUR
ABC:
SETBF0
LCALLMODIEY
SETBTR0
CLRF0
LJMPBEGIN
NEXT2:
SETBP1.0
CLRF1
LJMPBEGIN
时间设置/闹钟定时模块
MODIFY:
ACALLKEYIN
LCALLCOMB
RET
KEYIN:
PUSHPSW
PUSHACC
SETBRS1
MOVR0,#DISP0
MOVR7,#06H
L1:
CLRRS1
LCALLKEYSCAN
SETBRS1
CJNEA;#0AH,L2
L2:
JNCL1
MOV@R0,A
INCR0
DJNZR7,L1
POPACC
POPPSW
CLRRS1
RET
键盘扫描子程序
KEYSCAN:
ACALLTEST
JNZREMOV
LCALLALARM
LJMPKEYSCAN
LJMPKEYSCAN
REMOV:
ACALLDISPLAY
LCALLALARM
LCALLTEST
JNZLIST
LCALLDISPLAY
LCALLALARM
LJMPKEYSCAN
LIST:
MOVR2,#0FEH
MOVR3,#00H
LINE0:
MOVDPTP,#PORTA
MOVA,R2
MOVX@DPTR,A
MOVDPTR,#PORTC
MOVXA,@DPTR
JBACC.0,LINE1
MOVA,#00H
LJMPTRYK
LINE1:
JBACC.1,LINE2
MOVA,#04H
LJMPTRYK
LINE:
JBACC.2,NEXT
MOVA,#08H
LJMPTRYK
NEXT:
INCR3
MOVA,R2
JNBACC.3,EXIT
RLA
MOVR2,A
AJMPLINE0
EXIT:
AJMPKEYSCAN
TRYK:
ADDA,R3
PUSHACC
LETK:
LCALLTEST
JNZLETK
POPACC
RET
TEST:
MOVDPTR,#PORTA
MOVA,#00H
MOVX@DPTR,A
MOVDPTR,#PORTC
MOVXA,@DPTR
CPLA
ANLA,#07H
RE