DS1302读写程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include"p24Fxxxx.h"
#define uchar unsigned char
#define uint unsigned int
/////////////////////////////////////////////
#define USER_DEINED_1 0x00
#define USER_DEINED_2 0x02
#define USER_DEINED_3 0x04
#define USER_DEINED_4 0x06
#define RS TD5//串口时为CS 2^6;
#define RW TD7//串口为SID 2^5;
#define E TF0 //串口为时钟SCLK 2^4; #define PSB TD6
#define RST TB5 // P2^0;
#define Lcm_Data LATE
////////////////////////////////////////////
unsigned char jicunqi,jicun,second,min,hour;
uchar table_shizhong[7];
#define RST_1302 TD11
#define SCLK TD9
//#define IO TD10
#define IO PORTDbits.RD10
void delay(void)
{
unsigned int i=10000;
while(i--);
}
void delay_us(void)
{
unsigned int i=1000;
while(i--);
}
//////////////////////////////////////////////
void Delay_1ms(uint x)//1ms延时
{
unsigned char j;
while(x--)
{
for(j=0;j<125;j++)
{;}
}
}
void Lcm_Delay(void)
{
uchar i=100;
while(i--);
}
void Lcm_Rd_Status(void) //读忙状态
{
RS=0;
RW=1;
E=0;
Lcm_Delay();
E=1;
Lcm_Data=(LATE&0xFF00);
while(PORTEbits.RE7==1);
//while(1)
//{
//break;
//}
}
void Lcm_Wr_Data(uchar wrdata) //写数据
{
Lcm_Rd_Status();
RS=1;
RW=0;
Lcm_Data=wrdata;
E=1;
Lcm_Delay();
E=0;
}
void Lcm_Wr_Command(uchar wrcommand) //写指令{
Lcm_Rd_Status();
RS=0;
RW=0;
Lcm_Data=wrcommand;
E=1;
Lcm_Delay();
E=0;
}
void Wr_Cgram(uchar addr,uchar *table)
{
uchar i;
Lcm_Wr_Command(addr); //设定CGRAM地址
for(i=0;i<32;i++)
Lcm_Wr_Data(*table++);
}
//选定坐标
void Lcm_GotoXY(uchar pos_X,uchar pos_y)
{
uchar addr;
if((pos_X>7)||(pos_y>3))
return;
if(pos_y==0)
addr=0x80+pos_X;
else if(pos_y==1)
addr=0x90+pos_X;
else if(pos_y==2)
addr=0x88+pos_X;
else if(pos_y==3)
addr=0x98+pos_X;
Lcm_Wr_Command(addr);//设定DDRAM地址
}
//显示字符串
void Lcm_Disp_String(uchar *string)
{
while (*string != '\0')
Lcm_Wr_Data(*string++);
}
void Wr_Gdram(uchar pos_x,uchar pos_y,uint length,uchar width,uchar *table) {
uchar i,j;
Lcm_Wr_Command(0x34);//选择扩充指令
Lcm_Wr_Command(0x36);
for(j=pos_y;j { Lcm_Wr_Command(0x80+j); //Y总坐标,即第几行 Lcm_Wr_Command(0x80+pos_x);//X坐标,16个点进1 for(i=0;i Lcm_Wr_Data(*table++); } Lcm_Wr_Command(0x30);//返回基本指令 } //显示单个字符