请大仙帮忙看一下DS1302时钟程序

请大仙帮忙看一下DS1302时钟程序,第1张

问一次,回答两个,开头的是55 00,可能是标志信息,告诉你这个是分钟信息,

你处理的时候,问两次;

判读第一次是5500,然后后边的就认为是分钟即可

BCD码的事情,查下说明书,或者直接试验一下,即可,

计算机类的东西,很多要摸索了实践,才能最终准确的把握

有的东西会总也弄不明白,就不去管他,完成了你的要求也就是了

这是一个PIC16F877A单片机的源程序,你参考一下

#include<pich> //包含单片机内部资源预定义

__CONFIG(0x1832);

//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡

#define i_o RB4 //定义DS1302的数据

#define sclk RB0 //定义DS1302的时钟

#define rst RB5 //定义DS1302的复位口

// unsigned char time_rx;

unsigned char time_rx @ 0x30; //定义接收寄存器

static volatile bit time_rx7 @ (unsigned)&time_rx8+7; //接收寄存器的最高位

//static volatile bit temp0 @ (unsigned)&temp8+0;

void port_init(); //申明引脚初始化函数

void ds1302_init(); //申明DS1302初始化函数

void set_time(); //申明设置时间函数

void get_time(); //申明读取时间函数

void display(); //申明显示函数

void time_write_1(unsigned char time_tx); //申明写一个字节函数

unsigned char time_read_1(); //申明读一个字节函数

void delay(); //申明延时函数

//定义待设置的时间: 秒、 分、 时、 日、月、星期、年、控制字

const char table[]={0x00,0x58,0x12,0x8,0x3,0x06,0x06,0x00};

//定义读取时间和日期存放表格

char table1[7];

//定义0-9的显示代码

const char table2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//----------------------------------------------

//主函数

void main()

{

port_init(); //调用引脚初始化函数

ds1302_init(); //调用DS1302初始化函数

set_time(); //调用设置时间函数

while(1)

{

get_time(); //调用取时间函数

display(); //调用显示函数

}

}

//---------------------------------------------

//DS1302初始化函数

void ds1302_init()

{

sclk=0; //拉低时钟信号

rst =0; //复位DS1302

rst=1; //使能DS1302

time_write_1(0x8e); //发控制命令

time_write_1(0); //允许写DS1302

rst=0; //复位

}

//---------------------------------------------

//设置时间函数

void set_time()

{

int i; //定义循环变量

rst=1; //使能DS1302

time_write_1(0xbe); //时钟多字节写命令

for(i=0;i<8;i++) //连续写8个字节数据

{

time_write_1(table[i]); //调用写一个字节函数

}

rst=0; //复位

}

//---------------------------------------------

//读取时间函数

void get_time()

{

int i; //设置循环变量

rst=1; //使能DS1302

time_write_1(0xbf); //发送多字节读取命令

for(i=0;i<7;i++) //连续读取7个字节数据

{

table1[i]=time_read_1(); //调用读取1个字节数据的函数

}

rst=0; //复位DS1302

}

//--------------------------------------------

//写一个字节数据函数

void time_write_1(unsigned char time_tx)

{

int j; //设置循环变量

for(j=0;j<8;j++) //连续写8bit

{

i_o=0; //先设置数据为0

sclk=0; //时钟信号拉低

if(time_tx&0x01) //判断待发送的数据位是0或1

{

i_o=1; //待发送数据位是1

}

time_tx=time_tx>>1; //待发送的数据右移1位

sclk=1; //拉高时钟信号

}

sclk=0; //写完一个字节,拉低时钟信号

}

//---------------------------------------------

//读一个字节函数

unsigned char time_read_1()

{

int j; //设置循环变量

TRISB4=1; //设置数据口方向为输入

for(j=0;j<8;j++) //连续读取8bit

{

sclk=0; //拉低时钟信号

time_rx=time_rx>>1; //接收寄存器右移1位

time_rx7=i_o; //把接收到的数据放到接收寄存器的最高位

sclk=1; //拉高时钟信号

}

TRISB4=0; //恢复数据口方向为输出

sclk=0; //拉低时钟信号

return(time_rx); //返回读取到的数据

}

//--------------------------------------------

//引脚定义函数

void port_init()

{

TRISA=0x00; //设置A口全输出

TRISD=0X00; //设置D口全输出

ADCON1=0X06; //设置A口为普通I/O口

TRISB=0X02; //设置RB1为输入,其他为输出

OPTION=0X00; //开启B口弱上拉

PORTA=0XFF;

PORTD=0XFF; //先熄灭所有显示

}

//-------------------------------------------

//显示函数

void display()

{

int i; //定义查表变量

if(RB1==0) //判断RB1是否按下,如果按下的话显示日期,不按下显示时间

{

table1[0]=table1[3];

table1[1]=table1[4];

table1[2]=table1[6];

}

i=table1[0]&0x0f; //求秒的个位

PORTD=table2[i]; //送D口显示

PORTA=0x1f; //点亮秒的个位

delay(); //延长一段时间,保证亮度

i=table1[0]&0xf0; //求秒的十位

i=i>>4; //右移4位

PORTD=table2[i]; //送D口显示

PORTA=0x2f; //点亮秒的十位

delay(); //延长一段时间,保证亮度

i=table1[1]&0x0f; //求分的个位

PORTD=table2[i]&0x7f; //送D口显示,并显示小数点

PORTA=0x37; //点亮分的个位

delay(); //延时一定时间,保证亮度

i=table1[1]&0xf0; //求分的十位

i=i>>4;

PORTD=table2[i]; //送D口显示

PORTA=0x3b; //点亮分的十位

delay(); //延长一段时间,保证亮度

i=table1[2]&0x0f; //求时的个位

PORTD=table2[i]&0x7f; //送D口显示,并加上小数点

PORTA=0x3d; //点亮时的个位

delay(); //延时一定时间,保证亮度

i=table1[2]&0xf0; //求时的十位

i=i>>4;

PORTD=table2[i]; //送D口显示

PORTA=0x3e; //点亮时的十位

delay(); //延长一段时间,保证亮度

}

//------------------------------------------------------------------

//延时程序

void delay() //延时程序

{

int i; //定义整形变量

for(i=0x64;i--;); //延时

}

以上就是关于请大仙帮忙看一下DS1302时钟程序全部的内容,包括:请大仙帮忙看一下DS1302时钟程序、高手给我个完整的关于DS1302程序,让我判断是否是芯片坏了。、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9841174.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存