Microsoft Word 文档.docx

上传人:b****7 文档编号:9851350 上传时间:2023-02-07 格式:DOCX 页数:21 大小:18.48KB
下载 相关 举报
Microsoft Word 文档.docx_第1页
第1页 / 共21页
Microsoft Word 文档.docx_第2页
第2页 / 共21页
Microsoft Word 文档.docx_第3页
第3页 / 共21页
Microsoft Word 文档.docx_第4页
第4页 / 共21页
Microsoft Word 文档.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

Microsoft Word 文档.docx

《Microsoft Word 文档.docx》由会员分享,可在线阅读,更多相关《Microsoft Word 文档.docx(21页珍藏版)》请在冰豆网上搜索。

Microsoft Word 文档.docx

MicrosoftWord文档

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitCLK_166=P3^1;

sbitSHLD_166=P3^4;

unsignedchardat;

unsignedcharK1,H2,K3;

sbitSDA=P1^0;//DS1302数据线

sbitCLK=P1^1;//DS1302时钟线

sbitRST=P1^2;//DS1302复位线

//sbitK1=P3^5;//小时调整

//sbitK2=P3^6;//分钟调整

//sbitK3=P3^7;//确定

sbitLED_DS=P2^3;//数据输入SI

sbitLED_ST=P2^1;//显示控制RCK

sbitLED_SH=P2^2;//数据控制SCK

//数码管字形码

ucharcodeDSY_shuma[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09

0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF};//共阳

//显示缓冲:

23-57-18;2011年04月16日

ucharDSY_BUFFER[]={0,0,0xBF,0,0};//显示缓冲00-00-00(12-04-10)

ucharCurrent_Time[7];//通过DS1302读取的日期和时间就放在这个数组中。

bitAdjust_Flag;

//*--------子程序声明--------*//

voiddelay(uintK);//延时子程序

voidDisplay();//显示子程序,主要显示小时、分钟和

voidInitialization();//初始化子程序

voidWrite_Byte_TO_DS1302(ucharx);//向DS1302写入一个字节

ucharRead_Byte_FROM_DS1302();//从DS1302读取一个字节

voidWrite_Data_TO_DS1302(ucharaddr,uchardat);//向DS1302中的寄存器中写入数据

ucharRead_Data_FROM_DS1302(ucharaddr);//从DS1302的某个寄存器中读取数据

voidGET_Time();//读取当前时间,年月日,小时、分钟、秒钟

voidSET_Time();//当调整时间时需要设置时间

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

//主程序

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

voidmain()

{

Initialization();

while

(1)

{

if(Adjust_Flag==0)

GET_Time();

Display();

}

//}

while

(1)

{

SHLD_166=0;

CLK_166=0;

CLK_166=1;

delay(1000);

SHLD_166=1;

SCON=0X10;

while(RI==0);

dat=SBUF;

switch(dat)

{

case0Xfe:

K1=0;break;

case0Xfd:

H2=0;break;

case0Xfb:

K3=0;break;

case0Xf7:

P0=0x1f;break;

case0Xef:

P0=0X2f;break;

case0Xdf:

P0=0xff;break;

}

}

}

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

//键盘中断服务程序(INT0)

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

voidEX_INT0()interrupt0

{

if(K1==0)//小时调整

{

Adjust_Flag=1;//正在调整

Current_Time[2]=(Current_Time[2]+1)%24;

}

elseif(H2==0)//分钟调整

{

Adjust_Flag=1;//正在调整

Current_Time[1]=(Current_Time[1]+1)%60;

}

elseif(K3==0)

{

SET_Time();//将调整后的时间写入DS1302

Adjust_Flag=0;//结束调整,时间继续正常显示

}

}

//*--------延时子程序--------*/

voiddelay(uintK)

{

uchari,p=120;

for(i=K;i>0;i--)

{for(;p>0;p--);}

}

//*--------写字节函数,向DS1302写入一个字节--------*//

voidWrite_Byte_TO_DS1302(ucharX)//向DS1302写入一个字节

{

uchari;

for(i=0;i<8;i++)

{

SDA=X&1;

CLK=1;

CLK=0;

X>>=1;

}

}

//*--------读字节函数,从DS1302读取一个字节--------*//

ucharRead_Byte_FROM_DS1302()

{

uchari,byte,t;

for(i=0;i<8;i++)

{

byte>>=1;

t=SDA;

byte|=t<<7;

CLK=1;

CLK=0;

}

//BCD码转换

returnbyte/16*10+byte%16;

}

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

//从DS1302指定位置读取数据,读数据

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

ucharRead_Data_FROM_DS1302(ucharaddr)

