ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:760.63KB ,
资源ID:6990783      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6990783.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(智能万年历1.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

智能万年历1.docx

1、智能万年历11系统设计方案 21.1方案的提出 21.2系统方案介绍 21.3功能 31.4实现原理 31.5硬件框图 41.5.1显示模块 41.5.2 初始值设置模块 91.5.3闹钟及其设置模块 91.6软件流程 101.6.1编程算法思想 101.6.2程序框图 102. 系统测试 1321仿真调试 132.2硬件焊接的检测 132.3总体调试 133. 结论 144. 附录 14附1:元器件明细表 14附2:电路图图纸 15附3:程序清单 15摘要本项目针对万年历的功能性和智能性进行了设计与研究,以单片机为核心,结合了DS1302和LCD等器件,设计制作出智能型多功能万年历。该万年历

2、具有显示年月日时分秒星期、任意设置初始值和闹钟设置等功能。实现对万年历显示和调节的智能控制。本项目很好地将万年历的显示、调节和闹钟设置结合在了一起,满足了人们对万年历的基本要求。关键词:智能 单片机 DS1302 LCDAbstract The projectdesign and researchfor the calendar function and intelligence, by single chip processor asthe core, comprehensive use of DS1302 and LCD, design a kind of intelligent cale

3、ndar. Thecalendarcan display the date, the hour, the minute, the second and the week, arbitrarily set the initial value and the alarm settingfunction. The projectcan be achieved on thecalendardisplay and adjustmentof intelligent control. The project will be good tocalendardisplay, controlandalarm se

4、ttingstogether,meet the basic requirement ofthe calendar. Keywords: Intelligence MUC DS1302 LCD1系统设计方案1.1方案的提出 万年历是我国古代传说中最古老的一部太阳历。为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。而现在所使用的万年历,实际上就是记录一定时间范围内的具体阳历或阴历的日期的年历,方便有需要的人查询使用,与原始历法并无直接联系。万年历已在各个平台有相关的应用。现在人们的生活几乎离不开万年历。但是,普通的纸质万年历比较不方便,需要人们不断的修正。基于这种情况,我们想到了运用普通器

5、件,设计智能万年历。它具有不在人为干预的情况下正常显示时间,任意设置初始时间和闹钟的功能,方便人们的生活。1.2系统方案介绍本项目的设计思想来源于生活,所具有的功能也是为万年历使用的方便性及智能化而设置。针对目前普通万年历存在的使用不方便,功能单一等问题进行系统分析与研究,以单片机AT89C51为控制核心,用DS1302作为万年历的“储存器件”,用LCD作为显示器件,用按键作为设置元件,主要利用5V电源供电。综合运用传感技术,光检测技术,实现万年历的正常显示,初始时间设置和闹钟设置等功能。当用户在使用万年历时,在初始设置后,不需人为干涉,就能随时间正常显示。人性化设计,添加用户初始值设置和闹钟

6、功能,让用户使用更加方便。本项目的创新点是:第一,智能。以DS1302作为时间的储存元件,实现时间自动显示,达到智能控制的目的;按键时间初始设置,而且外加闹钟功能,也能进行初始化设置。第二,多功能。此设计不仅能实现时间的正常显示,时间初始化,还具有闹钟,满足人们对多功能的需求。1.3功能(1) 时间的正常显示(2)时间的初始值设置(3)闹钟及其初始值设置1.4实现原理1.4.1时间的正常显示通过DS1302确定的地址读取年月日时分秒星期,然后送给LCD确定的地址显示,完成时间的自动显示。1.4.2时间的初始值设置设置两个按键,一个按键用于在年月日时分秒星期间选择切换,另一个按键用于数值加一。1

7、.4.3闹钟及其初始值设置通过三极管驱动蜂鸣器完成闹钟到点响的功能,通过两个按键完成闹钟初始值设置,一个按键用于由正常显示切换到闹钟设置,另一个按键用于由闹钟设置切换到正常显示。1.5硬件框图系统硬件框图如图(1)所示单片机DS1302显示模块蜂鸣器Lcd1602闹钟及其设置模块按键初始值设置模块按键图(1)系统硬件框图1.5.1显示模块(1)DS1302DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个

8、月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。各引脚的功能为:Vcc1:主电源;Vcc2:备份电源。当Vcc2Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2Vcc1时,由Vcc1向DS1302供电。 SCLK:串行时钟输入,控制数据的输入与输出;I/O:三线接口时的双向数据线;CE:

9、输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。DS1302有下列几组寄存器:DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h8Dh,写时80h8Ch),存放的数据格式为BCD码形式,如图3所示。图3 DS1302有关日历、时间的寄存器小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。秒寄存器(81h、80h)的

