找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

这个1602与DS1302 主函数里面还该怎么去调用啊?

[复制链接]
admin 发表于 2012-9-2 20:31:36 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_E=P2^5;
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^7;
sbit DS1302_RST=P1^0;
sbit DS1302_CLK=P1^1;
sbit DS1302_DIO=P1^2;
uchar first_time[]={0x30,0x25,0x15,0x21,0x08,0x3,0x21};
uchar time[]={0,0,'-',0,0,'-',0,0,0};
uchar date[]={0,0,'-',0,0,'-',0,0,0};


void delay(uint x)
{
uint i;
uchar j;
for(i=0;i<x;i++)
for(j=0;j<25;j++);
}
/****************************写数据**************************/
void write_cmd(uchar cmd)
{
LCD_RS=0;
P0=cmd;
LCD_E=0;
LCD_E=1;
LCD_E=0;
delay(4);
}

/*************************写命令****************************/
void write_dat(uchar dat)
{
LCD_RS=1;
P0=dat;
LCD_E=0;
LCD_E=1;
LCD_E=0;
delay(4);
}

/***********************1602液晶初始化**************************/
void LCD_Init()
{
write_cmd(0x38);
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x06);
write_cmd(0x01);
}

/******************************清除显示*****************************/
void ClearScreen()
{
write_cmd(0x01);
delay(4);
}
/**************************1602液晶显示字节**************************/
void WriteByte(uchar x,uchar y,uchar dat)
{
if(x==1)
write_cmd(0x80+(y-1));
else if(x==2)
write_cmd(0x80+0x40+(y-1));
write_dat(dat);
}
/*************************1602液晶显示字串****************************/
void WriteString(uchar x,uchar y,uchar *str)
{
if(x==1)
write_cmd(0x80+(y-1));
else if(x==2)
write_cmd(0x80+0x40+(y-1));
while(*str)
{
write_dat(*str);
str++;
}
}

/*************************往DS1302写入1Byte数据******************************/
void DS1302_WByte(uchar dat)
{
uchar i,temp;
temp=dat;
for(i=0;i<8;i++)
{
DS1302_DIO=(0x01&temp);
DS1302_CLK=1;
DS1302_CLK=0;
temp>>=1;
}
}


/**************************从DS1302读取1Byte数据******************************/

uchar DS1302_RByte()
{
uchar i,temp=0;
for(i=0;i<8;i++)
{
temp>>=1;
if(DS1302_DIO==1)
temp=temp|(0x80);
DS1302_CLK=1;
DS1302_CLK=0;
}
return temp;
}


/***************************在addr处写数据****************************/
void DS1302_write(uchar addr,uchar dat)
{
DS1302_RST = 1;
DS1302_WByte(addr);
DS1302_WByte(dat);
DS1302_RST=0;
}

/*************************在addr处读取数据**************************/
uchar DS1302_read(uchar addr)
{
uchar temp;
DS1302_RST = 1;
DS1302_WByte(addr);
temp=DS1302_RByte();
DS1302_RST=0;
return temp;
}

/*****************************DS1302初始化*****************************/
void DS1302_Init()
{
DS1302_write(0x8e,0x00); //禁止1302写保护
DS1302_write(0x80,0x00); //启动1302晶振
DS1302_write(0x84,0x00); //24小时制
DS1302_write(0x8e,0x80); //启动1302写保护
}

/***************************设置DS1302日期和时间***************************
******************* 秒 分 时 日 月 星期 年 ***********************/
void DS1302_set(uchar *p)
{
uchar i,addr=0x80;
DS1302_write(0x8e,0x00);
for(i=0;i<7;i++)
{
DS1302_write(addr,*p);
addr=addr+2;
p++;
}
DS1302_write(0x8e,0x80);
}

/**************************读取DS1302日期**************************/
void GET_date(uchar *p)
{
*(p+0)=DS1302_read(0x8d)/16+48;
*(p+1)=DS1302_read(0x8d)%16+48;

*(p+3)=DS1302_read(0x89)%32/16+48;
*(p+4)=DS1302_read(0x89)%16+48;

*(p+6)=DS1302_read(0x87)%64/16+48;
*(p+7)=DS1302_read(0x87)%16+48;
}

/**************************读取DS1302时间*************************/
void GET_time(uchar *p)
{
*(p+0)=DS1302_read(0x85)%64/16+48;
*(p+1)=DS1302_read(0x85)%16+48;

*(p+3)=DS1302_read(0x83)%128/16+48;
*(p+4)=DS1302_read(0x83)%16+48;

*(p+6)=DS1302_read(0x81)%128/16+48;
*(p+7)=DS1302_read(0x81)%16+48;
}
void main()
{
LCD_Init(); //液晶初始化函数
DS1302_Init;
while(1)
{

;
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-29 10:00 , Processed in 0.051411 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表