{

uchardat;

RST=0;

CLK=0;

RST=1;

Write_Byte_TO_DS1302(addr);//向DS1302写入一个地址

dat=Read_Byte_FROM_DS1302();//在上面写入的地址中读取数据

CLK=1;

RST=0;

returndat;

}

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

//向DS1302指定位置写入数据,写数据

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

voidWrite_Data_TO_DS1302(ucharaddr,uchardat)

{

CLK=0;

RST=1;

Write_Byte_TO_DS1302(addr);

Write_Byte_TO_DS1302(dat);

CLK=1;

RST=0;

}

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

//读取当前时间,年月日,小时、分钟、秒钟

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

voidGET_Time()

{

Current_Time[0]=Read_Data_FROM_DS1302(0x81);//读取当前时间秒

Current_Time[1]=Read_Data_FROM_DS1302(0x83);//读取当前时间分钟

Current_Time[2]=Read_Data_FROM_DS1302(0x85);//读取当前时间时钟

Current_Time[3]=Read_Data_FROM_DS1302(0x87);//读取当前时间日

Current_Time[4]=Read_Data_FROM_DS1302(0x89);//读取当前时间月

Current_Time[5]=Read_Data_FROM_DS1302(0x8B);//读取当前时间秒星期

Current_Time[6]=Read_Data_FROM_DS1302(0x8D);//读取当前时间秒年

}

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

//设置时间函数,当需要调整时间时,需要把调整好的时间写入时间缓冲数组中

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

voidSET_Time()

{

Write_Data_TO_DS1302(0x8e,0x00);//写控制字,取消写保护

Write_Data_TO_DS1302(0x82,(Current_Time[1]/10<<4)|(Current_Time[1]%10));//写入分钟

Write_Data_TO_DS1302(0x84,(Current_Time[2]/10<<4)|(Current_Time[2]%10));//写入时钟

Write_Data_TO_DS1302(0x8e,0x80);//加保护

}

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

//初始化子程序

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

voidInitialization()

{

Adjust_Flag=0;

IE=0x81;

IT0=0x01;

}

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

//显示

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

voidDisplay()

{

charj,j1,j2,j3,mask;

mask=0x01;

delay(1000);

for(j=0;j<8;j++)

{

LED_SH=0;//数据控制

LED_DS=(DSY_shuma[Current_Time[1]%10]&mask);//数据输入

LED_SH=1;//数据控制

mask=mask<<1;

}

mask=0x01;

//delay(10);

for(j1=0;j1<8;j1++)

{

LED_SH=0;//数据控制

LED_DS=(DSY_shuma[Current_Time[1]/10]&mask);//数据输入&同一则一,有零则零

LED_SH=1;//数据控制

mask=mask<<1;

}

mask=0x01;

//delay(10);

for(j2=0;j2<8;j2++)

{

LED_SH=0;//数据控制

LED_DS=(DSY_shuma[Current_Time[2]%10]&mask);//数据输入&同一则一,有零则零

LED_SH=1;//数据控制

mask=mask<<1;

}

mask=0x01;

//delay(10);

for(j3=0;j3<8;j3++)

{

LED_SH=0;//数据控制

LED_DS=(DSY_shuma[Current_Time[2]/10]&mask);//数据输入&同一则一,有零则零

LED_SH=1;//数据控制

mask=mask<<1;

}

LED_ST=0;//显示控制

LED_ST=1;//显示控制

}

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

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitCLK_166=P3^1;

sbitSHLD_166=P3^2;

unsignedchardat;

unsignedcharK1,K2,K3,K4=0,K5,K6;

sbitSDA=P1^0;//DS1302数据线

sbitCLK=P1^1;//DS1302时钟线

sbitRST=P1^2;//DS1302复位线

//sbitK1=P3^5;//小时调整

//sbitK2=P3^6;//分钟调整

//sbitK3=P3^7;//确定

sbitLED_clk=P2^0;

sbitLED_st=P2^1;

sbitLED=P2^2;//数据控制SCK

//数码管字形码

ucharcodeDSY_shuma[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09

0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF};//共阳

//显示缓冲:

23-57-18;2011年04月16日

ucharDSY_BUFFER[]={0,0,0xBF,0,0};//显示缓冲00-00-00(12-04-10)

ucharCurrent_Time[7];//通过DS1302读取的日期和时间就放在这个数组中。

bitAdjust_Flag;

//*--------子程序声明--------*//

voiddelay(uintK);//延时子程序

voidDisplay();//显示子程序,主要显示小时、分钟和

voidInitialization();//初始化子程序

voidWrite_Byte_TO_DS1302(ucharx);//向DS1302写入一个字节