10、位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。(2)LCD13021602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器

11、、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第1516脚:空脚指令图它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,

12、低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符指令7:字符发生器RAM地址设置指令8:DDRAM地址设置指令9:读忙信号和光标地址BF:为忙标志位,高

13、电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据指令11:读数据液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。1.5.2 初始值设置模块(1)按键四个按键,一个用于设置项的选择,一个用于数值加一,一个用于将正常显示状态切换到闹钟设置状态,另一个键用于将闹钟显示状态切换到正常显示状态。1.5.3闹钟及其设置模块(1)蜂鸣器蜂鸣器要外加9012作为驱动,使其定点提醒。1.6软件流程1.6.1编程算法思想程序采用模块化设计思想。以主程序为核心设置功能模块子程序,简化了设计结构。运行过程中通过主程序调用各功

14、能模块子程序。该系统的工作软件主要完成以下功能:单片机不断读取DS1302的数值送给LCD显示,并通过按键设置时间和闹钟的初始值,达到控制时间的目的,实现智能万年历的目的。1.6.2程序框图主程序流程图中断服务流程图2. 系统测试21仿真调试仿真图通过软件仿真验证程序的正确性,并对软件程序进行优化,进而完成程序的优化。2.2硬件焊接的检测在电路的焊接过程中,不断检测焊接的正确性,并用万用表检测焊接点之间是否导通。2.3总体调试将程序下载到硬件单片机中,检测是否可用,当出现问题时,寻找和问题相关的硬件,进而一步步解决问题。3. 结论本项目本着智能,多功能,人性化的设计理念,智能地实现了万年历的显

15、示、设置和闹钟功能,项目达到了初定的目标。4. 附录附1:元器件明细表序号元器件名称元器件型号数量1单片机STC89S5112时钟芯片DS130213显示芯片160214零散元件电阻电容5按键56蜂鸣器17放大器901218变位器1031附2:电路图图纸系统总电路原理图附3:程序清单#include#include#define uchar unsigned char#define uint unsigned int#define DEC2BCD(X) (X/10)4)*10 + (X&0x0F) /用于将BCD码转成十进制的宏void write_com(uchar com);void wr

16、ite_data(uchar dat);void init();void write_time(uchar add,uchar dat);void write_riqi(uchar add,uchar dat);void write_xingqi(uchar dat);void write_byte(uchar dat);uchar read_byte();void s_write(uchar add,uchar dat);uchar s_read(uchar add);void set_ds1302(uchar *pClock);void rw_ds1302();void keyscan()

17、;uchar data table=2009-01-01 Mon.;uchar data table1= 00:00:00;uchar code xingqi=Mon. Tue. Wed. Thu. Fri. Sat. Sun.;uchar code time=0x00,0x00,0x00,0x01,0x01,0x01,0x09;/sec,min,hour,date,month,week,yearuchar data time1=0x00,0x00,0x00,0x01,0x01,0x01,0x09;/sec,min,hour,date,month,week,yearuchar hour,min

18、,sec,week,day,month,year,num,sfcount=0,flag;uchar clock_sec = 30,clock_min,clock_hour ;uchar display_flag ; /0 显示当前时间 1 显示闹钟时间 sbit ds1302_sclk=P34;sbit ds1302_io=P35;sbit ds1302_ce=P36; sbit acc0=ACC0;sbit acc7=ACC7;sbit lcdrs=P15; /端口定义sbit lcdrw=P16;sbit lcde=P17;sbit beep=P37;sbit functionk1=P10

19、; /选择设置的项sbit sup=P11; /key2sbit key3=P12; /加1sbit key4=P14;void delay(uint a);void keyscan();void choose();void beepp() ;void main() /main函数 s_write(0x8e,0x80); init(); P0=0xff; while(1) keyscan(); choose(); beepp() ; if(flag=0) rw_ds1302(); void beepp() if( hour = clock_hour) & ( min = clock_min )

