當前位置:編程學習大全網 - 編程語言 - 編程控制電子鐘

編程控制電子鐘

# include & ltNEW _ 8051 . h & gt;"

# include & lttask.h & gt

/******************************************************************/

sbit t_clk=p3^5;?//DS1302引腳連接

sbit t _ io =p3^6;

sbit t_rst=p3^7;sbit acc0=acc^0;//1位數據存儲位

sbit acc7=acc^7;

uchar starts_time[7]={0x00,0x10,0x22,0x20,0x05,0x04,0x 10 };?//初始化後的設置

uchar Sec

烏恰爾中心;

uchar小時;

烏恰年;

烏恰爾日;

uchar周;

uchar月;

/******************************************************************/

//根據選擇調整相應的項目。

空集合(uchar sel,uchar sel_1)

{

uchar地址、時間;

uchar max,min

if(sel==1)?{ address = 0x84max = 23min = 0;}?//小時

if(sel==2)?{ address = 0x82max = 59min = 0;}?//分鐘

if(sel==3)?{ address = 0x88max = 12;min = 1;}?//月份

if(sel==4)?{ address = 0x86max = 31;min = 1;}?//天

if(sel==5)?{ address = 0x8amax = 7;min = 1;}?//周

時間=R1302(地址+1)/16 * 10+r 1302(地址+1)% 16;?//轉換成BCD碼

if(sel _ 1 = = 1)time++;?否則時間-;

如果(時間& gtmax)時間= min

如果(時間& ltmin)時間= max

W1302(0x8e,0x 00);

W1302(地址,時間/10 * 16+時間% 10);

W1302(0x8e,0x 80);?

}

//* * * * * * * * ds 1302閱讀器* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

函數名:RTInputByte()

工作?Can:實時時鐘寫入壹個字節。

說?明:將1字節數據(內部函數)寫入DS1302。

錄入參數:d寫數據

返回值:無?

***********************************************************************/

無效RTInputByte(uchar d)

{

uchar h;

ACC = d;

for(h = 8;h & gt0;h -)

{

T _ IO = ACC0/*相當於RRC */

t _ CLK = 1;

t _ CLK = 0;

ACC = ACC & gt& gt1;

}

}

uchar RTOutputByte(void)

{

uchar h;

for(h = 8;h & gt0;h -)

{

ACC = ACC & gt& gt1;/*相當於RRC */

ACC7 = T _ IO

t _ CLK = 1;

t _ CLK = 0;

}

返回(ACC);

}

/***************************************************************************************************/

void W1302(uchar ucAddr,uchar ucDa)

{

t _ RST = 0;

t _ CLK = 0;

t _ RST = 1;

RTInputByte(UC addr);/*地址,命令*/

RTInputByte(ucDa);/*寫入1字節數據*/

t _ CLK = 1;

t _ RST = 0;

}

/********************************************************************

函數名:R1302()

工作?Can:讀取DS1302中某個地址的數據。

說?明:先寫地址,再讀命令/數據(內部函數)。

優化使用:RTInputByte(),RTOutputByte()

入口參數:ucAddr: DS1302地址。

返回值:ucData:數據讀取。

***********************************************************************/

uchar R1302(uchar ucAddr)

{

uchar ucData

t _ RST = 0;

t _ CLK = 0;

t _ RST = 1;

RTInputByte(UC addr);/*地址,命令*/

UC data = RTOutputByte();/*讀取1字節數據*/

t _ CLK = 1;

t _ RST = 0;

return(UC data);

}

/********************************************************************

函數名:Set1302()

工作?可以:設置初始時間。

說?明:先寫地址,再讀命令/數據(寄存器多字節模式)。

曲調使用:W1302()

入口參數:pClock:設置時鐘數據地址格式為:秒、分、日、月、周、年。

7Byte (BCD碼)1b 1b 1b 1b 1b?1B?1B

返回值:無

***********************************************************************/

void Set1302(uchar *pClock)

{

uchar h;

uchar ucAddr = 0x80

W1302(0x8e,0x 00);/*控制命令,WP=0,寫操作?*/

for(h = 7;h & gt0;h -)

{

W1302(ucAddr,* pClock);?/*秒、分、天、月、周、年*/

pclock++;

ucAddr+= 2;

}

W1302(0xc0,0x 01);

W1302(0XC2,0x 03);?//初始自動轉換顯示時間為3秒。

W1302(0x8e,0x 80);/*控制命令,WP=1,寫保護?*/

}

void Auto _ set 1302(uchar * pClock)

{

uchar h;

uchar ucAddr = 0x80

if(((r 1302(0x 81))& amp;0x80)==0x80)

{

W1302(0x8e,0x 00);/*控制命令,WP=0,寫操作?*/

for(h = 7;h & gt0;h -)

{

W1302(ucAddr,* pClock);?/*秒、分、天、月、周、年*/

pclock++;

ucAddr+= 2;

}

W1302(ucNumRows_adder,0);

W1302(ucNumRows_p_adder,0);

w 1302(DISP _時間_加法器,170);

W1302(0xc0,0x 01);

W1302(0XC2,0x 03);?//初始自動轉換顯示時間為3秒。

W1302(0x8e,0x 80);/*控制命令,WP=1,寫保護?*/

?}

}

/* * * * * * * * * * * * * * * * ds 1302中的讀取時間* * * * * * * * *

void du1302()

{

sec = r 1302(0x 81);//以秒、分、天、月、周、年為單位。

cent = r 1302(0x 83);

小時= r 1302(0x 85);

day = r 1302(0x 87);

月= r 1302(0x 89);

week = r 1302(0x8b);

年份= r 1302(0x8d);

//b = r 1302(0xc 1);

//a = r 1302(0x C3);

//a = a/16 * 10+a % 16;

}

作廢?write_1302Data (uchar?ucAddr,uchar?值)

{

W1302(0x8e,0x 00);/*控制命令,WP=0,寫操作?*/

W1302(ucAddr,Value);?//地址和數據

W1302(0x8e,0x 80);/*控制命令,WP=1,寫保護?*/

}

  • 上一篇:初三孩子網戀怎麽正確引導
  • 下一篇:關於零的知識點
  • copyright 2024編程學習大全網