系(院)名称:
专 业 班 级:
学 生 姓 名:
学 号:
指导教师姓名:
指导教师职称:
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得xxx学院及其它教育机构的学位或学历而使用过的材料。
数字电子钟是采用数字电路实现对日期、时、分、秒数字显示的计时装置。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如,机械手的控制、家务的自动化、定时自动报时、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性能价格比的不断提高,新一代产品的应用也越来越广泛,大可构成复杂的工业过程控制系统,完成复杂的控制功能。小则可以用于家电控制,甚至可以用于儿童电子玩具。它功能强大,体积小,质量轻,灵活好用,配以适当的接口芯片,
本系统设计采用STC89C52系列单片机作为核心部件,采用DALLAS公司生产的高性能性能、低功耗的实时时钟芯片DS1302提供时间和日期数据,STC89C52从DS1302中读取时间数据并进行分析和处理。由于显示的数据只有温度数据和英文字符,数据较少,液晶显示电路采用LCD1602就可以完成显示需求。报时电路由发光二极管和蜂鸣器等组成,当报时时间到时,报时电路中的发光二极管发光,蜂鸣器响起,实现报时功能。键盘控制电路由于所需按键较少,采用独立式键盘方式完成相应的控制调节功能。
寄存器名称 |
复位状态 |
寄存器名称 |
复位状态 |
PC |
0000H |
TCON |
0×000000B |
ACC |
00H |
TL0 |
00H |
B |
00H |
TH0 |
00H |
PSW |
00H |
TL1 |
00H |
SP |
07H |
TH1 |
00H |
TMOD |
00H |
PCON |
0×××0000B |
DPTR |
0000H |
SBUF |
××××××××B |
P0~P3 |
FFH |
SCON |
00H |
2、程序执行方式
程序执行方式是单片机的基本工作方式。系统复位后PC=0000H,考虑到单片机存储器结构的特殊性(0003H~002AH共40个单元,预留用于存放中断程序的入口地址),在0000H~0002H中放一条绝对跳转指令,从而使程序从指定的地址开始执行。
配合程序调试,程序又可运行在单步、跟踪、全速运行三种执行方式。目前一般仿真器都提供这三种程序执行方式。
随着科学技术的发展,在线可编程(ISP)单片机已经应用于实际生产,如STT89C58、AT89S51、AT89S52芯片,都具有在线可编程功能。
3、低功耗工作方式
在单片机应用系统中,键盘用于输入数据、代码和命令;显示器用来显示单片机的输入值、控制过程中间信息及运算结果等。键盘和显示器是实现人机对话,是两个必不可少的硬件配置。
在本系统中,键盘控制电路的主要功能是用于温度初值的设定和检测时间实时显示值的修改。
在键盘接口技术中,键盘分独立式键盘和矩阵式键盘两种。
1、独立式键盘
独立式键盘是最简单的键盘电路,每个键独立的连接一根输入线。这种键盘的优点是结构简单、使用方便,目前这种结构的键盘应用还相当普通,这种键盘的缺点是每个键占用一根I/O口线,这样随着键盘数量的增加I/O端口会不足。因此独立式按键结构的键盘只适应于键盘数量较少的应用系统。
// DS1302.c(main.c)
/****************************
*名称:DS1302.c
*说明:main.c文件
*****************************/
#include"DS1302.h"
#include "1302.h"
#include "LCD1602.h"
uchar bdata flag1;//用bdata将变量定义在可位寻址息肉数据存储区
sbit EXT0 = P3^2;//外部中断0引脚
sbit OptionSwitchButton = P3^0;//切换选中项按键,目的在于切换需要调节的项,如秒,小时
sbit IncreaseValueButton = P3^3;//增加选中项的数值
sbit Beep = P2^6;//蜂鸣器接口
sbit LED = P2^5;//报警LED接口
uchar Mode=0;//模式标志位,若Mode=0,表示正常工作模式,Mode为1,表示工作于调时模式,Mode为2,工作于定时模式。
uchar Mode0_Init_flag = 0;//正常工作模式下LCD是否已经进行初始化的标志位,如果显示-和:,则进行一次显示,如果显示过,该标志位置1
uchar FlashTime = 100;//决定闪烁交替的时长
uchar time_date[] = {0,0,12,1,1,2,13};//初始的时间和日期,秒 分 时 日 月 周 年。2013年1月1日 星期二 12:00:00
uchar Min_time_date[] = {0,0,0,1,1,1,0};//调时状态下各个数值的最小值
uchar Max_time_date[] = {59,59,23,31,12,7,99};//调时状态下各个数值的最大值
uchar Set_time[] = {0,0,0};//定时时间数值
uchar *p1 = time_date;//将P1指向时间日期数组
uchar Mode1_read_flag = 0;//用来判断是不是第一次进入调时状态
uchar Mode2_Display_flag = 0;//用来判断是不是进行了一次显示
sbit FLASH_FLAG = flag1^0;//根据此标志交替给相应位写入空字符和实际的时间信息
sbit Write_RTC_flag = flag1^1;//根据此位判断在调时状态下是否进行了时间改动,是否在正常状态下需要将时间重新写入到DS1302
sbit Beep_flag = flag1^2;//根据此标志判断是否进行报时
uchar Keep_Press_flag = 0;//按键按下保持标志
uint Timer0_Counter = 0;//Time0计数器
uint Flash_Counter = 0;//控制选中项闪烁所用的计数器
//uint Beep_Counter = 0;//控制蜂鸣器鸣叫所用的计数器
uchar Beep_time = 0;//鸣叫次数,鸣叫4声之后插入延时,使每4声之后有所停顿
uchar Option = 0;//调时状态下当前选中的项
uchar Set_Time_Option = 0;//定时状态下当前选中的项
uchar code write_addr[7] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 写的寄存器地址
uchar code read_addr[7] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //秒分时日月周年 读的寄存器地址
/***************************
不精确1us延时
***************************/
void delay_us(uint n)
{
uint i;
while(n--)
for(i=1;i>0;i--);
}
/***************