基于DS1302与数码管设计的可调数字钟
- 格式:doc
- 大小:533.00 KB
- 文档页数:13
这是我最近完善的1302数字可调时钟,经过20多个小时的走时实验,走时相当准确,与电脑时间完全一致,最起码肉眼看不出误差,1302的另一个突出优点是可以接备用电源,用纽扣电池供电,在外部系统电力中断的情况下,仍能保持内部时钟正常走时,经多次故意掉电实验,走时正常。
本次的完善主要在软件。
一个系统能够实现功能并不一定意味着成功,关键要让这个系统如何稳定的工作,提高其可靠性,是现代电子行业努力追求的目标。
本项目完全由本人在目前比较简陋的“振勇电子实验室”完成,介于条件简陋,设备简单,导致硬件系统尚不完善。
在软件编程方面,用先进的ASP下载取代了我一贯使用的串口下载,其好处是不用冷启动(个人认为除此之外没别的好处,而且下载效率没有串口的高,成功率保持在50%就很不错了)。
单片机用ATMEL公司的AT89S52取代了我以前用的STC系列单片机,STC是国产单片机,虽然我们提倡支持国产,但是很多时候国产真的太不争气了。
另一个比较大的改动在软件调时方面,按键抖动是一个很让人头疼的问题,就连我一直很佩服的郭天祥老师在这一块也曾犯过错误,而且错误还著书出版了,单片机的扫描是很快的,那么怎么才能有效地去除按键抖动呢下面我介绍的这种方法是我自己纯脑力劳动的结晶,实验证明运行效果良好。
if(key==0){con++;if(con==20){con==0;qita();}}一般人都能理解这个用法,也能想到,但关键这个程序不完整,比方说con没加到20,加到10就松开了,那么请问con 还能被清0吗显然不能。
那么你下一次再按的时候就有可能按一下加两下,这种不稳定性在编程中是不能存在的,最起码一个合格的产品不能有这样的毛病。
所以在这个函数里面应该加上下面这句:else if(key==1){if(con!=0){con=0;}}这个函数很简单,关键是它的位置,一定要与上面的的那个函数在同一位置。
该数字时钟另一个有技术含量的地方就是在调节时间的时候会在对应的位置闪烁,原理也很简单,就是在显示之前加一个门卡,比方说占空比50%的闪烁,那我就定义一个son,让son++;加满是60,那加到30以后让数码管不显示,就行了。
基于DS1302的电子时钟设计2012~ 2013 学年第二学期《单片机》课程设计报告题目:基于DS1302的电子时钟设计专业:电气工程系自动化班级: 10自动化(2)班姓名:费孝斌洪建勇刘云飞桑乐陆欢欢魏笑指导教师:林开司电气工程系2013年5月12日任务书摘要电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。
另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。
本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。
本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。
本设计应用AT89C52芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。
这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。
该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。
关键词:电子时钟;多功能;AT89C52;时钟日历芯片目录摘要一、引言 (4)二、基于单片机的电子时钟硬件选择分析 (5)2.1主要IC芯片选择 (5)2.1.1微处理器选择 (5)2.1.2 DS1302简介 (6)2.1.3 DS1302引脚说明 (7)2.2电子时钟硬件电路设计 (8)2.2.1时钟电路设计 (9)2.2.2整点报时功能 (10)三、protel软件画原理图 (11)3.1系统工作流程图 (12)3.2原理图 (13)四、proteus软件仿真及调试 (14)4.1电路板的仿真 (15)4.2软件调试 (16)五、源程序 (17)六、参考文献 (18)引言时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。
从古代的水漏、十二天干地支,到后来的机械钟表以及当今的石英钟,都充分显现出了时间的重要,同时也代表着科技的进步。
常熟理工学院电气与自动化工程学院《微机原理与接口技术》课程设计题目:基于DS1302的电子钟设计*名:***学号:*********班级:测控122班指导教师:***起止日期:2015年7月摘要 .......................................................................................................................... - 1 -一、《微机原理与接口技术》课程设计任务书 .................................................. - 2 -二、总体设计方案 (2)2.1 设计框图..................................................................................................... - 2 -2.2 模块说明..................................................................................................... - 3 -2.2.1 DS1302模块 (3)三、硬件电路设计 (4)3.1 单片机最小系统......................................................................................... - 4 -3.1.1 系统结构 (4)3.1.2 系统特点............................................................................................................ - 5 -3.2 时钟电路设计............................................................................................. - 5 -3.3 数码管显示设计 (5)3.4 键盘电路 (5)四、软件设计 .......................................................................................................... - 6 -4.1 主程序流程................................................................................................. - 6 -4.2 时钟电路设计 (8)五、程序调试与运行结果 ............................................................ 错误!未定义书签。
实现功能:以DS1302数字时钟芯片为基础的时钟程序,用LED1602显示当前时间,功能键能显示年月日和星期。
#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit SCK=P3^6; //时钟端口sbit SDA=P3^4; //数据端口sbit RST=P3^5; //复位端口sbit LCD_RS = P2^6;sbit LCD_RW = P2^5;sbit LCD_EP = P2^7;sbit key=P2^0;uchar code write_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年uchar code read_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};uchar code a[]={" The time is:"};uchar code w1[]={" Monday"};uchar code w2[]={" Tuesday"};uchar code w3[]={" Wednesday"};uchar code w4[]={" Thursday"};uchar code w5[]={" Friday"};uchar code w6[]={" Saturday"};uchar code w7[]={" Sunday"};uchar init_time[] = {10,10,22,19,7,2,11}; //秒分时日月周年11-07-19 22:10:10uchar buff[7];uchar buff1[8];uchar buff2[13];uchar buff3;delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);}/******DS1302部分*****/void write_byte(uchar n){uint i;for(i=0;i<8;i++){SCK=0;SDA=n&0x01;n=n>>1;SCK=1;}}uchar read_byte(){uint i;uchar n;for(i=0;i<8;i++){if(SDA)n=n|0x80;SCK=0;n=n>>1;_nop_();_nop_();SCK=1;}return n;}void write_DS1302(uchar address,uchar n) {RST=0;_nop_();SCK=0;_nop_();RST=1;_nop_();write_byte(address);write_byte(n);SCK=1;RST=0;}uchar read_DS1302(uchar address){uchar n;RST=0;_nop_();_nop_();SCK=0;_nop_();RST=1;write_byte(address);n=read_byte();_nop_();RST=0;_nop_();_nop_();_nop_();RST=0;SCK=0;_nop_();_nop_();_nop_();_nop_();SCK=1;_nop_();_nop_();SDA=0;_nop_();_nop_();SDA=1;_nop_();_nop_();return n;}void get_data(){unsigned char i,*p;p=read_address;for(i=0;i<7;i++){buff[i]=read_DS1302(*p);p++;}}void set_DS1302(){unsigned char i,*p,n;for(i=0;i<7;i++) //转换成BCD码{n=init_time[i]/10;init_time[i]=init_time[i]%10;init_time[i]=init_time[i]+n*16;}write_DS1302(0x8E,0X00);p=write_address;for(i=0;i<7;i++){write_DS1302(*p,init_time[i]);p++;}write_DS1302(0x8E,0x80);}bit lcd_bz(){ // 测试LCD忙碌状态bit result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P0 & 0x80);LCD_EP=0;return result;}lcd_wcmd(uchar cmd){ // 写入指令数据到LCD while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}lcd_pos(uchar pos){ //设定显示位置lcd_wcmd(pos|0x80);}lcd_wdat(uchar dat){ //写入字符显示数据到LCD while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}lcd_init(){ //LCD初始化设定lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据delay(1);lcd_wcmd(0x0c); //显示开,关光标delay(1);lcd_wcmd(0x06); //移动光标delay(1);lcd_wcmd(0x01); //清除LCD的显示内容delay(1);}void dispaly(){uint i;if(0==key)delay(5);if(0==key){lcd_wcmd(0x01);while(0==key){buff2[0]=0x20;buff2[1]=0x20;buff2[2]=0x20;buff2[3]=0x32;buff2[4]=0x30;buff2[5]=buff[6]/16+0x30;buff2[6]=(buff[6]&0x0f)+0x30;buff2[7]=0x2d;buff2[8]=buff[4]/16+0x30;buff2[9]=(buff[4]&0x0f)+0x30;buff2[10]=0x2d;buff2[11]=buff[3]/16+0x30;buff2[12]=(buff[3]&0x0f)+0x30;lcd_pos(0);for(i=0;i<13;i++){lcd_wdat(buff2[i]);delay(5);}buff3=buff[5]&0x0f;lcd_pos(0x40);if(buff3==1){i = 0;while(w1[i]!= '\0'){lcd_wdat(w1[i]);i++;delay(5);}}else if(buff3==2){i = 0;while(w2[i]!= '\0'){lcd_wdat(w2[i]);i++;delay(5);}}else if(buff3==3){i = 0;while(w3[i]!= '\0'){lcd_wdat(w3[i]);i++;delay(5);}}else if(buff3==4){i = 0;while(w4[i]!= '\0'){lcd_wdat(w4[i]);i++;delay(5);}}else if(buff3==5){i = 0;while(w5[i]!= '\0'){lcd_wdat(w5[i]);i++;delay(5);}}else if(buff3==6){i = 0;while(w6[i]!= '\0'){lcd_wdat(w6[i]);i++;delay(5);}}else if(buff3==7){i = 0;while(w7[i]!= '\0'){lcd_wdat(w7[i]);i++;delay(5);}}}lcd_wcmd(0x01);}else{lcd_pos(0);i = 0;while(a[i]!= '\0'){lcd_wdat(a[i]);i++;delay(5);}buff1[0]=buff[2]/16;buff1[1]=buff[2]&0x0f;buff1[2]=0x0a;buff1[3]=buff[1]/16;buff1[4]=buff[1]&0x0f;buff1[5]=0x0a;buff1[6]=buff[0]/16;buff1[7]=buff[0]&0x0f;lcd_pos(0x44);for(i=0;i<8;i++){lcd_wdat(buff1[i]+0x30);delay(5);}}}void main(){lcd_init();set_DS1302();while(1){get_data();dispaly();}}。
核心芯片简介1.1 DS1302简介DS1302[1]是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5V。
时钟可工作在24小时格式或12小时(AM/PM)格式。
DS1302与单片机的接口使用同步串行通信,仅用3条线与之相连接。
可采用一次传送一个字节或突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
1.1.1 DS1302引脚功能与内部结构DS1302的引脚功能如表1所示,外形及内部结构如图1所示[2]:表1 DS1302引脚功能表图1 DS1302管脚图及内部结构图1.1.2 DS1302的控制字DS1302的控制字节如图2所示:7 6 5 4 3 2 1 0图2 DS1302控制字节的含义控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
1.1.3 DS1302的复位引脚通过把RST 输入驱动置高电平来启动所有的数据传送。
RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供了终止单字节或多字节数据的传送手段。
当RST 为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中置RST 为低电平,则会终止此次数据传送,并且I/O 引脚变为高阻态。
上电运行时,在Vcc≥2.5V 之前,RST 必须保持低电平。
实验十四、DS1302数字钟实验(一)、实验目的:DS1302 是美国DALLAS 公司推出的一种高性能、低功耗、带RAM 的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
将DS1302与单片机连接可以方便的取得时间信息,与全软件的数字时钟相比,编程简单、易于调整、使用方便。
该实验的目的就是使使用者通过实验例程的学习,掌握单片机控制系统的实时时钟/日历电路的使用方法,由于DS1302与单片机连接时采用SPI接口,故该实验可以使使用者了解和学习SPI的通讯协议和编程方法。
(二)、实验接线和步骤:1、在DS1302芯片附近,将“P33”、I/O”跳线短接,将“P23”、“SCK”跳线短接,即完成DS1302和单片机的接口连接。
2、将液晶屏12864接到串行接口,将U13(上面的8位拨码开关)的“6”、“7”、“8”三位拨到“ON”位置。
这三位是控制和串行数据接口。
3、短路块短接实验板左侧7289模块的四路跳线“CS1、CLK1、DIO1、INT1”(“KEY”插座附近),然后将7289模块和实验板“KEY”插座相连接。
4、上电下载程序。
5、7289键盘数码管模块对应调时间的按键如下:“1”键调“年”;“2”键调“月”;“3”键调“日”;“A”键调“周”;“7”键调“时”;“8”键调“分”;“9”键调“秒”;所有按键的调节都是单方向增加模式,关于双方向增减模式的调节可以自行修改程序完成。
7289模块数码管上显示的是7289模块按键的键值(不是时间的设置值,时间的设置变化值显示在12864液晶屏上)。
说明一:如果程序下载后运行液晶出现乱码现象,可以按单片机重启按钮重启单片机,还是不行则需要重新启动实验板电源。
说明二:因程序例程篇幅过长,不方便以书面形式列出,为方便使用者,例程的原代码及工程文件所有文档均已附在电子文档“简单端口实验”文件夹中。
××大学××学院××系课程设计报告××大学××学院××系××课程设计DS1302数码管显示数字钟的设计学生姓名学号所在系专业名称班级指导教师成绩××大学××学院二〇一二年六月摘要:本课程设计要求基于STC89C52单片机实现用8位数码管进行时钟显示。
采用STC89C52单片机和DS1302实时时钟芯片,使用5V电源供电。
时钟可以通过按键切换,数码管显示时、分、秒以及年、月、日,并且可以实现时钟的校准功能。
包括时钟芯片驱动程序,数码管显示及驱动程序。
关键字:单片机,DS1302,时钟电路,数码管显示Abstract: This course is designed 8 digital tube clock display requirements based STC89C52 microcontroller. Using STC89C52 microcontroller and DS1302 real time clock chip, using a 5V power supply. Design of the clock by means of the key switches, digital tube display hours, minutes, seconds, and the year, month, day, and can achieve clock calibration function. Including the driver of the clock chip, digital display and driver.Key words: single chip macrocomputer;DS1302;clock circuit;digital tube display目录1. 总体设计方案 (1)1.1 电子钟功能介绍1.1.1 基本功能介绍 (1)1.1.2 扩展功能介绍 (1)1.2 总体设计方案 (1)1.2.1 计时方案 (1)1.2.2 按键方案 (1)1.2.3 显示方案 (2)2. 单元模块设计 (2)2.1 硬件总电路设计 (2)2.2 显示模块电路设计 (2)2.3 按键调时电路设计 (3)2.4 时钟芯片通信电路 (3)3. 软件模块设计 (4)3.1 主程序设计 (4)3.2 时钟芯片 (5)3.2.1 DS1302内部结构 (5)3.2.2 DS1302的读时序 (6)3.2.3 DS1302的写时序 (6)3.3 键盘调时 (7)4. 设计总结 (8)5. 参考文献 (8)6. 附录 (9)前言数字钟是采用数字电路实现对时、分、秒及数字显示的计时装置,广泛用于个人家庭、车站、办公室等公共场所,成为人们日常生活中的必需品。
物理与电子科学学院电子电工实验基于DS1302多功能数字时钟--万年历实验报告实验名称:基于DS1302多功能数字钟实验日期: 2014年 01 月 05 日专业:电子信息工程*名:**班级:物电 1105 班学号: *************一、设计理念:电子万年历是一个应用非常广泛地实用日常计时工具,带有显示温度,显示世纪,年,月,日,星期,时,分,秒和按键可调时间及其按键设置闹钟地功能,同时具有月末自动更新,闰年补偿功能,整点报时等多种功能.环境温度检测系统在日常生活和工业应用非常广泛,能实时采集周围地温度信息进行显示.此系统是基于STC89C52单片机设计地,包含液晶显示模块,DS1302实时时钟模块,DS18B20温度采集模块,键盘扫描模块,蜂鸣器报警模块.STC89C52作为控制核心,具有功耗低,功能强等特点,电压可选3到5V电源供电.显示模块采用1602液晶动态显示,相对数码管而言经济实用,占用空间小,对于显示数字、字母最为合适,而且与单片机连线简单,占用IO口相对较少.实时时钟芯片DS1302是一款经济实惠功能强大地较新型产品,该器件提供RTC/日历,可外加器件实现定时闹钟等功能,如果检测到主电源故障,该器件可自动切换到备用电源供电,可以保证在断电情况下精准走时,计时.温度检测显示模块采用数字式温度传感器DS18B20,该芯片具有精度高,测量范围广等优点,易与单片机连接,模块电路组成简单并同时具有温度报警功能.关键词:STC89C52,DS1302,DS18B20,1602液晶显示,电子万年历,采集设备周围环境温度、整点报时,闹钟时分通过按键设置,时、分、秒、年、月、日、星期通过按键进行调节校准……二、设计思路:核心控制体:STC89C52单片机实时时钟芯片:DS1302数字式温度传感器:DS18B20总共设有四个按键,为节约资源考虑,每个按键都有多种功能.四个按键分别标号为key1,key2,key3,key4.第一次按下key2,key3,key4都没有反应,首先按下key1键可选择指针位置,key2键为加键,key3为减键,key4键为闹钟设置清零键.操作简单,按键灵活.整点报时功能,可以按下key4键终止报警.系统设计框图:系统硬件需求介绍:STC89C52单片机一片,DS1302实时时钟芯片一个,DS18B20数字式温度传感器一个,+5V无源蜂鸣器一个,12MHZ、32KHZ晶振各一个,多个按键和开关,常用电容电阻,连接线,三极管,二极管若干,滑动变阻器一个,+3V纽扣电池一个.三、实施方案:1、单片机核心控制模块:核心控制器件选用STC89C52单片机.STC89C52单片机为40管脚双列直插芯片,它是一种高性能,低功耗地8位CMOS微处理器芯片,市场应用最多.而且价格便宜,控制方便,便于应用有4个I/O口分别为P1,P2,P3,P4.其中每一个管脚都能做独立地输入输出管脚,它地第9脚位复位管脚,接上电容和上拉电阻再带个开关构成复位电路.18,19管脚接外部晶振和两个微调电容构成外部晶振电路.单片机,复位电路,晶振,5V电源构成单片机最小系统.其中与AT89C52单片机管脚连接如下图:2、实时时钟电路模块:DS1302引脚排列:如下图引脚说明:1)1脚,Vcc2:后备电源,此设计中接+3V纽扣电池;8脚,VCC1:主电源,接+5V.在主电源关闭地情况下,也能保持时钟地连续运行.DS1302由Vcc1或Vcc2两者中地较大者供电.当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电.当Vcc2小于Vcc1时,DS1302由Vcc1供电.2)X1、X2即2脚3脚:振荡源,外接32.768kHz晶振.3)4脚END,接地端.4)5脚RST:复位/片选线,通过把RST输入驱动置高电平来启动所有地数据传送.RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据地传送手段.当RST为高电平时,所有地数据传送被初始化,允许对DS1302进行操作.如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态.上电运行时,在Vcc>2.0V之前,RST必须保持低电平.只有在SCLK为低电平时,才能将RST置为高电平.5)I/O为串行数据输入输出端(双向).6)SCLK为时钟输入端.**特别注意:5,6,7脚在硬件电路实现中,必须接上拉电阻,接+5V.3、DS18B20 工作模块: DS18B20 地温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强.其一个工作周期可分为两个部分,即温度检测和数据处理.DS18B20 地主要特征:全数字温度转换及输出.先进地单总线数据通信.最高 12 位分辨率,精度可达土 0.5摄氏度.12 位分辨率时地最大工作周期为 750 毫秒.可选择寄生工作方式.检测温度范围为–55°C ~+125°C (–67°F ~+257°F)内置 EEPROM,限温报警功能.64 位光刻 ROM,内置产品序列号,方便多机挂接.多样封装形式,适应不同硬件系统.4、液晶显示模块:1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,本设计采用16列*2行地字符型LCD1602带背光地液晶显示屏.引脚接口说明:第1脚:VSS为地电源.第2脚:VDD接5V正电源.第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K地电位器调整对比度.第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器.第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作.当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据.第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令.第7~14脚:D0~D7为8位双向数据线.第15脚:背光源正极.第16脚:背光源负极.5、蜂鸣器电路模块本实验设计中蜂鸣器用CS8050三极管驱动,蜂鸣器用5V地无源蜂鸣器,并接一个发光二极管作为指示灯,同时在负极串接一个限流电阻,数据端口接P3^7.四、Proteus仿真原理总框图:五、硬件电路实现:六、源程序:Shuzizhong.c#include <reg51.h>#include"ds18b20.h"#define uchar unsigned char#define uint unsigned intuchar shi,fen,miao,ringshi,ringfen,nian,yue,ri,week,temp,count,m。
数字开发与实践课程设计题目:用DS1302与LCD1602设计可调式电子日历时钟班级:姓名:学号:学院:年月日用DS1302与LCD1602设计的可调式电子日历时钟一、总体设计1.1、设计目的为巩固所学的单片机知识,把所学理论运用到实践中,用LCD1602与DS1302 设计可调式电子日历时钟。
1.2、设计要求(1)显示:年、月、日、时、分、秒和星期;(2)设置年、月、日、时、分、秒和星期的初始状态;(3)能够用4个按键调整日历时钟的年、月、日、时、分、秒和星期;完成可调式电子日历时钟的硬件和软件的设计,包括单片机的相关内容;日历时钟模块的设计,液晶显示模块的设计,按键模块的设计。
控制程序的编写等。
备注:本程序另外添加了每到上午8:10和下午2:10的闹钟提醒功能。
1.3、系统基本方案选择和论证1.3.1、单片机芯片的选择方案方案一:采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。
方案二:采用STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
但造价较高。
1.3.2 、显示模块选择方案和论证:方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用显示数字显得太浪费,且价格也相对较高。
所以不用此种作为显示。
方案二:采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字。
所以也不用此种作为显示。
方案三:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,且视觉效果较好,外形美观。
物理与电子科学学院电子电工实验基于DS1302多功能数字时钟--万年历实验报告实验名称:基于DS1302多功能数字钟实验日期: 2014年 01 月 05 日专业:电子信息工程姓名:刘斌班级:物电 1105 班学号: 2020112030560一、设计理念:电子万年历是一个应用超级普遍的有效日常计时工具,带有显示温度,显示世纪,年,月,日,礼拜,时,分,秒和按键可调时刻及其按键设置闹钟的功能,同时具有月末自动更新,闰年补偿功能,整点报时等多种功能。
环境温度检测系统在日常生活和工业应用超级普遍,能实时搜集周围的温度信息进行显示。
此系统是基于STC89C52单片机设计的,包括液晶显示模块,DS1302实不时钟模块,DS18B20温度搜集模块,键盘扫描模块,蜂鸣器报警模块。
STC89C52作为操纵核心,具有功耗低,功能强等特点,电压可选3到5V电源供电。
显示模块采纳1602液晶动态显示,相对数码管而言经济有效,占用空间小,关于显示数字、字母最为适合,而且与单片机连线简单,占用IO口相对较少。
实不时钟芯片DS1302是一款经济实惠功能壮大的较新型产品,该器件提供RTC/日历,可外加器件实现按时闹钟等功能,若是检测到主电源故障,该器件可自动切换到备用电源供电,能够保证在断电情形下精准走时,计时。
温度检测显示模块采纳数字式温度传感器DS18B20,该芯片具有精度高,测量范围广等优势,易与单片机连接,模块电路组成简单并同时具有温度报警功能。
关键词:STC89C52,DS1302,DS18B20,1602液晶显示,电子万年历,搜集设备周围环境温度、整点报时,闹钟时分通过按键设置,时、分、秒、年、月、日、礼拜通过按键进行调剂校准……二、设计思路:核心操纵体:STC89C52单片机实不时钟芯片:DS1302数字式温度传感器:DS18B20总共设有四个按键,为节约资源考虑,每一个按键都有多种功能。
四个按键别离标号为key1,key2,key3,key4。
龙源期刊网 http://www.qikan.com.cn
基于DS1302的数码管时钟电路设计
作者:杨占军
来源:《电子世界》2005年第09期
LED数码管时钟电路采用24h计时方式,时、分、秒用六位数码管显示,其中小时、分、
秒之间用小数点分开。 该电路采用AT89C52单片机和DS1302实时时钟芯片,使用5V电源进
行供电,使用两个按键进行调时,调整过程中被调节的分钟或时钟将进入闪亮状态,看上去非
常直观,另外,本设计还具有快速调时功能,当按键一直被按下时,便进入快速调时状态。由
于本时钟电路的计时是由芯片DS1302来完成的,计时准确 ,单片机通过串行通信来控制
DS1302工作,同时进行键盘和显示的控制。
单片机应用课程设计报告(2012~2013学年第2学期)设计题目:基于DS1302电子时钟的设计班别:姓名:指导教师:时间:目录1 设计任务 (3)2 系统总体方案设计 (3)2.1各个模块方案论证 (3)2.1.1 时钟芯片的选择 (3)2.1.2 显示器的选择 (3)2.2总体方案设计 (4)3 硬件电路设计 (4)3.1单片机最小系统 (4)3.21302时钟电路 (5)3.3按键调时电路 (5)4 系统软件设计 (6)4.1主程序流程图 (6)4.2子程序流程图 (7)4.2.1 DS1302子程序流程图 (7)4.2.2 1602子程序流程图 (8)4.3按键校正调时程序 (8)5 实物调试 (9)5.1实物性能分析 (9)5.2总结 (12)附录1 (14)(1)系统总电路图 (14)(2)系统仿真图 (14)附录2 (16)部分程序清单 (16)1 设计任务基本要求:采用DS1302时钟芯片与单片机STC89C52相结合设计电子时钟来显示出实时年、月、日、时、分、秒等时间,并且可以通过按键进行时间调整。
2 系统总体方案设计2.1 各个模块方案论证2.1.1 时钟芯片的选择由于设计的是电子时钟,而单片机STC89C52自带计时功能,利用单片机实现数据的显示和调整是可行的,采用单片机计时,利用它的一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。
这样就实现了直接用单片机来实现电子万年历设计。
用单片机来实现电子万年历设计,无须外接其他芯片,充分利用了单片机的资源。
但是精度不够高,误差较大,掉电后丢失所有数据,软件编程较复杂。
在以单片机为核心构成的装置中,经常需要一个实时的时钟和日历,以便对一些实时发生事件记录时给予时标,实时时钟芯片便可起到这一作用。
利用单片机进行控制,采用DS1302作为实时时钟芯片,其三线接口SCLK、I/O、/RST与单片机进行同步通信,外加掉电存储电路、显示电路、键盘电路,即构成一个基本的电子万年历系统。
目录摘要 (2)1 引言 (3)2 设计方案与要求 (4)2.1 功能要求 (4)2.2 系统基本方案选择和论证 (4)2.2.1 单片机芯片的选择和论证 (4)2.2.2 显示模块的选择和论证 (5)2.2.3 时钟芯片的选择和论证 (5)2.3 电路设计最终方案决定 (5)2.4 各硬件基本原理及介绍 (6)2.4.1 AT89C51单片机原理及介绍 (6)2.4.2 LED数码管显示原理及介绍 (6)2.4.3 DS1302原理及介绍 (7)3 硬件设计部分 (8)3.1 电路设计框图 (8)3.2 系统硬件概述 (8)3.3 主要单元电路的设计 (8)3.3.1 单片机主控制模块的设计 (8)3.3.2 时钟电路DS1302的设计 (10)3.3.3 显示模块的设计 (11)3.3.4 锁存器模块的设计 (12)4 软件设计部分 (13)4.1 软件设计概述 (13)4.2 Keil C51和Proteus介绍 (13)4.2.1 Keil C51的介绍 (13)4.2.2 Proteus的介绍 (13)4.3 整体设计 (14)5 结束语 (17)基于DS1302与数码管设计的电子表摘要单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子产品等,这些都离不开单片机。
单片机是将CPU、RAM、ROM、定时器、计数器和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上,而51系列单片机是各单片机中最为典型和最有代表性的一种。
本文通过对一个基于DS1302与数码管的电子表的设计,从而达到学习、了解单片机相关指令在各方面的应用。
系统由主控制器AT89C51、实时钟电路DS1302、显示电路组成,能实现时钟显示的功能,能进行时、分、秒的显示。
基于DS1302的可调时钟程序设计对DS1302的操作一般只有两种:读数据和写数据读数据即读出芯片RAM中的日期,时间等信息,写数据即修改这些信息。
数据的读写是以字节为单位操作的,读操作函数要完成的功能便是传入一个一字节表示特定的地址,函数返回该地址RAM中一字节或多字节的数据。
写操作函数需要传入两个参数:地址和要写的数据;函数将要写的一字节数据写入给定的地址。
对于同一个内容,读和写通过地址中一个标志位来区分,因此表现出来就是读和写的地址不一样,这样芯片通过地址来区分你是要还是要写;例如读秒的地址是0x81,而写秒的地址是0x80;////////////////////////////////////////////////////////////////////*名称:单片机读取DS1302时钟芯片,带调整功能//* ////////////////////////////////////////////////////////////////////*/#include#define uchar unsigned char#define uint unsigned int#define xiEMIao 0x80#define xiefen 0x82#define xieshi 0x84#define xieri 0x86#define xieyue 0x88#define xiezhou 0x8a#define xienian 0x8c#define dumiao 0x81#define dufen 0x83#define dushi 0x85#define duri 0x87。
数字开发与实践课程设计题目:用DS1302与LCD1602设计可调式电子日历时钟班级:姓名:学号:学院:二O一二年六月五日用DS1302与LCD1602设计的可调式电子日历时钟一、总体设计1.1、设计目的为巩固所学的单片机知识,把所学理论运用到实践中,用LCD1602与DS1302 设计可调式电子日历时钟。
1.2、设计要求(1)显示:年、月、日、时、分、秒和星期;(2)设置年、月、日、时、分、秒和星期的初始状态;(3)能够用4个按键调整日历时钟的年、月、日、时、分、秒和星期;完成可调式电子日历时钟的硬件和软件的设计,包括单片机的相关内容;日历时钟模块的设计,液晶显示模块的设计,按键模块的设计。
控制程序的编写等。
备注:本程序另外添加了每到上午8:10和下午2:10的闹钟提醒功能。
1.3、系统基本方案选择和论证1.3.1、单片机芯片的选择方案方案一:采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。
方案二:采用STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
但造价较高。
1.3.2 、显示模块选择方案和论证:方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用显示数字显得太浪费,且价格也相对较高。
所以不用此种作为显示。
方案二:采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字。
所以也不用此种作为显示。
方案三:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,且视觉效果较好,外形美观。
作者 张小波 1 学习情境2-可调式数字钟 之 基于DS1302与数码管设计的可调数字钟 ☆ 点名,复习 1、 定时器的工作方式有哪些?如何对定时器进行初始化。 2、 数码管动态显示技术的原理? ☆ 新课讲授 2.2 基于DS1302与数码管设计的可调数字钟 前面我们用定时器产生1秒的时间,从而也设计出了可以调节数字钟,但用这种方法设计出来的电子钟不够准确。这节课我们用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路DS1302 ,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。同时,我们还是用数码管作为显示时间的硬件。 2.2.1 DS1302芯片技术资料 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 作者 张小波
2 图 1 DS1302引脚
图 2 DS1302内部结构 1、引脚功能及结构
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK始终是输入端。 2 、DS1302的寄存器和控制命令 作者 张小波 3 对DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM,当为0时,表示AM。在24小时模式时,位5是第二个10小时位。 秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。 控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。 日历、时间寄存器及控制字如表1所示: 表1日历、时钟寄存器与控制字对照表
寄存器名称 7 6 5 4 3 2 1 0 1 RAM/CK A4 A3 A2 A1 A0 RD/W 秒寄存器 1 0 0 0 0 0 0 0/1 分寄存器 1 0 0 0 0 0 1 0/1 小时寄存器 1 0 0 0 0 1 0 0/1 日寄存器 1 0 0 0 0 1 1 0/1 月寄存器 1 0 0 0 1 0 0 0/1 星期寄存器 1 0 0 0 1 0 1 0/1 年寄存器 1 0 0 0 1 1 0 0/1 写保护寄存器 1 0 0 0 1 1 1 0/1 慢充电寄存器 1 0 0 1 0 0 0 0/1 时钟突发寄存器 1 0 1 0 1 1 1 0/1
最后一位RD/W为“0”时表示进行写操作,为“1”时表示读操作。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。DS1302 作者 张小波 4 内部的RAM分为两类,一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制 字为COH~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
表2 DS1302内部主要寄存器分布表 寄存器名称 命令字 取值范围 寄存器定义 写 读 7 6 5 4 3 2 1 0
秒寄存器 80H 81H 00-59 CH 10 SEC SEC 分寄存器 82H 83H 00-59 0 10 MIN MIN 小时寄存器 84H 85H 01-12或00-23 12/24 0 10 HR HR A/P
日寄存器 86H 87H 01-28,29,30,31 0 10 DATE DATE 月寄存器 88H 89H 01-12 0 0 0 10M MONTH 星期寄存器 8AH 8BH 01-07 0 0 0 0 DAY 年寄存器 8CH 8DH 00-99 10year year 写保护寄存器 8EH 8FH WP 0 0 0 0 0 0 0 慢充电寄存器 90H 91H TCS TCS TCS TCS DS DS DS DS
我们现在已经知道了控制寄存器和RAM的逻辑地址,接着就需要知道如何通过外部接
口来访问这些资源。单片机是通过简单的同步串行通讯与DS1302通讯的,每次通讯都必须由单片机发起,无论是读还是写操作,单片机都必须先向DS1302写入一个命令帧,这个帧的格式如图3所示,最高位BIT7固定为1,BIT6决定操作是针对RAM还是时钟寄存器,接着的5个BIT是RAM或时钟寄存器在DS1302的内部地址,最后一个BIT表示这次操作是读操作抑或是写操作。 作者 张小波 5 DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字。DS1302 的控制字如图3所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4~A0)指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
图3命令字节格式 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入
从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 数据读写时序如图4。
图 4-1 单字节读时序 图 4-2 单字节写时序 物理上,DS1302的通讯接口由3个口线组成,即RST,SCLK,I/O。其中RST从低电
平变成高电平启动一次数据传输过程,SCLK是时钟线,I/O是数据线。具体的读写时序参考 作者 张小波 6 图4,但是请注意,无论是哪种通讯类型的串行接口,都是对时钟信号敏感的,而且一般数据写入有效是在上升沿,读出有效是在下降沿(DS1302正是如此的,但是在芯片手册里没有明确说明),如果不是特别确定,则把程序设计成这样:平时SCLK保持低电平,在时钟变动前设置数据,在时钟变动后读取数据,即数据操作总是在SCLK保持为低电平的时候,相邻的操作之间间隔有一个上升沿和一个下降沿。 3 调试中问题说明 (1) DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入), D0=1,指定读操作(输出)。 (2) 在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。 (3) 要特别说明的是备用电源B1,可以用电池或者超级电容器(0.1F以上)。虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100 μF就可以保证1小时的正常走时。DS1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。 2.2.2 硬件电路设计 硬件设计时使用了DS1302,电路结构简单,具体如下图所示: