基于51单片机的电子时钟.doc
《基于51单片机的电子时钟.doc》由会员分享,可在线阅读,更多相关《基于51单片机的电子时钟.doc(40页珍藏版)》请在沃文网上搜索。
1、摘要时钟具有走时准确、整点报时、设置时间、设置闹钟时间、数据输入合法性判别、掉电数据不丢失、操作简便等特点。目录摘要1一、设计要求3二、硬件系统42.1器件选用42.2器件简介41.STC89C52芯片42.DS1302芯片53.1602液晶64.蜂鸣器72.3系统构架92.4电路设计91蜂鸣器与电源指示电路102. 51单片机与时钟芯片电路103 .液晶显示电路114按键控制电路115.电源引入电路12三、程序设计123.1程序框图123.2简介流程图143.3程序代码15四、实物及使用说明154.1 图片展示154.2操作键介绍174.3功能介绍18五、心得体会18六、附录19附一、源程序
2、19附二:器件清单(器件购买清单)40一、设计要求1. 走时准确(一个月内走时误差不得大于*秒)2. 具备整点报时,设置闹钟功能3. 具备修改时间功能4. 操作简单易懂二、硬件系统2.1器件选用对于要求走时准确的闹钟,应该选择专用的时钟芯片来实现。我们选常用的DS1302芯片来保证走时的准确性。显然,为了能够报时,我们需要一个发音器件,可以选用蜂鸣器。对于控制功能的实现,我们可以选用性价比较高的STC89C52单片机来实现。显然,我们还需要一个人机界面显示器和操作按键来对闹钟进行一些操作。这个可以选用1602液晶以及按键来实现。由上可知,51单片机是闹钟系统的主控芯片。2.2器件简介1.STC
3、89C52芯片STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2
4、级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz。2.DS1302芯片DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM 通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格
5、式DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES 复位2 I/O 数据线3 SCLK串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW。下面将主要的性能指标作一综合:实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力 31个 8 位暂存数据存储RAM 串行 I/O 口方式使得管脚数量最少 宽范围工作电压2.0 5.5V 工作电流 2.0V 时,小于300nA 读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式 8
6、脚DIP 封装或可选的8 脚SOIC 封装根据表面装配 简单 3 线接口 与 TTL 兼容Vcc=5V 可选工业级温度范围-40 +853.1602液晶1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。显然,对于显示时钟数据它是能够
7、胜任的。下面是液晶的示意图以及引脚说明: 4.蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。蜂鸣器分为有源和无源两种,此处源值得是震荡源,而非电源。两者的区别是:有源蜂鸣器只要给一个电源,就能发声,所以程序控制方便,但由于多了一个震荡电路,价格上相对较高;无源蜂鸣器给直流信号无法使其发声,须通高低电平才能使其发声,显然高低电平的频率不能太低,但是
8、频率也不能太高,否则蜂鸣器的响应速度跟不上,由此可知无源蜂鸣器控制较为复杂。但是其价格便宜。此处我们选用无源蜂鸣器,因为对于51单片机来说,在实现闹钟功能后,还可以轻松的驱动无源蜂鸣器。下面是蜂鸣器的实物图通过以上初步的了解,可以断定我们选的器材可以满足设计要求。2.3系统构架液晶显示电源模块 STC89C52蜂鸣器DS1302模块操作键2.4电路设计通过查所选器件的数据手册,可以设计出正确的电路图。下面是我设计的电路图。1蜂鸣器与电源指示电路2. 51单片机与时钟芯片电路3 .液晶显示电路4按键控制电路5.电源引入电路三、程序设计3.1程序框图开始初始化设置键按下按键处理确认键按下 数据合法
9、 写入DS1302报时与闹钟显示数据读DS1302数据 3.2简介流程图.初始化:DS1302,1602初始化,开定时器0、1,开外部中断2.按键处理:按键有上下左右,设置键,确认键。其中左右键是控制液晶光标左右移动,是通过将液晶位置的地址写入数组A,然后左右键改变变量i,然后Ai就是光标所在的位置,由此我们可以进行一系列操作。上下键是控制相应位置数据的加减,知道了光标的位置,我们也可以知道相应位置显示的数据。设置键和确认键分别接在两个外部中断引脚上,中断程序里面是一些控制标志位的处理。3.数据合法判断:判断输入的数据是否合法。如月份为13,日期为31,小时为25等都为非法数据,如果出现了这种
10、情况,应该拒绝写入DS1302,并提示错误。总体来看,当没有键按下的时候,程序将不停地从DS1302读数据,然后显示数据,并判断是否是整点,是否到了闹钟时间;当有按键按下的时候,那么就进入设置状态,进行一些列设置,如修改时间,开闹钟等。当设置的数据非法时,数据将不会写入DS1302,保护了原来的数据,并且会提示数据非法,设置失败。由于数据时写入DS1302,且改芯片一直供电,所以数据不会因为单片机的掉电而丢失,如此我们不需要每次开机都设置时间,设置闹钟。3.3程序代码由于代码有些长,附在最后。四、实物及使用说明4.1 图片展示从上图可以看出,时钟显示了年月日时分秒周,其中6下面的0代表闹钟关闭
11、,如果为1代表闹钟打开。现在闹钟已经打开,后面是闹钟时间22:214.2操作键介绍1. 设置键为最底下那排左边的按键,当按下它,液晶会显示光标,指示当前位置,由此我们可以知道是对“年月日时分秒周闹”的哪一个操作。注意,只有当按下这个键,其它键才有效。2. 确认键最底下那排右边的按键,当按下它,液晶会关显示光标。如果闹钟为0,则不显示闹钟时间;如果闹钟为1则显示闹钟时间。如果设置时间错误,如月份为13,小时为25等,则会显示“Illegal time Set failed”,并发出声音提示。3. 上面四个按键,其中左右两个控制光标的左右移动,上下两个控制光标所在位置数据的加减。4. 如果按下了设
12、置键,并对数据进行了修改,但又不想修改怎么办?很简单,不要按确认键,然后关电源,则修改无效。5. 本闹钟只要DS1302芯片不掉电,则时间数据,闹钟数据不会丢失,即便主控芯片掉电也如此。DS1302用了纽扣电池供电,所以一般情况下不需要担心数据丢失的问题。除非纽扣电池没电。4.3功能介绍 时钟具有走时准确、整点报时、设置时间、设置闹钟时间、数据输入合法性判别、掉电数据不丢失、操作简便等特点。五、心得体会通过制作电子钟,让我更加了解了51单片机,也让我更会看数据手册,学会了怎样驱动DS1302,液晶。与同学的交流,加强了我们之间的联系。通过帮同学查错,我对于程序查错更有自信了。六、附录附一、源程
13、序#include #include#include#define uchar unsigned char#define uint unsigned int/*ds1302的位定义*/sbit SCK=P20;sbit SDA=P21;sbit RST=P22;/*液晶的位定义*/sbit RS=P25;sbit RW=P26;sbit En=P27;/*按键及蜂鸣器*/sbit Beep=P10;sbit up=P13;/上sbit down=P14;/下sbit left=P12;/左sbit right=P15;/ 右sbit P32=P32;/中断0sbit P33=P33;/中断1b
14、it set,ok;/设置,确定,0/1行有关bit choose_row;/用于选择第一行还是第二行unsigned int time_delay;/延时变量bit read_time;code uchar avalueh08=0x82,0x83,0x85,0x86,0x88,0x89,0x8b;/液晶第0行的地址code uchar avalueh111=0xc0,0xc1,0xc3,0xc4,0xc6,0xc7,0xc9,0xcb,0xcc,0xce,0xcf; /液晶的地址 address valuecode uchar error0=Illegal time;code uchar e
15、rror1=Set failed;uchar column0,column1;/列,用于地址bit row0,row1;/行0行1bit correct_time;/校时uchar alarm;/闹钟开关uchar n;/代表数字09uchar alarmh,alarmm,alarm_tmp,alarmh1,alarmm1; /闹钟时,分/闹钟音乐unsigned char music_n=0; /n为节拍常数变量 unsigned char code music_tab26 = 0x18, 0x30, 0x1C , 0x10, /格式为: 频率常数, 节拍常数, 频率常数, 节拍常数, 0x
16、20, 0x40, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x10, 0x1C, 0x10, 0x18 , 0x40, 0x1C, 0x20, 0x20 , 0x20, 0x1C, 0x20, 0x18 , 0x20, 0x20, 0x80 ; /*复位脚*/#define RST_CLRRST=0/*电平置低*/#define RST_SETRST=1/*电平置高*/*双向数据*/#define IO_CLRSDA=0/*电平置低*/#define IO_SETSDA=1/*电平置高*/#define IO_RSDA /*电平读取*/*时钟信号*/#define S
17、CK_CLRSCK=0/*时钟信号*/#define SCK_SETSCK=1/*电平置高*/*ds1302地址宏定义*/#define ds1302_sec_add0x80/秒数据地址#define ds1302_min_add0x82/分数据地址#define ds1302_hour_add0x84/时数据地址#define ds1302_day_add0x86/日数据地址#define ds1302_month_add0x88/月数据地址#define ds1302_week_add0x8a/星期数据地址#define ds1302_year_add0x8c/年数据地址#define d
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子 时钟