单片机数字时钟的课程设计

更新时间:2024-05-10 08:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计

学 院 电气与信息工程学院 课题名称 基于单片机的数字时钟设计 专业班级 电气07-5班 指导老师 李红月老师 设计组号 六 成员姓名 童立领 易晓沐

朱沧浩 吴伟利 钟仪权 王 哲

2010年7月10日

单片机的数字时钟设计

摘要

单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。

本设计主要设计了一个基于AT89C51单片机的电子时钟。并在数码管上显示相应的时间。应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。

关键字:单片机,电子时钟,键盘控制

1

目录

设计概述 ····························· 3 设计要求 ····························· 5 系统设计 ····························· 5

1. 框图设计 ·························· 6 2. 知识点 ··························· 6

1)单片机型号的选择 ···················· 6 2)数码管显示工作原理 ··················· 6 3) 键盘电路设计······················ 6 4)晶振振荡器电路 ····················· 7 5)单片机的复位电路····················· 7

硬件设计 ····························· 8

1. 电路原理图 ························· 8 2. 元件清单 ·························· 8 软件设计 ····························· 9

1. 程序流程图 ························· 9 2. 程序清单 ·························· 11 结论 ······························· 18 参考文献 ····························· 18

2

单片机数字时钟的课程设计

设计概述

通过课程设计,使我们巩固和加深对单片机基本知识的理解,学会查寻资料、方案设计、方案比较,以及单元电路设计等环节,进一步提高我们综合运用所学知识的能力,提高分析解决实际问题的能力。锻炼分析、解决电子电路问题的实际本领,通过此综合训练,为以后毕业设计打下一定的基础。

89C51单片机简介 VCC:电源。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程 序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作 输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻 拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存 储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器 的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

3

U419XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51

图2.1 89C51单片机

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL

门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器 时,

4

将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

EA/VPP:当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时, /EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

设计要求

1 基本要求:

1)芯片上电后,有一个初值显示;

2)上电后就进行秒的计数,秒进分,分进时,可用24小时制; 2 发挥要求:

按键能实现复位,设定时间的作用。

系统设计

数字钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。

它的计时周期为24小时,显示满刻度为23时59分59秒,该数字钟电路主要由译码显示器、“时”,“分”,“秒”和振荡器组成。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。译码显示电路将“时”、“分”、“秒”、计数器的输出状态送到六段显示译码器译码,通过六位LED六段显示器显示出来。

该数字电子钟主体电路由以下几部分组成:通过分频器产生标准秒信号;60进制分秒计数器以及24小时计数器;分、时的译码显示部分。

5

1. 框图设计

2. 知识点

学会使用并了解89C51的管脚,会利用编程设计数字电子时钟。在设计的过

程中要了解上电复位的概念上电后通过LED数码管来显示时分秒,并通过按键来进行设计时间的作用。 1)单片机型号的选择

89C51是最理想的电子时钟开发芯片。89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。 2)数码管显示工作原理

数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极接在一起。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP 是小数点位段。而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。数码管显示方法可分为静态显示和动态显示两种。静态显示就是数码管的8段输入及其公共端电平一直有效。动态显示的原理是,各个数码管的相同段连接在一起,共同占用8 位段引管线;每位数码管的阳极连在一起组成公共端。利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来 3) 键盘电路设计

该设计用到了个键盘,实现的功能比较完善,减少了硬件资源的损耗,该键

6

盘可以实现小时和分钟的调节以及复位的控制。直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。达到时间调节的目的。 4)晶振振荡器电路

晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。

5)单片机的复位电路

单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。上电后,保持RST一段高电平时间。

7

硬件设计

1. 电路原理图

2. 元件清单

元器件 单片机 驱动数码管 六段数码显示管 电阻 电容 晶振 开关 按键 USB口 其它 型号/大小 AT89S51 74LS244 74LS164 共阳极 1K、10K、 10uF、30pF、100uF、220uF 12M 芯片底槽、导线

8

软件设计

1. 程序流程图

主程序流程图

9

中断程序流程图

10

2. 程序清单

ORG 0000H ;程序执行开始地址 LJMP START ;跳到标号START执行 ORG 0003H ;外中断0中断程序入口 RETI ;外中断0中断返回 ORG 000BH ;定时器T0中断程序入口 LJMP INTT0 ;跳至INTTO执行 ORG 0013H ;外中断1中断程序入口 RETI ;外中断1中断返回 ORG 001BH ;定时器T1中断程序入口 LJMP INTT1 ;跳至INTT1执行 ORG 0023H ;串行中断程序入口地址 RETI ;串行中断程序返回 主程序开始;

START: MOV R0,#70H ;清70H-7AH共11个内存单元 MOV R7, #0BH ;

CLEARDISP: MOV @R0, #00H ; INC R0 ; DJNZ R7, CLEARDISP ;

MOV 20H,#00H ;清20H(标志用) MOV 7AH,#0AH ;放入\熄灭符\数据 MOV TMOD,#11H ;设T0、T1为16位定时器 MOV TL0,#0B0H ;50MS定时初值(T0计时用) MOV TH0,#3CH ;50MS定时初值

MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用) MOV TH1,#3CH ;50MS定时初值 SETB EA ;总中断开放 SETB ET0 ;允许T0中断 SETB TR0 ;开启T0定时器

MOV R4,#14H ;1秒定时用初值(50MS×20) START1: LCALL DISPLAY ;调用显示子程序

JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 SJMP START1 ;P3.7口为1时跳回START1 SETMM1: LJMP SETMM ;转到时间调整程序SETMM

11

;; 1秒计时程序 ;; INTT0: PUSH ACC ;累加器入栈保护 PUSH PSW ;状态字入栈保护 CLR ET0 ;关T0中断允许 CLR TR0 ;关闭定时器T0 MOV A,#0B7H ;中断响应时间同步修正 ADD A,TL0 ;低8位初值修正

MOV TL0,A ;MOV A,#3CH ;ADDC A, TH0 ;

MOV TH0,A ;SETB TR0 ;DJNZ R4, OUTT0 ;20ADDSS: MOV R4,#14H ;20MOV R0,#71H ;ACALL ADD1 ;MOV A,R3 ;CLR C ;CJNE A, #60H, ADDMM ;

ADDMM: JC OUTT0 ;ACALL CLR0 ;MOV R0,#77H ;ACALL ADD1 ;MOV A,R3 ;CLR C ;CJNE A,#60H,ADDHH ;

ADDHH: JC OUTT0 ;ACALL CLR0 ;MOV R0,#79H ;ACALL ADD1 ;MOV A,R3 ;CLR C ;CJNE A, #24H, HOUR ;

HOUR: JC OUTT0 ;重装初值(低8位修正值) 高8位初值修正 重装初值(高8位修正值) 开启定时器T0

次中断未到中断退出 次中断到(1秒)重赋初值 指向秒计时单元(71H-72H) 调用加1程序(加1秒操作)

秒数据放入A(R3为2位十进制数组合)清进位标志 小于60秒时中断退出

大于或等于60秒时对秒计时单元清0

指向分计时单元(76H-77H) 分计时单元加1分钟 分数据放入A 清进位标志

小于60分时中断退出

大于或等于60分时分计时单元清0

指向小时计时单元(78H-79H) 小时计时单元加1小时

时数据放入A 清进位标志 小于24小时中断退出

12

ACALL CLR0 ;大于或等于24小时小时计时单元清0 OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移 MOV 73H,77H ;入对应显示单元 MOV 74H, 78H ; MOV 75H, 79H ;

POP PSW ;恢复状态字(出栈) POP ACC ;恢复累加器

SETB ET0 ;开放T0中断 RETI ;中断返回 ;; 闪动调时 程 序 ;; ;T1中断服务程序,用作时间调整时调整单元闪烁指示 INTT1: PUSH ACC ;中断现场保护 PUSH PSW ; MOV TH1, #3CH ;

MOV R2,#06H ;重装0.3秒定时用初值

MOV TL1, #0B0H ;装定时器T1定时初值

DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)

CPL 02H ;0.3秒定时到对闪烁标志取反 MOV 72H,76H ;02H位为0时正常显示 MOV 73H, 77H ; MOV 74H, 78H ; MOV 75H, 79H ;

INTT1OUT: POP PSW ;恢复现场 POP ACC ;

RETI ;中断退出

FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制 MOV 72H,7AH ;01H位为0时,\熄灭符\数据放入分 MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据 MOV 74H, 78H ; MOV 75H, 79H ;

AJMP INTT1OUT ;转中断退出

FLASH2: MOV 72H,76H ;01H位为1时,\熄灭符\数据放入小时

JB 02H,FLASH1 ;02H位为1时显示单元\熄灭\

MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示

13

MOV 74H,7AH ; MOV 75H, 7AH ;

AJMP INTT1OUT ;转中断退出 ;; 加1子 程 序 ;; ADD1: MOV A,@R0 ;取当前计时单元数据到A DEC R0 ;指向前一地址

SWAP A ;A中数据高四位与低四位交换 ADD A,#01H ;A加1操作 DA A ;十进制调整 MOV R3,A ;移入R3寄存器 ANL A,#0FH ;高四位变0 MOV @R0,A ;放回前一地址单元 MOV A,R3 ;取回R3中暂存数据 INC R0 ;指向当前地址单元

SWAP A ;A中数据高四位与低四位交换 ANL A,#0FH ;高四位变0

MOV @R0,A ;数据放入当削地址单元中 RET ;子程序返回 ;; 清零程序 ;; ;对计时单元复零用

CLR0: CLR A ;清累加器 MOV @R0,A ;清当前地址单元 DEC R0 ;指向前一地址 MOV @R0,A ;前一地址单元清0 RET ;子程序返回

;; 时钟调整程序 ;; ;当调时按键按下时进入此程序

SETMM: CLR ET0 ;关定时器T0中断 CLR TR0 ;关闭定时器T0 LCALL DL1S ;调用1秒延时程序

ORL A,@R0 ;前一地址中数据放入A中低四位

JB P3.7,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电)

MOV R2,#06H ;进入调时状态,赋闪烁定时初值

14

SETB ET1 ;允许T1中断 SETB TR1 ;开启定时器T1

