版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计--基于单片机的智能数字闹钟程序代码程序代码
main.c#include<reg51.h>
#include<intrins.h>
#include<yf.h>
unsignedcharclock_data[4];sbitspeaker
=P2^4;//
蜂鸣器
sbitbell=P2^2;
//铃响
bitbell_on=0;
bitkey_ok=0;
unsignedcharbell_time=0x20;
ucharweek_clock_set;
#defineFIRST_ADDR0//定义全局变量
unsignedcharyy,mo,dd,xq,hh,mm,ss;//
定义时间映射全局变量(专用寄存器)
ucharj;/****************************************************************************/
//函数声明
extern
unsignedcharread_clock(unsignedcharord);
externvoidlcdwc(unsignedcharcmdcode);
externvoidhzkdis(unsignedcharcode*s);
externvoidhzkdis2(unsignedchar*s);
externcharRead_One_Byte(unsignedcharaddr);
externvoidWrite_One_Byte(unsignedcharaddr,unsignedcharthedata);
voidlcm_w_ss(void);
externvoidlcdreset(void);
externvoidInit_DS18B20(void);
externchargotkey();
externvoidInit_1302(void);
externunsignedintReadTemperature(void);externvoidwrite_clock(unsignedcharord,unsignedchardd);
externvoiddisp_hz(ucharx,uchar*c_str,ucharw);
externvoiddelay(unsignedintt);
voidnew_time(void);
voidread_clockss(x);
//voidlcm_w_temp(void);voidread_clockS(void)
{
ss=read_clock(0x81);//读取秒数据
mm=read_clock(0x83);//读取分钟数据
hh=read_clock(0x85);//小时
dd=read_clock(0x87);//日
mo=read_clock(0x89);//月
xq=read_clock(0x8b);//星期
yy=read_clock(0x8d);//年
}/*voidSet_time(unsignedcharsel){//根据选择调整的相应项目加1并写入DS1302
signedcharaddress,item;
signedcharmax,mini;
if(sel==7)
{address=0x80;max=0;mini=0;}
//秒
if(sel==6)
{address=0x82;max=59;mini=0;}
//分钟
if(sel==5)
{address=0x84;max=23;mini=0;}
//小时
if(sel==3)
{address=0x86;max=31;mini=1;}
//日
if(sel==2)
{address=0x88;max=12;mini=1;}
//月
if(sel==1)
{address=0x8c;max=99;mini=0;}
//年
if(sel==4)
{address=0x8a;max=7;mini=1;}
//星期
//读取1302某地址上的数值转换成10进制赋给item
item=((read_clock(address+1))/16)*10+(read_clock(address+1))%16;
if(KEY_Y==0){
item++;//数加1
}
if(KEY_N==0){
item--;//数减1
}
if(item>max)item=mini;//查看数值有效范围
if(item<mini)item=max;
write_clock(0x8e,0x00);//允许写操作
write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
write_clock(0x8e,0x80);//写保护,禁止写操作
//updata();
//刷新数据
//lcm_w_mm();//刷新分
}
*/
voidDelayM(unsignedinta){//延时函数1MS/次
unsignedchari;
while(--a!=0){
for(i=0;i<125;i++);
//一个;表示空语句,CPU空转。
}
//i从0加到125,CPU大概就耗时1毫秒
}
/*****************************************************************************/
//向LCM中填写年数据
voidlcm_w_yy(void)
{
//
if(read_clock(0x8d)!=yy)
{
unsignedcharstr[2];
str[2]=0;
yy=read_clock(0x8d);
lcdwc(0x83+FIRST_ADDR);
hzkdis("20");
lcdwc(0x84+FIRST_ADDR);
str[0]=(yy/16+0x30);
str[1]=(yy%16+0x30);
hzkdis2(str);
hzkdis2("年");
}
/*****************************************************************************/
//向LCM中填写月数据
voidlcm_w_mo(void){
//
if(read_clock(0x89)!=mo){
unsignedcharstr[2];
str[2]=0;
//
lcm_w_test(0,0x90);
lcdwc(0x90+FIRST_ADDR);
if(mo/16!=0){
str[0]=mo/16+0x30;
}
//十位消隐
else{str[0]=0x20;}//同上
str[1]=mo%16+0x30;
hzkdis2(str);
lcdwc(0x91+FIRST_ADDR);
hzkdis("月");
}
/*****************************************************************************/
//星期处理并送入LCM的指定区域
voidlcm_w_xq(void){
unsignedcharsel;
unsignedcharstr[2];
str[2]=0;
//if(read_clock(0x8b)!=xq){
//xq=read_clock(0x8b);
sel=(read_clock(0x8b))%16;//字节低4位的BCD码放入sel
lcdwc(0x97+FIRST_ADDR);//写入指定区域(97H第二行第8个字)
if(sel==7)
{hzkdis("日");}
//
if(sel==6)
{hzkdis("六");}
//
if(sel==5)
{hzkdis("五");}
//
if(sel==4)
{hzkdis("四");}
//
if(sel==3)
{str[0]=0xc8;str[1]=0xfd;hzkdis2(str)/*lcm_w_test(1,0xc8);lcm_w_test(1,0xfd)*/;}//此指令等于lcm_w_word("三");因为“三”的内码失效。
if(sel==2)
{hzkdis("二");}
//
if(sel==1)
{hzkdis("一");}
//星期一
lcdwc(0x95+FIRST_ADDR);
hzkdis("星期");
//}
}
/*****************************************************************************/
//向LCM中填写日数据
voidlcm_w_dd(void){
unsignedcharstr[2]
;
str[2]=0;
//
if(read_clock(0x87)!=dd){
dd=read_clock(0x87);
lcdwc(0x92+FIRST_ADDR);
if(dd/16!=0){str[0]=(dd/16)+0x30;}
//十位消隐
else{str[0]=0x20;}//同上
str[1]=dd%16+0x30;
hzkdis2(str);
lcdwc(0x93+FIRST_ADDR);
hzkdis("日");
}
//}
/*****************************************************************************/
//向LCM中填写小时数据
voidlcm_w_hh(void){
unsignedcharstr[2];
str[2]=0;
if(read_clock(0x85)!=hh){
//hh=read_clock(0x85);
if(hh>0x07&&hh<0x22/*&&w==0*/){
//
beep=0;led_r=0;
DelayM(100);
//
beep=1;led_r=1;
}
}
lcdwc(0x88+FIRST_ADDR);
str[0]=hh/16+0x30;
str[1]=hh%16+0x30;
hzkdis2(str);
}
//}
/*****************************************************************************/
//向LCM中填写分钟数据
voidlcm_w_mm(void){
unsignedchar
str[2];
str[2]=0;
if(read_clock(0x83)!=mm){
mm=read_clock(0x83);
/*if(w==0){
days();
//节日显示
updata();
//刷新数据
}*/
}
/*
lcm_w_test(0,0x89);
lcm_w_test(1,0x3a);
//":"
lcm_w_test(1,(mm/16)+0x30);
lcm_w_test(1,mm%16+0x30);
lcm_w_test(1,0x2e);
//"."*/
lcdwc(0x89+FIRST_ADDR);
hzkdis(":");
str[0]=(mm/16)+0x30;
str[1]=
mm%16+0x30;
hzkdis2(str);
hzkdis(":");
}
/*****************************************************************************/
//向LCM中填写秒数据
voidlcm_w_ss(void)
{
unsignedcharstr[2];
str[2]=0;
//
if(read_clock(0x81)!=ss)
//判断是否需要更新
/*ss=read_clock(0x81);
//更新数据
lcm_w_test(0,0x8b);
//秒值在LCM上的写入位置
lcm_w_test(1,(ss/16)+0x30);
//写十位
lcm_w_test(1,ss%16+0x30);
//写个位
led_b=~led_b;
//背光闪烁
lcm_w_mm();//刷新分
*/
//lcm_w_mm();
ss=read_clock(0x81);
lcdwc(0x8b+FIRST_ADDR);
str[0]=ss/16+0x30;
str[1]=ss%16+0x30;
hzkdis2(str);
}lcm_w_temp(void)
{
//unsignedchar
str1[4];
ucharstr[2];
unsignedinti=0;
unsignedchara=0,b=0,c=0;
uchartemp=28;
i=ReadTemperature();//读温度并送显
/*
a=i/100;
str1[3]=a+0x30;
str1[2]=0x2e;
str1[1]=(i/10-a*10)+0x30;
str1[0]=(i-a*100-b*10)+0x30;
//lcm_w_test(1,c+0x30);//小位1位
//lcm_w_word("℃");
//度C//
str1[0]=(i/100)%10+0x30;
//
str1[1]=((i%100)/10)+0x30;
//
str1[2]=(i%10)+0x30;*/
str[0]=temp/10+0x30;
str[1]=temp%10+0x30;
lcdwc(0x8e+FIRST_ADDR);
hzkdis2(str);
lcdwc(0x8f+FIRST_ADDR);
hzkdis("℃");
}
/*****************************************************************************/
//刷新数据
voidupdata(void)
{
lcm_w_hh();//刷新小时
lcm_w_dd();//刷新日
lcm_w_xq();//更新星期值
lcm_w_mo();//刷新月
lcm_w_yy();//刷新年
lcm_w_mm();
lcm_w_ss();
lcm_w_temp();
}
//初始化界面
voidrestlib()
{
lcdwc(0x80+FIRST_ADDR);
hzkdis("校园打铃系统");
lcdwc(0x90+FIRST_ADDR);
hzkdis("初始化...");
lcdwc(0x88+FIRST_ADDR);
hzkdis("姚辉虎");
lcdwc(0x98+FIRST_ADDR);
hzkdis("");
}
/*void
rj1lib()
{
unsignedcharstr[2];
lcdwc(0x80+FIRST_ADDR);
str[0]=yy/10+0x30;
str[1]=yy%10+0x30;
hzkdis("20");
hzkdis2(str);
hzkdis("年");
lcdwc(0x90+FIRST_ADDR);
if(mo/16!=0){
str[0]=mo/16+0x30;
}
//十位消隐
else{str[0]=0x20;}//同上
str[1]=mo%16+0x30;
hzkdis2(str);
lcdwc(0x91+FIRST_ADDR);
hzkdis("月");
lcdwc(0x92+FIRST_ADDR);
if(dd/16!=0){str[0]=(dd/16)+0x30;}
//十位消隐
else{str[0]=0x20;}//同上
str[1]=dd%16+0x30;
hzkdis2(str);
lcdwc(0x93+FIRST_ADDR);
hzkdis("日");
lcdwc(0x88+FIRST_ADDR);
str[0]=hh/16+0x30;
str[1]=hh%16+0x30;
hzkdis2(str);
lcdwc(0x89+FIRST_ADDR);
hzkdis(":");
str[0]=(mm/16)+0x30;
str[1]=
mm%16+0x30;
hzkdis2(str);
lcdwc(0x81+FIRST_ADDR);
}
/*------------------------------------------------
------------------------------------------------*/
/*
//不同按键实现不同功能
voidgongneng(intgotkeys)
{
intgn,gn10,gn0;
gn=gotkeys;
switch(gn)
{
case0:
DelayM(2000);gn0=gotkey();if(gn0==0){
lcdreset();restlib();Init_DS18B20();Init_1302();DelayM(3000);cxjmlib();}break;
//长按系统初始化;
case10:lcdreset();
lcdwc(0x80+FIRST_ADDR);hzkdis("1.设置时间");
lcdwc(0x90+FIRST_ADDR);hzkdis("2.设置闹时");
lcdwc(0x88+FIRST_ADDR);hzkdis("3.系统初始化");
lcdwc(0x79+FIRST_ADDR);hzkdis("");
tt:gn10=gotkey();
//
if(gn10!=16)gotott;
tt1:gn10=gotkey();
//
if(gn10==16)gotott;
switch(gn10)
{
case1:
{
lcdreset();
read_clockS();
rj1lib();
tt2:
gn10=gotkey();
if(gn10!=16)gotott2;
tt3:
gn10=gotkey();
if(gn10==16)gotott2;
switch(gn10)
{
case0:
break;
case1:
break;
case2:
break;
case3:
break;
case4:
break;
case5:
break;
case6:
break;
case7:
break;
case8:
break;
case9:
break;
default:gotott3;
}
break;
}
case2:
lcdreset();read_clockS();naozhonglib();
tt4:
gn10=gotkey();
if(gn10!=16)gotott4;
gn10=gotkey();
if(gn10==16)gotott4;
break;
case3:
lcdreset();rj3lib();
tt6:
gn10=gotkey();
if(gn10!=16)gotott6;
gn10=gotkey();
if(gn10==16)gotott6;
if(gn10==10)
//键值为10就初始化系统
{
lcdreset();restlib();Init_DS18B20();Init_1302();DelayM(3000);cxjmlib();
}
if(gn10==11)
//键值为11取消初始化,返回程序主界面;
{
lcdreset();cxjmlib();
}
break;
tt8:
gn10=gotkey();
if(gn10!=16)gotott8;
gn10=gotkey();
if(gn10==16)gotott8
;
break;
}
default:gotott1;
}
}
*/
voidread_clockss(x)
{
hh=Read_One_Byte(x*4+0x20);
mm=Read_One_Byte(x*4+0x21);
ss=Read_One_Byte(x*4+0x22);
week_clock_set=Read_One_Byte(x*4+0x23);
}
voidWrite_clockss(x)
{
Write_One_Byte(x*4+0x20,hh);
Write_One_Byte(x*4+0x21,mm);
Write_One_Byte(x*4+0x22,ss);
Write_One_Byte(x*4+0x23,week_clock_set);
}
/*bitcmp_clock()
//每分钟检测一次
{
unsignedchara1;
for(a1=0;a1<32;a1++)
{
read_clockss(a1);
//acc0=a1*4+0x20
...acc1...acc2...acc3
if((hh==clock_data[0])&&(mm==clock_data[1]))
{return1;}
}
return0;
}*///unsignedcharyy,mo,dd,xq,hh,mm,ss;//
定义时间映射全局变量(专用寄存器)
voidclr_xs()
{
lcdwc(0x80+FIRST_ADDR);hzkdis("");
lcdwc(0x90+FIRST_ADDR);hzkdis("");
lcdwc(0x88+FIRST_ADDR);hzkdis("");
lcdwc(0x98+FIRST_ADDR);hzkdis("");
}
voiddisp_set_clock()
{
unsignedcharsel;
ucharstr[2];
str[2]=0;
lcdwc(0x91+FIRST_ADDR);
str[0]=yy/16+0x30;
str[1]=yy%16+0x30;
hzkdis2(str);
hzkdis2("年");
str[0]=mo/16+0x30;
str[1]=mo%16+0x30;
hzkdis2(str);
hzkdis2("月");
str[0]=dd/16+0x30;
str[1]=dd%16+0x30;
hzkdis2(str);
hzkdis2("日");
lcdwc(0x89+FIRST_ADDR);
str[0]=hh/16+0x30;
str[1]=hh%16+0x30;
hzkdis2(str);
hzkdis2("时");
str[0]=mm/16+0x30;
str[1]=mm%16+0x30;
hzkdis2(str);
hzkdis2("分");
str[0]=ss/16+0x30;
str[1]=ss%16+0x30;
hzkdis2(str);
hzkdis2("秒");
//
lcdwc(0x98+FIRST_ADDR);
sel=(read_clock(0x8b))%16;//字节低4位的BCD码放入sel
lcdwc(0x9c+FIRST_ADDR);//写入指定区域(97H第二行第8个字)
if(sel==7)
{hzkdis("07");}
//
if(sel==6)
{hzkdis("06");}
//
if(sel==5)
{hzkdis("05");}
//
if(sel==4)
{hzkdis("04");}
//
if(sel==3)
{hzkdis("03");}
//
if(sel==2)
{hzkdis("02");}
//
if(sel==1)
{hzkdis("01");}
//星期一
lcdwc(0x9a+FIRST_ADDR);
hzkdis("星期");
}voiddisp_clock_set()
{
ucharstr[2];
str[2]=0;
lcdwc(0x89+FIRST_ADDR);
str[0]=hh/16+0x30;
str[1]=hh%16+0x30;
hzkdis2(str);
hzkdis2("时");
str[0]=mm/16+0x30;
str[1]=mm%16+0x30;
hzkdis2(str);
hzkdis2("分");
/*
str[0]=ss/16+0x30;
str[1]=ss%16+0x30;
hzkdis2(str);
hzkdis2("秒");
*/
//
week_clock_set
//
lcdwc(0x98+FIRST_ADDR);
//
hzkdis2("");
}/*bitset_xs_1_flicker(ucharx,bity)
//修改数据标志
{
uchara,str[2];
str[1]=0x1e;
bitflicker=0;
key_ok=1;
while(gotkey()!=16){}
xs_fl0:
while(1)
{
for
(a=0;a<20;a++)
//
{
delay(500);
if(gotkey()!=16)gotoxs_fl1;
key_ok=0;
}xs_fl1:
lcdwc(x+FIRST_ADDR);
if(flicker){hzkdis2("_");}
else{str[0]=0x31;
str[1]=0x1e;
hzkdis2(str);
}
flicker=~flicker;
a=gotkey();
if((a<10)&&(key_ok==0)){key_ok=1;y=a*16+(y%16);gotoxs_lf2;}
if(a==0x0b)return(y);
if(a==10)return(y);
if(a==13)
{
lcdwc(x+FIRST_ADDR);
str[0]=y/16+0x30;
str[1]=y%16+0x30;
hzkdis2(str);
return(y);
}
if(a==14)gotoxs_lf2;
}
}
*/ucharset_xs_flicker(ucharx,y)
//修改数据标志
{
uchara,str[2];
bitflicker=0;
key_ok=1;
while(gotkey()!=16){}
xs_fl0:
while(1)
{
for
(a=0;a<20;a++)
{
delay(500);
if(gotkey()!=16)gotoxs_fl1;
key_ok=0;
}xs_fl1:
lcdwc(x+FIRST_ADDR);
if(flicker){hzkdis2("_");}
else{str[0]=y/16+0x30;
str[1]=y%16+0x30;
hzkdis2(str);
}
flicker=~flicker;
a=gotkey();
if((a<10)&&(key_ok==0)){key_ok=1;y=a*16+(y%16);gotoxs_lf2;}
if(a==0x0b)return(y);
if(a==10)return(y);
if(a==13)
{
lcdwc(x+FIRST_ADDR);
str[0]=y/16+0x30;
str[1]=y%16+0x30;
hzkdis2(str);
return(y);
}
if(a==14)gotoxs_lf2;
}xs_lf2:
while(1)
{
for
(a=0;a<20;a++)
{
delay(500);
if(gotkey()!=16)gotoxs_fl3;
key_ok=0;
}
xs_fl3:
lcdwc(x+FIRST_ADDR);
if(flicker)
{
str[0]=y/16+0x30;
str[1]=0x5f;
hzkdis2(str);
}
else{str[0]=y/16+0x30;
str[1]=y%16+0x30;
hzkdis2(str);
}
flicker=~flicker;
a=gotkey();
if((a<10)&&(key_ok==0))
{
key_ok=1;
y=(y/16)*16+a;
lcdwc(x+FIRST_ADDR);
str[0]=y/16+0x30;
str[1]=y%16+0x30;
hzkdis2(str);
return(y);
}
if(a==0x0b)return(y);
if(a==10)return(y);
if(a==13)
gotoxs_fl0;
if(a==14)
{
lcdwc(x+FIRST_ADDR);
str[0]=y/16+0x30;
str[1]=y%16+0x30;
hzkdis2(str);
return(y);
}
}}
voidxs_pls()
{
clr_xs();
lcdwc(0x91+FIRST_ADDR);hzkdis("设置已经保存");
delay(10000);
}voidset_clock()
{
while(1)
{
lcdreset();
//
read_clockS();
clr_xs();
lcdwc(0x82+FIRST_ADDR);hzkdis("时间设置");
disp_set_clock();
set_cl1:
yy=set_xs_flicker(0x91,yy);
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
new_time();xs_pls();
return;}
set_cl2:
mo=set_xs_flicker(0x93,mo);
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
new_time();
xs_pls();
return;}
if(gotkey()==13)gotoset_cl1;
set_cl3:
dd=set_xs_flicker(0x95,dd);
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
new_time();xs_pls();
return;}
if(gotkey()==13)gotoset_cl2;
set_cl4:
hh=set_xs_flicker(0x89,hh);
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
new_time();xs_pls();
return;}
if(gotkey()==13)gotoset_cl3;
set_cl5:
mm=set_xs_flicker(0x8b,mm);
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
new_time();xs_pls();
return;}
if(gotkey()==13)gotoset_cl4;
set_cl6:
ss=set_xs_flicker(0x8d,ss);
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
new_time();xs_pls();
return;}
if(gotkey()==13)gotoset_cl5;set_cl7:
xq=set_xs_flicker(0x9c,xq);
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
new_time();xs_pls();
return;}
if(gotkey()==13)gotoset_cl6;
gotoset_cl7;
}
}
clock_set(ucharx)
//设置闹钟{
ucharstr[2];
str[2]=0;
clkset1:if(x==0){x=1;}
if(x>32){x=1;}
while(1)
{
lcdreset();
read_clockss(x);
//改为要修改的闹钟
clr_xs();
lcdwc(0x82+FIRST_ADDR);hzkdis("闹钟设置");
lcdwc(0x87+FIRST_ADDR);
str[0]=x/10+0x30;
str[1]=x%10+0x30;
hzkdis2(str);
disp_clock_set();
delay(100);
hh=set_xs_flicker(0x89,hh);
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
Write_clockss(x);xs_pls();
return;}
if(gotkey()==13){
Write_clockss(x);x=x-1;gotoclkset1;}
if(gotkey()==14){
Write_clockss(x);x=x+1;gotoclkset1;}
mm=set_xs_flicker(0x8b,mm);
set1:
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
Write_clockss(x);xs_pls();
return;}
if(gotkey()==13){
Write_clockss(x);
x=x-1;gotoclkset1;}
if(gotkey()==14){
Write_clockss(x);
x=x+1;gotoclkset1;}
gotoset1;
/*
ss=set_xs_flicker(0x8d,ss);
set2:
if(gotkey()==11){
read_clockS();return;}
if(gotkey()==10){
Write_clockss(x);xs_pls();
return;}
if(gotkey()==13){
Write_clockss(x);x=x-1;gotoclkset1;}
if(gotkey()==14){
Write_clockss(x);
x=x+1;gotoclkset1;}
gotoset2;*/
}
}
/*------------------------------------------------
------------------------------------------------*/
/*****************************************************************************/
/******************************************************************************/
main()
{
uchari;
lcdreset();
Init_DS18B20();
read_clockS();
while(1)
{
updata();
//主屏幕时间刷新
if(ss==0)
//闹钟打铃判断
{
for(i=1;i<33;i++)
{
if(hh==Read_One_Byte(i*4+0x20))
{
if(mm==Read_One_Byte(i*4+0x21))
{
bell_on=1;
gotomain1;
}
}
}
}main1:
if(bell_time>ss)
{
if(bell_on==1){bell=0;
speaker=~speaker;delay(5000);}
}
else
{
bell=1;speaker=1;bell_on=0;
}
delay(500);
i=gotkey();
if(i==key_set)
{
set_0:
lcdreset();
key_ok=0;
delay(10);
lcdwc(0x80+FIRST_ADDR);hzkdis("1.设置时间");
lcdwc(0x90+FIRST_ADDR);hzkdis("2.设置闹时");
lcdwc(0x88+FIRST_ADDR);hzkdis("3.系统初始化");
lcdwc(0x98+FIRST_ADDR);hzkdis("4.返回");
set_1:
if(gotkey()==16)gotoset_1;
switch(gotkey())
{
case1:
set_clock();break;
case2:
clock_set(1);break;
case3:
DelayM(2000);if(gotkey()==3)lcdreset();restlib();DelayM(4000);lcdreset();Init_1302();Init_DS18B20();read_clockS();break;
}
if(gotkey()==0x03)gotoset_2;
if(gotkey()!=0x04)gotoset_0;
set_2:
lcdreset();
}
}
}
voidnew_time(void)
{
write_clock(0x8e,0x00);//允许写操作
write_clock(0x8c,yy);//年
write_clock(0x88,mo);//月
write_clock(0x86,dd);//日
write_clock(0x84,hh);//小时
write_clock(0x82,mm);//分钟
write_clock(0x80,ss);//秒
write_clock(0x8a,xq);//星期
write_clock(0x90,0xa5);//充电
write_clock(0x8e,0x80);//禁止写操作
}yf.h#ifndef__YF_H__
#define__YF_H__//定义累加器A中的各位
sbita0
=ACC^0;
sbita1
=ACC^1;
sbita2
=ACC^2;
sbita3
=ACC^3;
sbita4
=ACC^4;
sbita5
=ACC^5;
sbita6
=ACC^6;
sbita7
=ACC^7;
#defineuchar
unsignedchar
#definekey_set
10
#definekey_esc
11/****************************************************************************/
//定义全局变量sbitKEY_Y=P3^3;
sbitKEY_N=P3^2;
/*****************************************************************************/
//24lc08
//24存储器
#endif
24c08.c#include<reg51.h>
#include<intrins.h>
#include<YF.h>#defineTRUE
1
#defineFALSE
0
#defineDelay2408_TIME
2//经实验,不要小于50!否则可能造成时序混乱sbitSCL
=P1^6;
sbitSDA
=P1^7;
//
24c08
/******************************************************************************/
/*24C08.c*/
//调用方式如下:
//Write_One_Byte(0x10,0x04);
//k=Read_One_Byte(0x10);
/**********函数定义************/
voidDelay2408(unsignedintt)/*延时函数*/
{
while(t!=0)
t--;
}voidI2C_Start(void)
{
/*启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变*/
SCL=0;
SDA=1;
Delay2408(Delay2408_TIME);
SCL=1;
Delay2408(Delay2408_TIME);
SDA=0;
Delay2408(Delay2408_TIME);
SCL=0;
Delay2408(Delay2408_TIME);
}voidI2C_Stop(void)
{
/*终止I2C总线,当SCL为高电平时使SDA产生一个正跳变*/
SCL=0;
SDA=0;
Delay2408(Delay2408_TIME);
SCL=1;
Delay2408(Delay2408_TIME);
SDA=1;
Delay2408(Delay2408_TIME);
SCL=0;
Delay2408(Delay2408_TIME);
}
voidSEND_0(void)
/*SENDACK*/
{
/*发送0,在SCL为高电平时使SDA信号为低*/
SDA=0;
SCL=1;
Delay2408(Delay2408_TIME);
SCL=0;
Delay2408(Delay2408_TIME);
}voidSEND_1(void)
{
/*发送1,在SCL为高电平时使SDA信号为高*/
SDA=1;
SCL=1;
Delay2408(Delay2408_TIME);
SCL=0;
Delay2408(Delay2408_TIME);
}bitCheck_Acknowledge(void)
{
/*发送完一个字节后检验设备的应答信号*/
uchara;
SCL=0;
Delay2408(Delay2408_TIME);
SDA=1;
Delay2408(Delay2408_TIME);
SCL=1;
Delay2408(Delay2408_TIME);
a=255;
while(SDA==1)
{
a--;
if(a==0){SCL=0;returnFALSE;}
}
SCL=0;
returnTRUE;
}voidWriteI2CByte(ucharb)
{
/*向I2C总线写一个字节*/
unsignedchari;
for(i=0;i<8;i++)
{
if((b<<i)&0x80)
SEND_1();
else
SEND_0();
}
}unsignedcharReadI2CByte(void)
{
/*从I2C总线读一个字节*/
unsignedcharb=0,i;
for(i=0;i<8;i++)
{
SCL=0;
Delay2408(4);
SDA=1;
/*释放总线*/
Delay2408(4);
SCL=1;
/*接受数据*/
Delay2408(4);
if(SDA==1)
{
b=b<<1;
b=b|0x01;
}
else
b=b<<1;
Delay2408(4);
SCL=0;
}
returnb;
}/**********以下为读写24c02的函数***********************************************/
voidWrite_One_Byte(unsignedcharaddr,unsignedcharthedata)
{
bitacktemp=1;
//
I2C_Stop();
I2C_Start();
WriteI2CByte(0xa0);
acktemp=Check_Acknowledge();
WriteI2CByte(addr);
/*address*/
acktemp=Check_Acknowledge();
WriteI2CByte(thedata);
/*thedata*/
acktemp=Check_Acknowledge();
I2C_Stop();
Delay24
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 亚热带水果种植园病虫害综合防治考核试卷
- 木竹浆制造过程中的故障分析与排除考核试卷
- 信号设备在智能物流车辆追踪系统中的应用考核试卷
- 乳饮料的感官评价方法与消费者接受度考核试卷
- 杂粮加工质量控制体系构建考核试卷
- 国际货代与物流可持续发展战略考核试卷
- 矿山尾矿处理与环保产业发展考核试卷
- 货运枢纽站冷链物流系统规划与实施考核试卷
- 家用电器售后服务质量提升考核试卷
- 遗传病环境因素影响
- T-CACM 1237-2019 中医内科临床诊疗指南 眩晕病(原发性高血压)
- 2023中国煎炸菜品趋势报告 -大数据赋能餐企持久创新力
- 高压电工安全知识培训
- 吊装作业安全管理规范(三篇)
- 废弃物管理程序(含表格)
- 弘扬科学家精神
- 2022年4月自考00448学校管理学试题及答案含解析
- 巴朗3500 纯单词表
- 反保险欺诈主题教育课件
- 应急救护知识培训方案及流程
- 洗发水的调查报告
评论
0/150
提交评论