51单片机电子时钟课程设计报告

时间:2024.4.20

第一部分 设计任务和要求

1.1 单片机课程设计内容

利用STC89C51单片机和LCD1602电子显示屏实现电子时钟,可由按键进行调时和12/24小时切换。

1.2 单片机课程设计要求

1.能实现年、月、日、星期、时、分、秒的显示;

2.能实现调时功能;

3.能实现12/24小时制切换;

4.能实现8:00—22:00整点报时功能。

1.3系统运行流程

程序首先进行初始化,在主程序的循环程序中首先调用数据处理程序,然后调用显示程序,在判断是否有按键按下。若有按键按下则转到相应的功能程序执行,没有按键按下则调用时间程序。若没到则循环执行。计时中断服务程序完成秒的计时及向分钟、小时的进位和星期、年、月、日的进位。调时闪烁中断服务程序用于被调单元的闪烁显示。调时程序用于调整分钟、小时、星期、日、月、年,主要由主函数组成通过对相关子程序的调用,如图所示。实现了对时间的设置和修改、LCD显示数值等主要功能。相关的调整是靠对功能键的判断来实现的。

第二部分 设计方案

2.1 总体设计方案说明

1.程序设计及调试

根据单片机课程设计内容和要求,完成Protues仿真电路的设计和用Keil软件编写程序,并进行仿真模拟调试。

2.硬件焊接及调试

根据仿真电路图完成电路板的焊接,并进行软、硬件的调试,只到达到预期目的。

3.后期处理

对设计过程进行总结,完成设计报告。

2.2 单片机系统方框图

2.2 单片机系统流程图

圆角矩形: 开始

主流程图 键盘扫描流程图

时钟流程图

第三部分 主要器件及简介

3.1 主要器件

1. STC89C51单片机;

2.LCD1602液晶显示屏;

3.2 主要器件简介

1.STC89C51单片机简介

STC89C51是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8K Bytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。

2.LCD1602液晶显示屏简介

LCD1602可以显示2行16个字符,有8位数据总线D0—D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。

LCD1602引脚说明如下表所示:

LCD液晶显示器各引脚功能及结构

VDD:电源正极,4.5V—5.5V,通常使用5V电压;

VL:LCD对比度调节端,电压调节范围为0—5V。接正极时对比度最弱,接地电源时对比度最高,但对比度过高会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地;

RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;

R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据;

EN:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。

D0—D7:8为数据总线,三态双向。如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4—D7接口传送数据。

A:LED背光正极。需要背光时, A串接一个限流电阻接VDD, K接地。

K:LED背光地端。

第四部分 系统硬件设计

4.1 最小系统

复位时单片机的初始化操作,只要给RST引脚加上两个机器周期以上的高电平信号,就可以使STC89C51单片机复位。本次采用的是12M晶振,按钮复位电路。

4.2 LCD显示电路

LCD显示屏的D0到D7与单片机P0口相连,LCD显示屏EN口与单片机P3.4口相连,RS与P3.5相连。通过滑动变阻器改变LCD显示屏的显示对比度。

4.3 键盘输入电路

本次设计采用独立键盘,键盘按下时,相应的I/O口电平由高变低,一次检测按键是否被按下。4个独立按键与单片机P3.0—P3.3口相连。

4.3 蜂鸣器和LED灯电路

蜂鸣器的作用为准点报时产生报警声,LED在秒钟为偶数时或者功能键被按下时亮。蜂鸣器与单片机P2.2口相连,LED灯与单片机P2.3口相连。

第五部分 仿真电路图与仿真结果

用Keil和Protues进行仿真调试,仿真结果完全达到预期目的。

第六部分 课程设计总结

本次单片机课程设计,在我和我的搭档陈雅琴默契配合,以及邹老师的指导和同学的帮助下顺利完成了。在设计过程中,从仿真电路的设计,源程序的书写和修改以及实物电路的焊接中都遇到了不少问题,但在我们的共同努力下解决了,并且从中学到了不少知识。我们在设计过程中还不断提出自己的疑点以及新的想法,联系实际应用,将课本上学习的东西运用到实际中,这些都令我们受益匪浅。

