16x64点阵屏时钟显示.doc

上传人:聆听****声音 文档编号:1989835 上传时间:2023-05-02 格式:DOC 页数:10 大小:41KB
下载 相关 举报
16x64点阵屏时钟显示.doc_第1页
第1页 / 共10页
16x64点阵屏时钟显示.doc_第2页
第2页 / 共10页
16x64点阵屏时钟显示.doc_第3页
第3页 / 共10页
16x64点阵屏时钟显示.doc_第4页
第4页 / 共10页
16x64点阵屏时钟显示.doc_第5页
第5页 / 共10页
16x64点阵屏时钟显示.doc_第6页
第6页 / 共10页
16x64点阵屏时钟显示.doc_第7页
第7页 / 共10页
16x64点阵屏时钟显示.doc_第8页
第8页 / 共10页
16x64点阵屏时钟显示.doc_第9页
第9页 / 共10页
16x64点阵屏时钟显示.doc_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

16x64点阵屏时钟显示.doc

《16x64点阵屏时钟显示.doc》由会员分享,可在线阅读,更多相关《16x64点阵屏时钟显示.doc(10页珍藏版)》请在冰点文库上搜索。

16x64点阵屏时钟显示.doc

Main.c

/*

--------------------------------------------------------------------------------

*实验名 :

DS1302时钟显示试验

*实验说明:

点阵屏显示时钟信息

*注意 :

*******************************************************************************/

#include

#include"ds1302.h"

#defineucharunsignedchar

#defineSPEED1

#definesudu100

intnum;

uchara;

ucharzi;

intxh;

sbitR=P0^4;

sbitSTB=P0^5;

sbitCLK=P0^6;

sbitOE=P0^7;

charcodeSHU[][16];

charbuff[8];

voidWriteByte(chardat)//写一个字节数据

{

chari;

for(i=0;i<8;i++)

{

//第一种写发

dat=dat>>1;

R=CY;

CLK=0;

CLK=1;

//第二种写法

// R=dat&0x01;

// CLK=0;

// CLK=1;

// dat=dat>>1;

}

}

voidOUT595(void)//写一个字节数据

{

STB=1;

STB=0;

}

voidmain()//主函数

{

Ds1302Init();

OE=0;

while

(1)

{

Ds1302ReadTime();

for(num=0;num<16;num++)

{

WriteByte(SHU[TIME[2]/16][num]); //显示数字时H

WriteByte(SHU[TIME[2]&0x0f][num]); //显示数字时L

WriteByte(SHU[10][num]); //显示:

WriteByte(SHU[TIME[1]/16][num]); //显示数字分H

WriteByte(SHU[TIME[1]&0x0f][num]); //显示数字分L

WriteByte(SHU[10][num]); //显示:

WriteByte(SHU[TIME[0]/16][num]); //显示数字秒H

WriteByte(SHU[TIME[0]&0x0f][num]); //显示数字秒L

P1=num;

OUT595();

}

}

}

charcodeSHU[][16]=

{

0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,0xFF,/*"0",0*/

0xFF,0xFF,0xFF,0xF7,0xF1,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xC1,0xFF,0xFF,0xFF,/*"1",1*/

0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBF,0xDF,0xEF,0xF7,0xFB,0xBD,0x81,0xFF,0xFF,0xFF,/*"2",2*/

0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xDF,0xE7,0xDF,0xBF,0xBD,0xDD,0xE3,0xFF,0xFF,0xFF,/*"3",3*/

0xFF,0xFF,0xFF,0xDF,0xC7,0xD7,0xDB,0xDD,0xDD,0x81,0xDF,0xDF,0x87,0xFF,0xFF,0xFF,/*"4",4*/

0xFF,0xFF,0xFF,0x81,0xFD,0xFD,0xE5,0xD9,0xBF,0xBF,0xBD,0xDD,0xE3,0xFF,0xFF,0xFF,/*"5",5*/

0xFF,0xFF,0xFF,0xC7,0xDB,0xFD,0xFD,0xE5,0x99,0xBD,0xBD,0xDB,0xE3,0xFF,0xFF,0xFF,/*"6",6*/

0xFF,0xFF,0xFF,0x81,0xDD,0xDD,0xEF,0xEF,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,0xFF,/*"7",7*/

0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xC3,0xCB,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,0xFF,/*"8",8*/

0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0x99,0xA7,0xBF,0xBF,0xDB,0xE3,0xFF,0xFF,0xFF,/*"9",9*/

0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,/*":

",10*/

0xf1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"",11*/

};

