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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(单片机电子时钟1602显示ds12c887芯片资料Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机电子时钟1602显示ds12c887芯片资料Word下载.docx

1、059003B00591秒闹铃2分3分闹铃412小时模式112010C AM818C PM0112 AM8192 PM24小时模式023001700235时闹铃,12小时制时闹铃,24小时制6星期(星期日=1)1701077日131011F01318月010C01129年0990063009910控制寄存器A11控制寄存器B12控制寄存器C13控制寄存器D50世纪NA19,203.液晶LCD1602工作原理:LCD指令表指令功能控制线数据线RSR/WD7D6D5D4D3D2D1D0清除屏幕清除屏幕,并把光标移至左上角光标回到原点x光标移至左上角,显示内容不变设定进入模式I/DSI/D=1:地址

2、递增,I/D=0:地址递减 S=1:开启显示屏,S=0:关闭显示屏显示器开关DCBD=1:开启显示幕 C=1:开启光标 B=1:光标所在位置的字符闪烁移位方式S/CR/LS/C=0、R/L=0:光标左移;S/C=0、R/L=1:光标右移 S/C=1、R/L=0:字符和光标左移;S/C=1、R/L=1:字符和光标右移功能设定DLNFDL=1:数据长度为8位,DL=0:数据长度为4位 N=1:双列字,N=0:单列字;F=1:5x10字形,F=0:5x7字形CG RAM地址设定CG RAM地址将所要操作的CG RAM地址放入地址计数器DD RAM地址设定DD RAM地址将所要操作的DD RAM地址放

3、入地址计数器忙碌标志位BFBF地址计数器内容读取地址计数器,并查询LCM是否忙碌,BF表示LCM忙碌写入数据将数据写入CG RAM或DD RAM读取数据读取CG RAM或DD RAM的数据图 10-57 1602LCD 内部显示地址 例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。 在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的

4、,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同的点阵字符图形,如图 10-58 所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是 01000001B (41H),显示时模块把地址 41H中的点阵字符图形显示出来,我们就能看到字母“A”2.2系统总体框图及设计思路电子时钟液晶1602显示人机键盘交互计时+闹钟总体设计思路:本设计利用单片机P0和P2作为并行数据输入输出口,P3.0、 P3.1、 P3.2为功能控制键

5、。其中,按键功能分别控制为时钟功能选择键,增加键和减少键。3 详细设计3.1 硬件设计1芯片及原理介绍(一)STC89C52STC89C52与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、 全静态操作:0Hz33MHz 、 三级加密程序存储器 、 32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。P1口引脚特殊功能P1.0T2(定时器T2外部输入)P3口引脚P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(

6、外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读先通)STC89C52的一些特殊功能口,如下表所示:(二)DS12C887日历时钟芯片选用DS12C887,其引脚分布如图4所示。图4 DS12C887引脚分布图DS12C887的内部结构框图如图5所示。图5 日历时钟芯片DS12C887内部结构框图由图5可知,DS12C887内部可看成由电源、日历时钟信息、寄存器和存储器,以及总线接口四部分构成,四部分配合工作,共同实现芯片的功能。7DS12C887的具体引脚功能如下:GND、VC

7、C:直流电源,其中VCC接+5V输入,GND接地,当VCC输入为+5V时,用户可以访问DS12C887内RAM中的数据,并可对其进行读、写操作;当VCC的输入小于+4.25V时,禁止用户对内部RAM进行读、写操作,此时用户不能正确获取芯片内的时间信息;当VCC的输入小于+3V时,DS12C887会自动将电源发换到内部自带的锂电池上,以保证内部的电路能够正常工作。MOT:模式选择脚,DS12C887有两种工作模式,即Motorola模式和Intel模式,当 MOT接VCC时,选用的工作模式是Motorola模式,当MOT接GND时,选用的是Intel模式。本设计选用其Intel模式,所以电路图中

8、MOT端接GND。SQW:方波输出脚,当供电电压VCC大于4.25V时,SQW脚可进行方波输出,此时用户可以通过对控制寄存器编程来得到13种方波信号的输出。AD0AD7:复用地址数据总线,该总线采用时分复用技术,在总线周期的前半部分,出现在AD0AD7上的是地址信息,可用以选通DS12C887内的RAM,总线周期的后半部分出现在AD0AD7上的数据信息。AS:地址选通输入脚,在进行读写操作时,AS的上升沿将AD0AD7上出现的地址信息锁存到DS12C887上,而下一个下降沿清除AD0AD7上的地址信息,不论是否有效,DS12C887都将执行该操作。DS/RD:数据选择或读输入脚,该引脚有两种工

9、作模式,当MOT接VCC时,选用Motorola工作模式,在这种工作模式中,每个总线周期的后一部分的DS为高电平,被称为数据选通。在读操作中,DS的上升沿使DS12C887将内部数据送往总线AD0AD7上,以供外部读取。在写操作中,DS的下降沿将使总线 AD0AD7上的数据锁存在DS12C887中;当MOT接GND时,选用Intel工作模式,在该模式中,该引脚是读允许输入脚,即Read Enable。因为本设计选用Intel工作模式,所以该引脚是读允许输入脚。R/W:读/写输入端,该管脚也有2种工作模式,当MOT接VCC时,R/W工作在Motorola模式。此时,该引脚的作用是区分进行的是读操

10、作还是写操作,当R/W为高电平时为读操作,R/W为低电平时为写操作。当MOT接GND时,该脚工作在Intel模式,此时该脚作为写允许输入,即Write Enable。CS:片选输入,低电平有效。IRQ:中断请求输入,低电平有效,该脚有效对DS12C887内的时钟、日历和RAM中的内容没有任何影响,仅对内部的控制寄存器有影响,在典型的应用中,RESET可以直接接到VCC,这样可以保证DS12C887在掉电时,其内部控制寄存器不受影响。(三)液晶LCD1602显示器1602LCD 分为带背光和不带背光两种,基控制器大部分为 HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别1602

11、LCD 主要技术参数:显示容量:162 个字符 芯片工作电压:4.55.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.954.35(WH)mm 引脚功能说明 1602LCD 采用标准的 14脚(无背光)或 16脚(带背光)接口,各引脚接口说明如表 10-13所示:编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 9 D2 数据 2 VDD 电源正极 10 D3 数据 3 VL 液晶显示偏压 11 D4 数据 4 RS 数据/命令选择 12 D5 数据 5 R/W 读/写选择 13 D6 数据 6 E 使能信号 14 D7 数据 7 D0 数据

12、15 BLA 背光源正极 8 D1 数据 16 BLK 背光源负极 表 10-13:引脚接口说明表 第 1 脚:VSS 为地电源。第 2 脚:VDD接 5V正电源。第 3 脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS和 R/W共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高

13、电平 R/W为低电平时可以写入数据。第 6 脚:E端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。第 714脚:D0D7为 8 位双向数据线。第 15脚:背光源正极。第 16脚:背光源负极。LCD寄存器的选择E功能说明写入命令寄存器写入数据寄存器读取忙碌标志及RAM地址读取RAM数据X不动作2硬件原理图Sch原理图如图所示:P0口通过连接lcd作为并行数据输入端,P2口连接DS12C887作为数据输入/输出端口,开关s1、s2、s3作为人机交互接口,时钟的控制端。其他端口功能及控制管脚将在软件设计中提及,在此不再赘述。3.2软件设计. 3.2.1程序设计思路 首先,程序启动应先

14、对单片机资源进行初始化操作,其过程包括:打开中断,对蜂鸣器标志位初始化,向ds12c887芯片写入控制字,读取芯片內相应寄存器的时间数据,并将lcd1602进行初始化,写入控制字,写入数据,完成时间日期的显示,然后进入循环中不断重复以下过程:扫描键盘,有键盘按下则执行相应的操作,没有键盘按下则检查闹钟标志位有没有被中断触发,有的话执行响铃函数,否则进行ds12c887芯片的寄存器数据读取,向lcd1602发送相应数据并显示。闹钟模块采用ds12c887的IRQ管脚在闹钟触发时产生低电平,触发外部中断1,蜂鸣器发声。3.2.2 程序流程图3.2.3 程序代码1、预定义部分/此部分定义了管脚,用到

15、的数据表,数据格式和函数声明#include /头文件#define uchar unsigned char /数据格式宏定义#define uint unsigned int /数据格式宏定义sbit rs=P35; /lcd寄存器选择sbit lcden=P34; /lcd使能端sbit s1=P30; /开关s1sbit s2=P31; /开关s2sbit s3=P32; /开关s3sbit beep=P12; /蜂鸣器sbit dscs=P14; /ds12c887片选sbit dsas=P15; / ds12c887地址选通输入脚sbit dsrw=P16; / ds12c887读/

16、写输入端sbit dsds=P17; / ds12c887数据选择或读输入脚sbit dsirq=P33; / ds12c887中断请求输入uchar count,s1num,flag,flag1; /状态变量char miao,shi,fen,nian,yue,ri,xingqi,amiao,afen,ashi; /数据变量uchar code table= 20 - -; /年月日显示格式uchar code table1= : /时间显示格式uchar code table2=MONTHUWENTHRFRISTASUN /星期表,每3位为一个uchar code table3= ALAR

17、M ON /开闹钟提示uchar code table4= ALARM OFF /关闹钟提示uchar code table5=SET ALARM PUSH /闹钟状态选择提示void write_ds(uchar,uchar); /函数声明void set_alarm(uchar,uchar,uchar);uchar read_ds(uchar);2、功能控制void delay(uint z) /延时子函数 uint x,y; for(x=z;x0;x-) for(y=110;yy-);void beezzer() /蜂鸣器发声控制函数(闹钟响铃),beep=0发声 beep=0; del

18、ay(50); beep=1; delay(100);void write_com(uchar com) /向lcd写入控制字com,根据lcd1602时序图进行操作,rs为寄存器选择 rs=0; lcden=0; P0=com; delay(5); lcden=1;void write_date(uchar date) /向lcd写入数据date,根据lcd1602时序图进行操作 rs=1; P0=date;void init() /初始化单片机 uchar num; EA=1; /开总中断 EX1=1; /允许外部中断1 IT1=1; /低电平触发 flag1=0; write_ds(0x

19、0A,0x20); /向ds12c887控制寄存器A发送初始化控制字,启动振荡器 write_ds(0x0B,0x06); /向ds12c887控制寄存器B发送初始化控制字,设定工作模式bcd,24小时制 read_ds(0x0c); /读芯片时间数据 write_com(0x38); write_com(0x0c); /初始化lcd write_com(0x06); write_com(0x01); write_com(0x80); /在第一行显示数据 for(num=0;num15;num+) write_date(tablenum); delay(5); write_com(0x80+0

20、x40); /在第二行显示数据12; write_date(table1num);void write_sfm(uchar add,uchar date) /向lcd写入时分秒数据 uchar shi,ge; /shi:待发数据十位;ge:待发数据个位 shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge);void write_nyr(uchar add,uchar date) /向lcd写入年月日数据 write_com(0x80+add);void write

21、_xingqi(uchar add,uchar date) /向lcd写入星期数据 date=(date-1)*3; /如星期一读表123个字母MON显示,星期二读456字母THU等等 write_date(table2date); write_date(table2+date);void keyscan() /键盘扫描子程序 if(flag1=1) if(s2=0) /“加”键 if(s2=0) while(!s2); flag1=0; if(s3=0) /“减”键 if(s3=0)s3); if(s1=0) /功能选择键,统计按下次数在s1num中 delay(5); if(s1=0) s1num+; flag=1; flag1=0; while(!

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

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