课程设计需要很大的耐心,尤其是遇到困难的时候,这也是对我们的考验。在设计过程中,我们遇到问题不是感到急躁,而是耐心地寻找解决的办法,与老师、同学进行交流讨论,寻求最佳的解决办法。

总之,在此次的课程设计中,我们不仅动手、动脑,也学会了不少东西,同时,谢谢对我们的设计带来建议、意见和帮助的老师和同学们!谢谢!

第七部分 参考文献

[1]张毅刚。单片机原理及应用(第二版)。北京:高等教育出版社。2004

[2]郭天祥。新概念51单片机C语言教程.北京:电子工业出版社。2007

[3]杨欣.电子设计从零开始.北京:清华大学出版社,2005

附录A 实物图

目的:

通过课程设计,主要达到以下目的:

1、使学生增进对单片机的感性认识,加深对单片机理论方面的理解。

2、使学生掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、串行口通讯等。

3、使学生了解和掌握单片机应用系统的软硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。

void init() /*初始化函数*/

{

write_cod(0x38); /*1602液晶工作状态定义*/

write_cod(0x0c);

write_cod(0x06);

write_cod(0x01);

TMOD=0x01; //定时器工作在方式1 ,16位

TH0=(65536-50000)/256; //50ms

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void write_cod(uchar num) /*1602写指令函数*/

{

E=0;

RS=0;

RW=0;

P0=num;

delay(5);

E=1;

delay(5);

E=0;

}

void write_date(uchar date) /*1602写数据函数*/

{

E=0;

RS=1;

RW=0;

P0=date;

delay(5);

E=1;

delay(5);

E=0;

}

void display(uchar add,uchar shu) /*显示模块 */

{

gao=shu/10;

di=shu%10;

write_cod(0x80+0x40+add); //0x40 第二行 +add

write_date(0x30+gao); //0x30 将数字转换为字符

write_date(0x30+di);

}


第二篇:基于51单片机制作电子时钟实训报告


绪论

单片机应用简述....................................

电子时钟简介......................................

电子时钟的基本特点................................

任务要求.........................................

设计方案.........................................

控制系统的硬件设计................................

芯片的选择.......................................

AT89S51的功能概述...............................

AT89S51引脚功能说明(附引脚图)...................

LED数码管显示电路................................

硬件设计及元器件技术说明电子元器件技术说明……….

控制系统的软件设计................................

程序编程.........................................

流程图...........................................

测试调试...........................................

总结...............................................

单片机应用简述

目前,单片机正朝着高性能和多品种方向发展趋势是进一步向着CMOS化、低功耗、小体积,大容量、高性能、低价格和外围电路内装化等几个方面发展。

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。在以前,是必须由模拟或是数字电路实现的大部分功能的,而现在已经能用单片机通过软件的方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命[2]

电子时钟简介

时间对于人们来说总是那么宝贵,工作的忙碌性和繁杂性容易是人忘记当前时间。忘记了要做的事情,当事情不是很重要的时候这种遗忘无伤大雅。但是,一旦是重要的事情,一时的耽误可能酿成大祸[3]。1957年,Ventura发明了世界上第一只电子表,从而奠定了电子时钟的基础,电子时钟也飞速的发展起来[4]。现代的电子时钟的基于单片机的一种计时工具采用延时程序产生一定的时间中断,用于一秒定义,通过计数方式进行六十秒分钟进一,满六十分小时进一,满二十四小时清零,从而达到计时的功能,是人们日常生活不可缺少的工具。

电子时钟的基本特点

现在高精度的计时工具大多数采用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此,走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LCD显示器或数码管代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好[3]

任务说明

随着人类科技文明的发展,人们对于时钟的要求在不断地提高。时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。高精度、多功能、小体积、低功耗,是现代时钟发展的趋势。在这种趋势下,时钟的数字化、多功能化已经成为现代时钟生产研究的主导设计方向[9]。本文正是基于这种设计方向,以单片机为控制核心,设计制作一个符合指标要求的多功能数字时钟。

本设计基于单片机技术原理,以单片机芯片AT89S51作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个电子时钟系统。该时钟系统主要由时钟电路模块、复位电路模块、LED数码管显示模块、以及键盘控制模块组成。系统具有简单清晰的操作界面,能在4V~7V直流电源下正常工作。能够准确显示时间(显示格式为时时:00.00.00,刚上电时为12.00.00,当显示到23.59.59,即有重新从00.00.00开始显示),可随时进行时间调整。设计以硬件软件化为指导思想,充分发挥单片机功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性

控制系统的硬件设计

芯片的选择

经过多种单片机性能的分析及现有实验设备的限制,在本设计中单片机芯片采用了AT89S51单片机芯片。AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机片内含4k bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程既通用8位微处理器于单片机芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域[5]

AT89S51元件简介

本次使用的元件是单片机系统的一个常用元件:AT89S51。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

AT89S51引脚功能说明(附引脚图)

Vcc: 电源电压

GND: 接地

P0:P0口是一组8位漏极开路型双向I/O口,即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。[5]

图2- 1 AT89S51引脚图

P1:P1口是一个带有内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。Flash编程和程序校验期间,P1接收低8地址[5]

P2:P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX @DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(例如执行MOVX @Ri指令)时,P2口线上的内容(即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。Flash编程和程序校验期间,P2亦接收高位地址和其他控制信号[5]

P3:P3口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能[5]

P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

表2- 1 P3口第二功能

RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0位(地址8EH)可打开或关闭该功能。DIRT0位缺省为RESET输出高电平打开状态[5]

ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此可对外输出时钟或用以定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于出入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,单片机执行外部程序时,应设置ALE无效[5]

/PSEN:程序储存允许(/PSEN)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)使,每个机器周期两次/PSEN有效,即输出两个脉冲。当访问外部数据存储器。没有两次有效的/PSEN信号[5]

EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程电压VPP[5]

XTAL1:振荡器反相放大器及内部时钟发生器的输入端。

XTAL2:振荡器反相放大器的输出端。

LED数码管显示电路

数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳极,一种是共阴极。共阳极就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极连接在一起,即为公共商。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。数码管的显示方法可分为静态显示和动态显示,在本设计中采用的是动态显示,其原理:各个数码管的相同端连接在一起,共同占用8位段引管线:每位数码管的阳极连接在一起组成公共端。利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来[6]

本设计由两个LED四位一体阴极数码管、8个9012(PNP)三极管、8个510欧上拉电阻等组成,由于LED数码管的位电流较大,故采用三极管来驱动。8个电阻一端接到单片机的P1口,另一端分别接到三极管的基极,发射极接地,集电极与所述数码管芯片的位控制端相连。此驱动电路采用主芯片的通用IO口并配合三极管来实现四位数码管的动态扫描和显示驱动,具有电路结构简单、占用电路板空间小、驱动能力强、成本低等优点,其缺点是共阴极的数码管采用PNP三极管驱动,这样三极管的损耗比较大。位码由P1口输出,段码由P3口输出,P1口线与LED之间5.1K的限流电阻和PNP三极管,显示的方式为动态显示方式。

表2-2 字型与字段关系

数码管驱动的意义:

第一:假如不驱动的话,单片机的高低电平仍然可以控制数码管的亮度,形在动态显示,但这时细心的你会发现这时的数码的亮度会比较暗,并且扫描频率很高,仍然有微小的闪动现象,因为单片机的输出的电流本身就很弱;

第二:三极管的作用是:1、起到开关的作用,即某一时刻打开或关闭数码管,形成动态显示;2、驱动数码管,静态显示可以不明显,动态显示的时候,效果就出来了。

硬件设计及元器件技术说明电子元器件技术说明

AT89S51单片机基板电子元件清单:

LED数码管显示电路模块所需电子元件清单:

硬件电路图

实验板原理图

控制系统的软件设计

软件系统主要分为以下几个部分:主程序、显示子程序及中断服务子程序。以动态显示作为主程序,主要是初始化部分和不断调用动态显示子程序。动态显示子程序,它被主程序不断调用,以保证稳定可靠的显示;按键查询采用中断方式;秒定时采用定时器T0中断方式进行,定时时间为50MS,每50MS溢出一次,中断两次达100MS。然后通过显示子程序将单元里面的十六进制数拆开为BCD码,送到显示缓冲区。

流程图

程序编写

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

; clr P3.3

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.3,SETMM1 ;P3.7口为0时转时间调整程序

SJMP START1 ;P3.7口为1时跳回START1

SETMM1: LJMP SETMM ;转到时间调整程序SETMM

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 1秒计时程序;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;T0中断服务程序

INTT0: PUSH ACC ;累加器入栈保护

PUSH PSW ;状态字入栈保护

CLR ET0 ;关T0中断允许

CLR TR0 ;关闭定时器T0

MOV A,#0B7H ;中断响应时间同步修正

ADD A,TL0 ;低8位初值修正

MOV TL0,A ;重装初值(低8位修正值)

MOV A,#3CH ;高8位初值修正

ADDC A,TH0 ;

MOV TH0,A ;重装初值(高8位修正值)

SETB TR0 ;开启定时器T0

DJNZ R4, OUTT0 ;20次中断未到中断退出

ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值

MOV R0,#71H ;指向秒计时单元(71H-72H)

ACALL ADD1 ;调用加1程序(加1秒操作)

MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)

CLR C ;清进位标志

CJNE A,#60H,ADDMM ;

ADDMM: JC OUTT0 ;小于60秒时中断退出

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

MOV R0,#77H ;指向分计时单元(76H-77H)

ACALL ADD1 ;分计时单元加1分钟

MOV A,R3 ;分数据放入A

CLR C ;清进位标志

CJNE A,#60H,ADDHH ;

ADDHH: JC OUTT0 ;小于60分时中断退出

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

MOV R0,#79H ;指向小时计时单(78H-79H)

ACALL ADD1 ;小时计时单元加1小时

MOV A,R3 ;时数据放入A

CLR C ;清进位标志

CJNE A,#24H,HOUR ;

HOUR: JC OUTT0 ;小于24小时中断退出

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 TL1, #0B0H ;装定时器T1定时初值

MOV TH1, #3CH ;

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

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

CPL 02H ;0.3秒定时到对闪烁标志取反

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

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时,"熄灭符"数据放入小时

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

MOV 74H,7AH ;

MOV 75H,7AH ;

AJMP INTT1OUT ;转中断退出

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 加1子 程 序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

ADD1: MOV A,@R0 ;取当前计时单元数据到A

DEC R0 ;指向前一地址

SWAP A ;A中数据高四位与低四位交换

ORL A,@R0 ;前一地址中数据放入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秒延时程序

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

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

SETB ET1 ;允许T1中断

SETB TR1 ;开启定时器T1

SET2: JNB P3.3,SET1 ;P3.7口为0(键未释放),等待

SETB 00H ;键释放,分调整闪烁标志置1

SET4: JB P3.3,SET3 ;等待键按下

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

JNB P3.3,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.3,CLOSE ;无按键按下,等待。

LCALL DISPLAY ;有键按下,调显示子程序延时削抖

JB P3.3,CLOSE ;是干扰返回CLOSE等待

WAITH: JNB P3.3,WAITH ;等待键释放

LJMP START1 ;返回主程序(LED数据显示亮)

SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)

SETHH1: JNB P3.3,SET5 ;等待键释放

SETB 01H ;小时调整标志置1

SET6: JB P3.3,SET7 ;等待按键按下

LCALL DL05S ;有键按下延时0.5秒

JNB P3.3,SETOUT ;按下时间大于0.5秒退出时间调整

MOV R0,#79H ;按下时间小于0.5秒加1小时操作

LCALL ADD1 ;调加1子程序

MOV A,R3 ;

CLR C ;

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

HOUU: JC SET6 ;小于24转SET6循环

LCALL CLR0 ;大于或等于24时清0操作

AJMP SET6 ;跳转到SET6循环

SETOUT: JNB P3.3,SETOUT1 ;调时退出程序。等待键释放

LCALL DISPLAY ;延时削抖

JNB P3.3,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 ;防止键按下时无时钟显示

;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; 显示程序 ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 显示数据在70H-75H单元内,用六位LED共阳数码管显示,P0口输出段码数据,P3口作