Ds1302.c

#include"ds1302.h"

//---DS1302写入和读取时分秒的地址命令---//

//---秒分时日月周年最低位读写位;-------//

ucharcodeREAD_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};

ucharcodeWRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};

//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。

---//

//---存储顺序是秒分时日月周年,存储格式是用BCD码---//

ucharTIME[7]={0,0,0x12,0x01,0x01,0x02,0x13};

/*******************************************************************************

*函数名:

Ds1302Write

*函数功能 :

向DS1302命令(地址+数据)

*输入:

addr,dat

*输出:

*******************************************************************************/

voidDs1302Write(ucharaddr,uchardat)

{

ucharn;

RST=0;

_nop_();

SCLK=0;//先将SCLK置低电平。

_nop_();

RST=1;//然后将RST(CE)置高电平。

_nop_();

for(n=0;n<8;n++)//开始传送八位地址命令

{

DSIO=addr&0x01;//数据从低位开始传送

addr>>=1;

SCLK=1;//数据在上升沿时,DS1302读取数据

_nop_();

SCLK=0;

_nop_();

}

for(n=0;n<8;n++)//写入8位数据

{

DSIO=dat&0x01;

dat>>=1;

SCLK=1;//数据在上升沿时,DS1302读取数据

_nop_();

SCLK=0;

_nop_();

}

RST=0;//传送数据结束

_nop_();

}

/*******************************************************************************

*函数名:

Ds1302Read

*函数功能 :

读取一个地址的数据

*输入:

addr

*输出:

dat

*******************************************************************************/

ucharDs1302Read(ucharaddr)

{

ucharn,dat,dat1;

RST=0;

_nop_();

SCLK=0;//先将SCLK置低电平。

_nop_();

RST=1;//然后将RST(CE)置高电平。

_nop_();

for(n=0;n<8;n++)//开始传送八位地址命令

{

DSIO=addr&0x01;//数据从低位开始传送

addr>>=1;

SCLK=1;//数据在上升沿时,DS1302读取数据

_nop_();

SCLK=0;//DS1302下降沿时,放置数据

_nop_();

}

_nop_();

for(n=0;n<8;n++)//读取8位数据

{

dat1=DSIO;//从最低位开始接收

dat=(dat>>1)|(dat1<<7);

SCLK=1;

_nop_();

SCLK=0;//DS1302下降沿时,放置数据

_nop_();

}

RST=0;

_nop_(); //以下为DS1302复位的稳定时间,必须的。

SCLK=1;

_nop_();

DSIO=0;

_nop_();

DSIO=1;

_nop_();

returndat;

}

/*******************************************************************************

*函数名:

Ds1302Init

*函数功能 :

初始化DS1302.

*输入:

*输出:

*******************************************************************************/

voidDs1302Init()

{

ucharn;

Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能

for(n=0;n<7;n++)//写入7个字节的时钟信号:

分秒时日月周年

{

Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);

}

Ds1302Write(0x8E,0x80); //打开写保护功能

}

/*******************************************************************************

*函数名:

Ds1302ReadTime

*函数功能 :

读取时钟信息

*输入:

*输出:

*******************************************************************************/

voidDs1302ReadTime()

{

ucharn;

for(n=0;n<7;n++)//读取7个字节的时钟信号:

分秒时日月周年

{

TIME[n]=Ds1302Read(READ_RTC_ADDR[n]);

}

}

Ds1302.h

#ifndef__DS1302_H_

#define__DS1302_H_

//---包含头文件---//

#include

#include

//---重定义关键词---//

#ifndefuchar

#defineucharunsignedchar

#endif

#ifndefuint

#defineuintunsignedint

#endif

//---定义ds1302使用的IO口---//

sbitDSIO=P3^4;

sbitRST=P3^5;

sbitSCLK=P3^6;

//---定义全局函数---//

voidDs1302Write(ucharaddr,uchardat);

ucharDs1302Read(ucharaddr);

voidDs1302Init();

voidDs1302ReadTime();

//---加入全局变量--//

externucharTIME[7]; //加入全局变量

#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2