20、 & ( sec = clock_sec) ) beep=0 ; delay(100); if( hour != clock_hour) | ( min != clock_min ) | ( sec != clock_sec) ) beep=1;void choose() /控制显示的内容 if( key3 = 0) delay(2); if( key3 =0 ) display_flag = 1 ; beep=1; if( key4 = 0 ) delay(2); if( key4 =0 ) display_flag = 0 ; void write_byte(uchar dat) /写入一

21、个字节 ds1302 uchar i; ACC=dat; for(i=8;i0;i-) ds1302_io=acc0; ds1302_sclk=1; ds1302_sclk=0; ACC=ACC1; uchar read_byte() /读出一个字节 ds1302 uchar i; for(i=8;i0;i-) ACC=ACC1; acc7=ds1302_io; ds1302_sclk=1; ds1302_sclk=0; return(ACC); void s_write(uchar add,uchar dat)/单字节写入子函数 ds1302 写入确定地址 确定内容 ds1302_ce=0;

22、 ds1302_sclk=0; ds1302_ce=1; write_byte(add); write_byte(dat); ds1302_sclk=1; ds1302_ce=0; uchar s_read(uchar add) /单字节读出子函数 ds1302 写入地址 读出数据 十进制 uchar temp; ds1302_ce=0; ds1302_sclk=0; ds1302_ce=1; write_byte(add); temp=read_byte(); ds1302_sclk=1; ds1302_ce=0; temp=BCD2DEC(temp); return(temp); void

23、 set_ds1302(uchar *pClock) /设置ds1302的时间 将时间写入1302 uchar i; uchar add=0x80;s_write(0x8e,0x00); /能够写入 ds1302 for(i=7;i0;i-) s_write(add,*pClock); /将时间写入1302 pClock+; add+=2; s_write(0x8e,0x80); /禁止写入1302void rw_ds1302() /读写ds1302if( display_flag=0 ) sec=s_read(0x81); /读出秒 write_time(8,sec); /写入时间子函数 a

24、dd=0x80 lcd write_com(0x80+0x40+9); min=s_read(0x83); /读出分 write_time(5,min); write_com(0x80+0x40+6); hour=s_read(0x85); write_time(2,hour); write_com(0x80+0x40+3); week=s_read(0x8b); write_xingqi(week); write_com(0x80+0x0d); day=s_read(0x87); write_riqi(8,day); write_com(0x80+9); month=s_read(0x89)

25、; write_riqi(5,month); write_com(0x80+6); year=s_read(0x8d); /读出年 write_riqi(2,year); write_com(0x80+3);if( display_flag=1 )/ sec=clock_sec; /读出秒 write_time(8,clock_sec); /写入时间子函数 add=0x80 lcd write_com(0x80+0x40+9); / min=clock_min; /读出分 write_time(5,clock_min); write_com(0x80+0x40+6); / hour=clock

26、_hour; write_time(2,clock_hour); write_com(0x80+0x40+3); week=s_read(0x8b); write_xingqi(week); write_com(0x80+0x0d); day=s_read(0x87); write_riqi(8,day); write_com(0x80+9); month=s_read(0x89); write_riqi(5,month); write_com(0x80+6); year=s_read(0x8d); /读出年 write_riqi(2,year); write_com(0x80+3); voi

27、d write_com(uchar com) /写命令子函数 lcd lcde=0; lcdrw=0; lcdrs=0; delay(1); lcde=1; delay(1); P2=com; delay(1); lcde=0;void write_data(uchar dat) /写数据子函数 lcd lcde=0; lcdrw=0; lcdrs=1; delay(1); lcde=1; delay(1); P2=dat; delay(1); lcde=0;void init() /LCD1602初始化 s_write(0x90,0xa5); set_ds1302(time); delay(

28、5); write_com(0x38); delay(100); write_com(0x38); / 设置显示模式:8位2行5x7点阵 delay(50); write_com(0x38); delay(10); write_com(0x08); /关 write_com(0x01); /清屏 write_com(0x0c); / 开 0x08关 write_com(0x80); /能写 for(num=0;num15;num+) /在第一行显示“2009-01-01 Mon.” write_data(tablenum); write_com(0x80+0x40); for(num=0;num10;num+) /在第二行末尾显示“ 00:00:00” write_data(table1num); void write_time(uchar add,uchar dat) /写入时间子函数 lcd uchar shi,ge; shi=dat/10; ge=dat%10; write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge); void write_riqi(uchar add,uchar dat) /写入日期子函数 lcd uchar

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1