; 扫描控制,每个LED数码管亮1MS时间再逐位循环。

DISPLAY: MOV R1,#70H ;指向显示数据首址

MOV R5,#0FEH ;扫描控制字初值

PLAY: MOV A,R5 ;扫描字放入A

MOV P2,A ;从P2口输出

MOV A,@R1 ;取显示数据到A

MOV DPTR,#TAB ;取段码表地址

MOVC A,@A+DPTR ;查显示数据对应段码

MOV P1,A ;段码放入P0口

LCALL DL1MS ;显示1MS

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 P2.5 ;一次显示结束,P2口复位

MOV P1,#0FFH ;P0口复位

RET ;子程序返回

TAB: DB 0c0h,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H

;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

;延时程序,用作按键时间的长短判断

DL1S: LCALL DL05S

LCALL DL05S

RET

DL05S: MOV R3,#20H ;8毫秒*32=0.196秒

DL05S1: LCALL DISPLAY

DJNZ R3,DL05S1

RET

END

调试调试

硬件测试

由于在硬件电路是用通用板做的,所以在电路焊接方面是不可忽视的,只要有一处的错误,则会对检测造成很大的不便,而且电路的交线很多,对于各种锋利的引脚要注意处理,否则刺破带有封皮的导线,使得电路造成短路现象。另外还要对元器件先进行检测,如果有坏的器件要进行更换,还有就是要注意元器件的正确放置与安装以及布线的合理,便于成品电路的检测和维护[7]

在本设计中的调试过程遇到了很多的问题,回想这些问题,其实只要认真点、仔细点、思考多一点大部分是可以避免的,以下为主要问题:电路做成后,数码管的正常显示应为12-00-00,却显示成了00-00-12,就是前四位和后


软件测试

该电子钟的功能虽少,但是程序也比较为复杂,所以在编写程序和调试程序时出现了相对较多的问题。最后,鉴于以前学过的单片机知识,一步一步的完成各个子程序,终于得到了最后的程序。解决了软件问题。在写中断程序和显示程序时遇到了很多的问题,如调试时显示乱码等等。但是经过努力,程序还是成功了。

测试结果分析

1.在测试中遇到LED数码管为不显示时,首先要仔细观察电路板是否存在漏焊、虚焊、或者元件损坏。

2.LED数码管显示不正常,还有亮度不够,要注意观察电路是否存在短路现象。若硬件无误后,再查看书写的程序是否正确,并对程序进行认真修改。

测试结论

经过了多次的反复测试与分析,可以对电路原理及功能更加熟悉,同时提高了设计能力以及对电路的分析能力,同时在软件的编程方面得到更高的提高,对编程能力也得到了加强,同时对所学的只是得到了很到的提高与巩固[7]。对于初学者来说,更是有更大的益处,能理论联系实际运用,学到更多的知识,真正将这门课程所包含的知识用于实际生活中的具体创造和设计中。

总结

在整个实训的过程中,从设计方案的确定,到具体电路的设计,最后到总体电路的联接构建以及程序的编写,整个设计工程量的比较大的,单靠个人能力,很多方面考虑不周,有的地方甚至毫无头绪,想不出具体方案,因此,绝对不能心急,不明白的地方和其他的同学讨教,毕竟群策力办法要多些。另外,在这次的设计过程中,我还查阅了很多相关设计的资料,通过参考和研究别人的一些设计,使得自己的设计思路更加清晰和周密,从而使设计出来的产品也更加完。

