新聞中心

PIC16F877A例程---DS1302程序

作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏

//檢查1302狀態(tài)

uchar check_ds1302(void)

{

ds1302_write(ds1302_control_add,0x80);

if(ds1302_read(ds1302_control_add)==0x80)

return 1;

return 0;

}

//向1302中寫(xiě)入時(shí)鐘數(shù)據(jù)

void ds1302_write_time(void)

{

ds1302_write(ds1302_control_add,0x00); //關(guān)閉寫(xiě)保護(hù)

ds1302_write(ds1302_sec_add,0x80); //暫停

ds1302_write(ds1302_charger_add,0xa9); //涓流充電

ds1302_write(ds1302_year_add,timer[1]); //年

ds1302_write(ds1302_month_add,timer[2]); //月

ds1302_write(ds1302_date_add,timer[3]); //日

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

ds1302_write(ds1302_hr_add,timer[4]); //時(shí)

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

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

ds1302_write(ds1302_control_add,0x80); //打開(kāi)寫(xiě)保護(hù)

}

//從1302中讀出當(dāng)前時(shí)鐘

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); //時(shí)

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

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

}

//延時(shí)函數(shù)1

void delay_us(uchar i)

{

for(;i;i--);

}

//延時(shí)函數(shù)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; //開(kāi)總中斷及TMR0計(jì)數(shù)溢出斷

TMR0=0xE8; //定時(shí)器初值

}

void interrupt TMR0INT()

{

T0IF=0;

TMR0=0xE8;

PORTD=0xff; //先關(guān)顯示

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;

}

//顯示數(shù)據(jù)轉(zhuǎn)換函數(shù)

void Process(void)//(uint i)

{

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

s[2]=Table[(timer[5]&0x0F)]&0x7F; //初始化顯示數(shù)據(jù),并將時(shí)分之間加小數(shù)點(diǎn)

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

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

}

//主函數(shù)

void main(void)

{

uint n,m=0;

TRISA=0x00; //設(shè)置按鍵A口為帶上拉輸入;

PORTA=0xFF;

TRISD=0X00;

PORTD=0XFF;

TRISC=0x00; //定義B口為輸出

PORTC=0xff;

timer[1]=0x09; //年

timer[2]=0x08; //月

timer[3]=0x20; //日

timer[4]=0x12; //時(shí)

timer[5]=0x12; //分

timer[6]=0x00; //秒

timer[7]=0x04; //周

ds1302_write_time(); //寫(xiě)入初始時(shí)鐘

timer0_init(); //設(shè)定定時(shí)器0

while(1)

{

ds1302_read_time(); //讀出當(dāng)前時(shí)鐘

Process(); //顯示數(shù)據(jù)轉(zhuǎn)換

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

}

}


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: PIC16F877ADS130

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