课程设计之万年历报告(3)

2018-10-21 10:10

7 8 9 10 11 12 13 14 15 16 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 BLA BLK 低4位三态、 双向数据总线 0位(最低位) 低4位三态、 双向数据总线 1位 低4位三态、 双向数据总线 2位 低4位三态、 双向数据总线 3位 高4位三态、 双向数据总线 4位 高4位三态、 双向数据总线 5位 高4位三态、 双向数据总线 6位 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 背光电源正极 背光 电源负极

LCD的连接图:

8

2.3.4 电路原理及说明

(1) 时钟芯片DS1302的工作原理:

DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP” 是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。

(2) DS1302的控制字节

DS1302的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出

RAM RD 1 A4 A3 A2 A1 A0

/ CK /WR 表-1 DS1302的控制字格式 (3) 数据输入输出(I/O)

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。

在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。 (4) DS1302的寄存器

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。

9

表-2 DS1302的日历、时间寄存器

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

三、系统的软件设计

3.1程序流程框图

开始 初始化 读、写日期、时间 分离日期\\时间显示值 显示子程序

日期、时间修改子程序 返回 图-A 主程序流程图

10

图-B 时间调整程序流程图

11

3.2 子程序的设计

#include } #define uchar unsigned char } #define uint unsigned int } //以下三个是LCD1602的位 void write_ds1302 (uchar addr ,uchar sbit rs=P2^4; sbit rw=P2^5; sbit E=P2^6; //时钟芯片DS1302位 sbit sclk=P1^6; sbit data_io=P1^4; sbit rst=P1^5; //三个按键 sbit s0=P3^0; sbit s1=P3^1; sbit s2=P3^2; void write_com(unsigned char com); //写指令到lcd void write_dat(unsigned char dat); //写数据到lcd uchar shi,fen,miao,month,day,week,year,qbyear=20; uchar s0num,s3num,flag,flaga,biaozhi; void scan_key();//键盘扫描函数 void delay(); void delay_ms(uint ms) { uint i,j; for (i=ms;i>0;i--) for(j=124;j>0;j--); } void delay_1s() //延迟大概1s { uint a,b; a=20;b=5000; while(a) { a--; while(b) { b--; shu)//往DS1302写数据 { uchar temp,t; rst=0; sclk=0; rst=1; temp=addr; for(t=0;t<8;t++) { if((temp&0x01)==1) { data_io=1; } else data_io=0; sclk=1; delay_ms(1); sclk=0; temp=temp>>1; } temp=shu; for(t=0;t<8;t++) { if((temp&0x01)==1) { data_io=1; } else data_io=0; sclk=1; delay_ms(1); sclk=0; temp=temp>>1; } rst=0; } uchar read_ds1302(uchar addr)//从

12

DS1302读取数据 {

uchar temp ,t; rst =0; sclk=0; rst=1;

temp=addr;

for(t=0;t<8;t++) {

if (temp&0x01) data_io=1; else

data_io=0; sclk=1; sclk=0;

temp=temp>>1; }

temp=0;

for(t=0;t<7;t++) {

if(data_io==1) {

temp=temp|0x80; }

else

temp=temp&0x7f; sclk=1; sclk=0;

temp=temp>>1; }

return temp; }

void write_com (uchar com)//LCD1602的写命令 {

课程设计之万年历报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浙江省心理健康教育自考社会心理学(二)06年01月试题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: