16x64点阵屏时钟显示解读.docx
- 文档编号:4934294
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:9
- 大小:16.21KB
16x64点阵屏时钟显示解读.docx
《16x64点阵屏时钟显示解读.docx》由会员分享,可在线阅读,更多相关《16x64点阵屏时钟显示解读.docx(9页珍藏版)》请在冰豆网上搜索。
16x64点阵屏时钟显示解读
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 16 x64 点阵 时钟 显示 解读
![提示](https://static.bdocx.com/images/bang_tan.gif)