微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC16F877A例程---DS1302程序

PIC16F877A例程---DS1302程序

时间:11-24 来源:互联网 点击:

ds1302_write(ds1302_day_add,timer[7]); //周

ds1302_write(ds1302_hr_add,timer[4]); //时

ds1302_write(ds1302_min_add,timer[5]); //分

ds1302_write(ds1302_sec_add,timer[6]); //秒

ds1302_write(ds1302_control_add,0x80); //打开写保护

}

//从1302中读出当前时钟

void ds1302_read_time(void)

{

timer[1]=ds1302_read(ds1302_year_add); //年

timer[2]=ds1302_read(ds1302_month_add); //月

timer[3]=ds1302_read(ds1302_date_add); //日

timer[7]=ds1302_read(ds1302_day_add); //周

timer[4]=ds1302_read(ds1302_hr_add); //时

timer[5]=ds1302_read(ds1302_min_add); //分

timer[6]=ds1302_read(ds1302_sec_add); //秒

}

//延时函数1

void delay_us(uchar i)

{

for(;i;i--);

}

//延时函数2

void delay(uint i)

{

uchar j;

for(;i;i--)

for(j=220;j;j--);

}

void timer0_init(void)

{

OPTION=0x07; //TMR0----256分频

INTCON=0XA0; //开总中断及TMR0计数溢出断

TMR0=0xE8; //定时器初值

}

void interrupt TMR0INT()

{

T0IF=0;

TMR0=0xE8;

PORTD=0xff; //先关显示

PORTA=0XFF;

PORTD=s[sel];

switch(sel)

{

case 0x00: PORTA=0XFD;break;

case 0x01: PORTA=0XFB;break;

case 0x02: PORTA=0XF7;break;

case 0x03: PORTA=0XEF;break;

}

if(++sel>3)sel=0;

}

//显示数据转换函数

void Process(void)//(uint i)

{

s[3]=Table[(timer[5]&0xF0)>>4];

s[2]=Table[(timer[5]&0x0F)]&0x7F; //初始化显示数据,并将时分之间加小数点

s[1]=Table[(timer[6]&0xF0)>>4];

s[0]=Table[(timer[6]&0x0F)];

}

//主函数

void main(void)

{

uint n,m=0;

TRISA=0x00; //设置按键A口为带上拉输入;

PORTA=0xFF;

TRISD=0X00;

PORTD=0XFF;

TRISC=0x00; //定义B口为输出

PORTC=0xff;

timer[1]=0x09; //年

timer[2]=0x08; //月

timer[3]=0x20; //日

timer[4]=0x12; //时

timer[5]=0x12; //分

timer[6]=0x00; //秒

timer[7]=0x04; //周

ds1302_write_time(); //写入初始时钟

timer0_init(); //设定定时器0

while(1)

{

ds1302_read_time(); //读出当前时钟

Process(); //显示数据转换

delay(100); //每100MS读一次

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top