尽管这次设计中遇到了很多问题,但是也都一一得以解决,比如软件设计时,遇到了很多问题,但是经过向同学讨教及想老师询问,静下心来思考,慢慢就理清了思路;在硬件电路板焊接过程中,也遇到了很多问题,在电路焊接虽然并没有什么大的问题,但是线多,需要一定的耐心,慢慢来,不能心急才能焊接成功。通过这次设计,也使我知道了无论做任何事情,都要有一颗平常心,不要急着想要成功、走捷径,要一步一个脚印,把每一部都认认真真的做好来,才能取得最后的成功,同时也练就了我的耐心,做什么事情都要有耐心,不要遇到困难就退缩,而是要静下心来去寻找解决的方法,否则很难有最后的成功。在此过程中,充分发挥人的主观能动性,自主学习,学到了很多没有学到过的知识,另一方面,碰到问题注意与同学和老师写作、讨论、寻求解决的方案,最终完成作品,达到预期的目的[7]。虽然这次设计的课题有些简单,但是要真的做进去还是有一定的困难的,但是经过自己的努力,得出最后的作品,我个人还是蛮有成就感的,更重要的是学到了平时没有学到的知识。因此,我自己觉得这次的课程设计对我而言算的上是一次全新的尝试,也是一个小小的成功,更是一次很好的锻炼,让我有了全方位的提高和进步。

更多相关推荐:
单片机电子时钟课程设计报告

基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重量轻抗干扰能力强环境要求不高价格低廉可靠性高灵活性好开发较为容易由于具有上述优点...

单片机电子时钟的设计报告

单片机电子时钟的设计目录1引言12设计任务与要求221设计题目222设计要求23系统的功能分析与设计方案331系统的主要功能332系统的设计方案333数码管显示工作原理434电路硬件设计5341设计原理框图53...

51单片机电子时钟课程设计报告

JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20xx级电工2班学号20xx401020xx2姓名王贞指导教师邹云峰提交日期20xx...

单片机课程设计数字钟实验报告

单片机课程设计电子钟一实现功能1能够实现准确计时以数字形式显示时分秒的时间2小时以24小时计时形式分秒计时为60进位能够调节时钟时间3闹钟功能一旦走时到该时间能以声或光的形式告警提示4能够实现按键启动与停止功能...

基于单片机的电子时钟课程设计报告

目录一、引言二、设计课题三、系统总体方案四、系统硬件设计1.硬件电路原理图2.元件清单五、系统软件设计1.软件流程图2.程序清单六、系统实物图七、课程设计体会八、参考文献及网站九、附录一.引言单片机因将其主要组…

单片机课程设计报告—LED显示电子钟

单片机原理及其接口技术课程设计报告课题LED显示的电子钟姓名学号院系自动控制与机械工程学院班级指导教师20xx年6月目录一课程设计目的3二课程设计要求3三设计内容4四硬件设计需求51硬件系统各模块功能51单片机...

单片机课程设计实验报告_LCD电子时钟

单片机原理与应用课程名称单片机原理与应用设计题目电子钟院系电子信息工程学院班级自动化设计者全宏宇指导教师一设计目标LCD显示电子钟的基本功能1实现时钟功能2实现闹铃功能3实现秒表功能4具有一定的计时精度LCD显...

51单片机电子时钟设计报告

电子时钟实验报告全部代码在文档末尾51单片机LCD1602液晶显示屏平台下编程实现可直接编译运行目录一实验目的1二实验要求2三实验基本原理2四实验设计分析2五实验要求实现3A电路设计31整体设计32分块设计42...

单片机课程设计报告 电子时钟

荆楚理工学院课程设计成果学院电子信息工程学院班级学生姓名学号设计地点单位设计题目电子时钟完成日期20xx年6月19日指导教师评语成绩五级记分制教师签名目录1摘要12系统简介121总体设计方案说明222单片机系统...

基于单片机的电子时钟设计报告(LCD显示)

单片机原理及应用课程设计任务书题目电子时钟LCD显示1设计要求以AT89C51单片机为核心的时钟在LCD显示器上显示当前的时间使用字符型LCD显示器显示当前时间显示格式为时时分分秒秒用3个功能键操作来设置当前时...

经典单片机多功能音乐闹钟课程设计报告

计算机控制技术题目单片机电子钟设计学院电子信息工程学院学科门类工学专业电气工程及其自动化学号姓名范明明20xx年12月29日数字钟的简介单片机系统作为一种典型的嵌入式系统其系统设计包括硬件电路设计和软件编程设计...

单片机电子时钟毕业论文设计

单片机电子时钟的设计摘要单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重量轻抗干扰能力强环境要求不高价格低廉可靠性高灵活性好开发较为容易由于具有上述优点在我...

单片机电子时钟课程设计报告(31篇)