51单片机电子钟程序设计.docx
- 文档编号:2900281
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:21
- 大小:18.49KB
51单片机电子钟程序设计.docx
《51单片机电子钟程序设计.docx》由会员分享,可在线阅读,更多相关《51单片机电子钟程序设计.docx(21页珍藏版)》请在冰豆网上搜索。
51单片机电子钟程序设计
51单片机电子钟程序设计
摘要:
硬件部分基于51单片机、ds1302时钟芯片、ds18b20温度芯
片、以及1602液晶显示的实时时间和实时温度显示。
同时可通过按键
设置年、月、日、时、分、星期。
并且可以设置闹钟当闹钟时间到时蜂鸣
器持续发出滴..声同时led灯不停闪烁且在一分钟内没有按指定停止按键
闹钟将自动停止。
。
。
软件部分#includereg52.h#de...
硬件部分
基于51单片机、ds1302时钟芯片、ds18b20温度芯片、以及1602液
晶显示的实时时间和实时温度显示。
同时可通过按键设置年、月、
日、时、分、星期。
并且可以设置闹钟当闹钟时间到时蜂鸣器持续发出
滴..声同时led灯不停闪烁且在一分钟内没有按指定停止按键闹钟将自动
停止。
。
。
软件部分
#includereg52.h
#defineucharunsignedchar
#defineuintunsignedint
sbitspk=P1;
sbitled=P1;
sbitDQ=P1;
sbitRS=P2;
sbitRW=P2;
sbitEN=P2;
sbitkey1=P2;
sbitkey2=P2;
sbitkey3=P2;
sbitkey4=P2;
sbitIO=P3;
sbitRST=P3;
sbitSCLK=P3;
ucharcodetable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
intnian,xing,yue,ri,shi,fen,miao;
ucharnum,temp,c,d,time[7],a,b,aa,bb,ns,ng,ys,yg,rs,rg,ss,sg,fs,fg,ms,mg,flag;
/*******************1602************************/
voiddelay(intz)
{
intx,y;
for(x=z;xx--)
for(y=100;yy--);
}
voidwrite_com(ucharcom)//写命令
{
RS=0;
P0=com;
delay(5);
EN=1;
delay(5);
EN=0;
}
voidwrite_data(uchardate)//写数据
{
RS=1;
P0=date;
delay(5);
EN=1;
delay(5);
EN=0;
}
voidinit()//初始化
{
RW=0;
EN=0;
write_com(0x38);//显示模式设置
write_com(0x0c);//开显示不显示光标不闪
write_com(0x06);//写一个字符地址指针光标加一整屏不移动
write_com(0x01);//显示清零
write_com(0x80+0x04);
write_data(‘2’);
write_com(0x80+0x05);
write_data(‘0’);
write_com(0x80+0x00);
write_data(‘c’);
write_com(0x80+0x01);
write_data(‘a’);
write_com(0x80+0x02);
write_data(‘i’);
write_com(0x80+0x4e);
write_data(0xdf);
write_com(0x80+0x4f);
write_data(‘C’);
write_com(0x80+0x4b);
write_data(0x2e);//显示”。
”
}
/**************DS18B20****************/
voiddelay1(unsignedintt)//延时函数
{
while(t--);
}
voidinit1()//初始化
{
ucharn=0;
DQ=1;//DQ复位
delay1(8);
DQ=0;//主机将DQ拉低
delay1(80);//大于480us的延时
DQ=1;
delay1(5);//延时15~60us
n=DQ;
delay1(5);//若n=0初始成功n=1初始失败(可设置返回值查看n是否为
1)
}
voidwrite_byte(uchardat)//写入一个字节
{
uinti;
for(i=0;ii++)
{
DQ=0;
DQ=dat0x01;
delay1(12);
DQ=1;
dat=1;
}
delay1(4);
}
ucharread_byte()//读入一个字节
{
uintk=0;
ucharvalue=0;
for(k=0;kk++)
{
DQ=0;
value=1;
DQ=1;
if(DQ)
value|=0x80;
delay1(4);
}
returnvalue;
}
ucharread_temp()//读取温度函数
{
uchara=0,b=0;
init1();
write_byte(0xcc);
write_byte(0x44);
delay1(200);
init1();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
c=b;
d=a;
b=4;
b+=(a0xf0)4;
returnb;
}
/***********************1302**********************/
voidwirte_byte1(uchardate)//写入一个字节
{
uchari;
for(i=8;ii--)
{
IO=date0x01;
SCLK=0;
SCLK=1;
date=date1;
}
}
ucharread_byte1()//读一个字节
{
uchardat,i;
for(i=8;ii--)
{
dat=dat1;
SCLK=0;
if(IO)
dat=dat|0x80;
SCLK=1;
}
return(dat);
}
voidwrite_ds1302(ucharadd,uchardate)//将数据写入1302中
{
RST=0;
SCLK=0;
RST=1;
wirte_byte1(add);
wirte_byte1(date);
RST=0;
SCLK=1;
}
ucharread_ds1302(ucharadd)//读出1302中数据
{
uchartemp;
RST=0;
SCLK=0;
RST=1;
wirte_byte1(add);
temp=read_byte1();
RST=0;
SCLK=0;
return(temp);
}
ucharhuan_BCD(uintz)//将数据转换成BCD
{
uinta,b;
a=z/10;
b=z%10;
a=a0xff;
b=b0xff;
a=4;
a=a|b;
return(a);
}
voidxian_shi()//液晶显示函数
{
if(b==0a==0)
{
ms=time[0]/16;
mg=time[0]%16;
fs=time[1]/16;
fg=time[1]%16;
fen=fs*10+fg;
ss=time[2]/16;
sg=time[2]%16;
shi=ss*10+sg;
rs=time[3]/16;
rg=time[3]%16;
ri=rs*10+rg;
ys=time[4]/16;
yg=time[4]%16;
yue=ys*10+yg;
ns=time[6]/16;
ng=time[6]%16;
nian=ns*10+ng;
xing=time[5];
}
if(a==1|b==1)
{
ss=shi/10;
sg=shi%10;
write_com(0x80+0x41);
write_data(0xff);
write_com(0x80+0x40);
write_data(table[ss]);
write_com(0x80+0x41);
write_data(table[sg]);
}
if(a==2|b==2)
{
fs=fen/10;
fg=fen%10;
write_com(0x80+0x44);
write_data(0xff);
write_com(0x80+0x43);
write_data(table[fs]);
write_com(0x80+0x44);
write_data(table[fg]);
}
if(a==3)
{
rs=ri/10;
rg=ri%10;
write_com(0x80+0x0d);
write_data(0xff);
write_com(0x80+0x0c);
write_data(table[rs]);
write_com(0x80+0x0d);
write_data(table[rg]);
}
if(a==4)
{
ys=yue/10;
yg=yue%10;
write_com(0x80+0x0a);
write_data(0xff);
write_com(0x80+0x09);
write_data(table[ys]);
write_com(0x80+0x0a);
write_data(table[yg]);
}
if(a==5)
{
ns=nian/10;
ng=nian%10;
write_com(0x80+0x07);
write_data(0xff);
write_com(0x80+0x06);
write_data(table[ns]);
write_com(0x80+0x07);
write_data(table[ng]);
}
if(a==6)
{
write_com(0x80+0x0f);
write_data(0xff);
writ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 电子钟 程序设计