SET2: JNB P3.7,SET1 ;P3.7口为0(键未释放),等待 SETB 00H ;键释放,分调整闪烁标志置1 SET4: JB P3.7,SET3 ;等待键按下

LCALL DL05S ;有键按下,延时0.5秒

JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态 MOV R0,#77H ;按下时间小于0.5秒加1分钟操作 LCALL ADD1 ;调用加1子程序 MOV A,R3 ;取调整单元数据 CLR C ;清进位标志

CJNE A,#60H,HHH ;调整单元数据与60比较

HHH: JC SET4 ;调整单元数据小于60转SET4循环 LCALL CLR0 ;调整单元数据大于或等于60时清0 CLR C ;清进位标志 AJMP SET4 ;跳转到SET4循环

CLOSEDIS:SETB ET0 ;省电(LED不显示)状态。开T0中断 SETB TR0 ;开启T0定时器(开时钟) CLOSE: JB P3.7,CLOSE ;无按键按下,等待。 LCALL DISPLAY ;有键按下,调显示子程序延时削抖 JB P3.7,CLOSE ;是干扰返回CLOSE等待 WAITH: JNB P3.7,WAITH ;等待键释放 LJMP START1 ;返回主程序(LED数据显示亮) SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态) SETHH1: JNB P3.7,SET5 ;等待键释放 SETB 01H ;小时调整标志置1 SET6: JB P3.7,SET7 ;等待按键按下 LCALL DL05S ;有键按下延时0.5秒

JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整 MOV R0,#79H ;按下时间小于0.5秒加1小时操作 LCALL ADD1 ;调加1子程序 MOV A, R3 ; CLR C ;

CJNE A,#24H,HOUU ;计时单元数据与24比较

15

HOUU: JC SET6 ;小于24转SET6循环 LCALL CLR0 ;大于或等于24时清0操作 AJMP SET6 ;跳转到SET6循环

SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键释放 LCALL DISPLAY ;延时削抖

JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待 CLR 01H ;清调小时标志 CLR 00H ;清调分标志 CLR 02H ;清闪烁标志 CLR TR1 ;关闭定时器T1 CLR ET1 ;关定时器T1中断 SETB TR0 ;开启定时器T0

SETB ET0 ;开定时器T0中断(计时开始) LJMP START1 ;跳回主程序

SET1: LCALL DISPLAY ;键释放等待时调用显示程序(调分) AJMP SET2 ;防止键按下时无时钟显示 SET3: LCALL DISPLAY ;等待调分按键时时钟显示用 AJMP SET4

SET5: LCALL DISPLAY ;键释放等待时调用显示程序(调小时) AJMP SETHH1 ;防止键按下时无时钟显示 SET7: LCALL DISPLAY ;等待调小时按键时时钟显示用 AJMP SET6

SETOUT1: LCALL DISPLAY ;退出时钟调整时键释放等待 AJMP SETOUT ;防止键按下时无时钟显示 ;; 显示程序 ;; DISPLAY: MOV R1,#70H ;指向显示数据首址 MOV R5,#0FEH ;扫描控制字初值 PLAY: MOV A,R5 ;扫描字放入A MOV P3,A ;从P3口输出 MOV A,@R1 ;取显示数据到A MOV DPTR,#TAB ;取段码表地址 MOVC A,@A+DPTR ;查显示数据对应段码 MOV P1,A ;段码放入P1口 LCALL DL1MS ;显示1MS

16

INC R1 ;指向下一地址 MOV A,R5 ;扫描控制字放入A JNB ACC.5,ENDOUT ;ACC.5=0时一次显示结束 RL A ;A中数据循环左移 MOV R5,A ;放回R5内 AJMP PLAY ;跳回PLAY循环

ENDOUT: SETB P3.5 ;一次显示结束,P3口复位 MOV P1,#0FFH ;P1口复位 RET ;子程序返回 TAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H DB 92H, 82H, 0F8H, 80H, 90H, 0FFH ;共阳段码表

;; 延时程序 ;; ;1MS延时程序,LED显示程序用 DL1MS: MOV R6, #14H DL1: MOV R7, #19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET

;20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象 DS20MS: ACALL DISPLAY ACALL DISPLAY ACALL DISPLAY RET

20MS延时程序,用作按键时间的长短判断 DL1S: LCALL DL05S LCALL DL05S RET

DL05S: MOV R3,#20H ;8毫秒*32=0.196秒 DL05S1: LCALL DISPLAY DJNZ R3, DL05S1 RET

END ;程序结束

17

结论

在李老师的教导下,通过一周的学习基本懂得了数字时钟的原理和设计,通

过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分

本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的数字时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。

最后,感谢李老师对我的细心的指导,正是由于李老师的细心的辅导,使得我的课程设计能够顺利的完成。谢谢!

参考文献

黄友锐 单片机原理及应用 合肥工业大学出版社

朱定华 单片机原理及接口技术实验 北方交通大学出版社2002.11. 李光才 单片机课程设计 实例指导 北京航空航天大学出版社 2004.

18

本文来源:https://www.bwwdw.com/article/i5rg.html

Top