ucharRead_Byte_FROM_DS1302();//从DS1302读取一个字节

voidWrite_Data_TO_DS1302(ucharaddr,uchardat);//向DS1302中的寄存器中写入数据

ucharRead_Data_FROM_DS1302(ucharaddr);//从DS1302的某个寄存器中读取数据

voidGET_Time();//读取当前时间,年月日,小时、分钟、秒钟

voidSET_Time();//当调整时间时需要设置时间

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

//主程序

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

voidmain()

{

Initialization();

while

(1)

{

if(Adjust_Flag==0)

GET_Time();

Display();

}

//}

while

(1)

{

SHLD_166=0;

CLK_166=0;

CLK_166=1;

delay(1000);

SHLD_166=1;

SCON=0X10;

while(RI==0);

dat=SBUF;

switch(dat)

{

case0Xfe:

P0=0x03;K1=0;break;

case0Xfd:

K2=0;break;

case0Xfb:

K3=0;break;

case0Xf7:

K4++;break;

case0Xef:

K5++;break;

case0Xdf:

K6++;break;

}

}

}

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

//键盘中断服务程序(INT0)

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

voidEX_INT0()interrupt0

{

if(K1==0)//小时调整

{

Adjust_Flag=1;//正在调整

Current_Time[2]=(Current_Time[2]+1)%24;

}

elseif(K2==0)//分钟调整

{

Adjust_Flag=1;//正在调整

Current_Time[1]=(Current_Time[1]+1)%60;

}

elseif(K3==0)

{

SET_Time();//将调整后的时间写入DS1302

Adjust_Flag=0;//结束调整,时间继续正常显示

}

}

/*{

if(K4%2==1)//小时调整

{

//Adjust_Flag=1;//正在调整

if(K5==1)

{

Current_Time[2]=(Current_Time[2]+1)%24;

}

if(K6==1)

{

Current_Time[2]=(Current_Time[2]-1)%24;

}

}

Else//if(K4==2)分钟调整

{

Adjust_Flag=1;//正在调整

if(K5==1)

{

Current_Time[1]=(Current_Time[1]+1)%60;

}

if(K6==1)

{

Current_Time[1]=(Current_Time[1]-1)%60;

}

}

/*elseif(K4==0)

{

SET_Time();//将调整后的时间写入DS1302

Adjust_Flag=0;//结束调整,时间继续正常显示

}

}*/

//*--------延时子程序--------*/

voiddelay(uintK)

{

uchari,p=120;

for(i=K;i>0;i--)

{for(;p>0;p--);}

}

//*--------写字节函数,向DS1302写入一个字节--------*//

voidWrite_Byte_TO_DS1302(ucharX)//向DS1302写入一个字节

{

uchari;

for(i=0;i<8;i++)

{

SDA=X&1;

CLK=1;

CLK=0;

X>>=1;

}

}

//*--------读字节函数,从DS1302读取一个字节--------*//

ucharRead_Byte_FROM_DS1302()

{

uchari,byte,t;

for(i=0;i<8;i++)

{

byte>>=1;

t=SDA;

byte|=t<<7;

CLK=1;

CLK=0;

}

//BCD码转换

returnbyte/16*10+byte%16;

}

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

//从DS1302指定位置读取数据,读数据

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

ucharRead_Data_FROM_DS1302(ucharaddr)

{

uchardat;

RST=0;

CLK=0;

RST=1;

Write_Byte_TO_DS1302(addr);//向DS1302写入一个地址

dat=Read_Byte_FROM_DS1302();//在上面写入的地址中读取数据

CLK=1;

RST=0;

returndat;

}

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

//向DS1302指定位置写入数据,写数据

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

voidWrite_Data_TO_DS1302(ucharaddr,uchardat)

{

CLK=0;

RST=1;

Write_Byte_TO_DS1302(addr);

Write_Byte_TO_DS1302(dat);

CLK=1;

RST=0;

}

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

//读取当前时间,年月日,小时、分钟、秒钟

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

voidGET_Time()

{

Current_Time[0]=Read_Data_FROM_DS1302(0x81);//读取当前时间秒

Current_Time[1]=Read_Data_FROM_DS1302(0x83);//读取当前时间分钟

Current_Time[2]=Read_Data_FROM_DS1302(0x85);//读取当前时间时钟

Current_Time[3]=Read_Data_FROM_DS1302(0x87);//读取当前时间日

Current_Time[4]=Read_Data_FROM_DS1302(0x89);//读取当前时间月

Current_Time[5]=Read_Data_FROM_DS1302(0x8B);//读取当前时间秒星期

Current_Time[6]=Read_Data_FROM_DS1302(0x8D);//读取当前时间秒年

}

/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1