单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx

上传人:b****6 文档编号:12529182 上传时间:2023-06-06 格式:DOCX 页数:16 大小:17.71KB
下载 相关 举报
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第1页
第1页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第2页
第2页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第3页
第3页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第4页
第4页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第5页
第5页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第6页
第6页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第7页
第7页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第8页
第8页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第9页
第9页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第10页
第10页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第11页
第11页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第12页
第12页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第13页
第13页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第14页
第14页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第15页
第15页 / 共16页
单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx

《单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx》由会员分享,可在线阅读,更多相关《单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx(16页珍藏版)》请在冰点文库上搜索。

单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计.docx

单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计

单片机驱动DS1302时间DS18B20温度12864液晶显示完整程序设计

程序说明:

这是一个用51单片机驱动DS1302时间模块+DS18B20温度传感器模块+12864液晶显示完整程序设计实例,有四个键盘KEY0到KEY3,key0是修改时间的首先是秒到分到时到年到月到日到星期key1是加1key2是减一在修改时间状态再按一下key3的时候就出去并修改时间日期,在平时状态按着key3再按着key2就会打开lcd的灯单单是只按key3那就是把灯关了。

文件一:

DS1302驱动.c

#include;

//ds1302

sbitsclk=P0^3;

sbitio=P0^4;

sbitrst=P0^5;

sbitacc0=ACC^0;

sbitacc1=ACC^1;

sbitacc2=ACC^2;

sbitacc3=ACC^3;

sbitacc4=ACC^4;

sbitacc5=ACC^5;

sbitacc6=ACC^6;

sbitacc7=ACC^7;

delay()

{

unsignedchari;

i=10;

i=10;

i=10;

i=10;

i=10;

i=10;

i=10;}

w_1302(unsignedchardat,unsignedcharshu){//写一个八位的数去DS1302

//上升效;;;选写地址再写数据

ACC=dat;//地址

sclk=0;

rst=1;//

io=acc0;///

sclk=0;

delay();

sclk=1;

io=acc1;

sclk=0;

delay();

sclk=1;

io=acc2;

sclk=0;

delay();

sclk=1;

io=acc3;

sclk=0;

delay();

sclk=1;

io=acc4;

sclk=0;

delay();

sclk=1;

io=acc5;

sclk=0;

delay();

sclk=1;

io=acc6;

sclk=0;

delay();

sclk=1;

io=acc7;

sclk=0;

delay();

sclk=1;///

//sclk=0;

ACC=shu;

//数据

io=acc0;///

sclk=0;

delay();

sclk=1;

io=acc1;

sclk=0;

delay();

sclk=1;

io=acc2;

sclk=0;

delay();

sclk=1;

io=acc3;

sclk=0;

delay();

sclk=1;

io=acc4;

sclk=0;

delay();

sclk=1;

io=acc5;

sclk=0;

delay();

sclk=1;

io=acc6;

sclk=0;

delay();

sclk=1;

io=acc7;

sclk=0;

delay();

sclk=1;///

rst=0;

sclk=0;

}///写完毕

unsignedcharr_1302(unsignedcharADD){

sclk=0;

rst=1;

ACC=ADD;

//地址

io=acc0;///

sclk=0;

delay();

sclk=1;

io=acc1;

sclk=0;

delay();

sclk=1;

io=acc2;

sclk=0;

delay();

sclk=1;

io=acc3;

sclk=0;

delay();

sclk=1;

io=acc4;

sclk=0;

delay();

sclk=1;

io=acc5;

sclk=0;

delay();

sclk=1;

io=acc6;

sclk=0;

delay();

sclk=1;

io=acc7;

sclk=0;/////

delay();

sclk=1;

delay();

sclk=0;

acc0=io;

delay();

sclk=1;

delay();

sclk=0;

acc1=io;

delay();

sclk=1;

delay();

sclk=0;

acc2=io;

delay();

sclk=1;

delay();

sclk=0;

acc3=io;

delay();

sclk=1;

delay();

sclk=0;

acc4=io;

delay();

sclk=1;

delay();

sclk=0;

acc5=io;

delay();

sclk=1;

delay();

sclk=0;

acc6=io;

delay();

sclk=1;

delay();

sclk=0;

acc7=io;

delay();

rst=0;

sclk=0;

return(ACC);

}

ds1302_c()

{

w_1302(0x80,0x80);

w_1302(0x8e,0x00);

w_1302(0x80,0x50);//;秒

w_1302(0x82,0x06);//分=0

w_1302(0x84,0x01);//时=0

w_1302(0x86,0x22);//

w_1302(0x88,0x11);//

w_1302(0x8a,0x04);//

w_1302(0x8b,0x07);//

w_1302(0x8e,0x80);

w_1302(0x90,0xa6);

w_1302(0x80,0x00);

}

main(){

rst=0;

ds1302_c();

for(;;){

P2=r_1302(0x81);

}

}

---------------------------------------------------------------------------------------------------------------

文件2:

完全版有关灯键.c

#include;

sbitdi=P2^7;////////定义引脚

sbitrw=P2^6;

sbite=P2^5;

sbitcs1=P2^4;

sbitcs2=P2^1;

sbitlcd_d=P2^0;

sbitkey0=P2^3;

sbitkey1=P2^2;

sbitkey2=P1^0;

sbitkey3=P1^1;

sbitP07=P0^7;

sbitP06=P0^6;

sbitP05=P0^5;

sbitP04=P0^4;

sbitP03=P0^3;

//ds1302

sbitsclk=P1^4;

sbitio=P1^3;

sbitrst=P1^2;

sbitacc0=ACC^0;

sbitacc1=ACC^1;

sbitacc2=ACC^2;

sbitacc3=ACC^3;

sbitacc4=ACC^4;

sbitacc5=ACC^5;

sbitacc6=ACC^6;

sbitacc7=ACC^7;

typedefunsignedcharbyte;

typedefunsignedintword;

sbitKEY=P3^7;//根据实际情况定义端口ds1820

unsignedcharkey_time=0;

//全局变量

//////////////////////////////////温度

//ds18b20数字温度传感器模块程序

voiddelay1(worduseconds)

{

for(;useconds>;0;useconds--);

}

//复位

byteow_reset(void)

{

bytepresence;

KEY=0;//pullDQlinelow

delay1(29);//leaveitlowfor480us

KEY=1;//allowlinetoreturnhigh

delay1(3);//waitforpresence

presence=KEY;//getpresencesignal

delay1(25);//waitforendoftimeslot

return(presence);//presencesignalreturned

}//0=presence,1=nopart

//从1-wire总线上读取一个字节

byteread_byte(void)

{

bytei;

bytevalue=0;

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

{

value>;>;=1;

KEY=0;//pullDQlowtostarttimeslot

KEY=1;//thenreturnhigh

delay1

(1);//for(i=0;i;0;i--)//writesbyte,onebitatatime

{

KEY=0;//pullDQlowtostarttimeslot

KEY=val&0x01;

delay1(5);//holdvalueforremainderoftimeslot

KEY=1;

val=val/2;

}

delay1(5);

}

//读取温度

floatwendu(void)

{

floattem;

union{

bytec[2];

intx;

}temp;

ow_reset();

write_byte(0xCC);//SkipROM

write_byte(0xBE);//ReadScratchPad

temp.c[1]=read_byte();

//lsd

temp.c[0]=read_byte();

//msd

ow_reset();

write_byte(0xCC);//SkipROM

write_byte(0x44);//StartConversion

tem=0.0;

if(temp.x&0x01)tem+=0.0625;temp.x>;>;=1;

if(temp.x&0x01)tem+=0.125;temp.x>;>;=1;

if(temp.x&0x01)tem+=0.25;temp.x>;>;=1;

if(temp.x&0x01)tem+=0.5;temp.x>;>;=1;

tem+=temp.x;

returntem;

}

voidcs1_lcd(){////////选择左边

bita=1;

cs1=a;

cs2=!

a;

}

voidcs2_lcd(){

////////选择右边

bita=1;

cs1=!

a;

cs2=a;

}

voidbusy_lcd(){//////判断忙

bita=1;

di=!

a;

rw=a;

e=a;

while(P07==a);

}

w_lcd(unsignedb){///写a到12864

bita=1;

busy_lcd();

rw=!

a;

di=a;

P0=b;

e=a;

e=!

a;

}

voiddis_lcd(){//打开显示选择第一行显示

bita=1;

busy_lcd();

rw=!

a;

di=!

a;

P0=0x3f;

e=a;

e=!

a;

P0=0xc0;

e=a;

e=!

a;

}

y_lcd(unsigneda){///由A确定y轴

bitb=1;

busy_lcd();

rw=!

b;

di=!

b;

P0=a;

P07=b;

P06=!

b;

P05=b;

P04=b;

P03=b;

e=b;

e=!

b;

}

x_lcd(unsigneda){//由a确定X轴

bitb=1;

busy_lcd();

rw=!

b;

di=!

b;

P0=a;

P07=!

b;

P06=b;

e=b;

e=!

b;

}

voidclr_lcd(){///清屏

bita=0;

unsignedx,y,date,i;

cs1_lcd();

date=0x00;

for(i=0;i;63){

x=x-64;

cs2_lcd();

}

elsecs1_lcd();

i=0;

if(k;>;=4;

d12864_lcd(add,y,time);//秒十位

add=add-8;;

k+=2;

}

d12864_lcd(40+64,y,10);//:

d12864_lcd(16+64,y,10);//:

显示两点

//

time1[5]=r_1302(0x8b);

d12864_lcd(64,4,16);//:

d12864_lcd(64+16,4,17);//:

r_1302(0x8b);//读星期

d12864_lcd(64+32,4,r_1302(0x8b));//:

读星期几`并显示

////

y=2;//在第四行显示

add=56+16;

time=r_1302(0x87);

time1[3]=time;

d12864_lcd(add,y,time&0x0f);//:

显示日

time=r_1302(0x87);

time&=0xf0;

time>;>;=4;

add-=8;

d12864_lcd(add,y,time);//显示日的十位

add-=8;

add-=8;

time1[4]=time=r_1302(0x89);

d12864_lcd(add,y,time&0x0f);//:

显示月

time=r_1302(0x89);

time&=0xf0;

time>;>;=4;

add-=8;

d12864_lcd(add,y,time);//显示月的十位

add-=8;

add-=8;

time1[6]=time=r_1302(0x8d);

d12864_lcd(add,y,time&0x0f);//:

显示年

time=r_1302(0x8d);

time&=0xf0;

time>;>;=4;

add-=8;

d12864_lcd(add,y,time);//显示年的十位

//////读完

d12864_lcd(40+16,y,11);//:

d12864_lcd(16+16,y,11);//:

显示两/

add-=8;

d12864_lcd(add,y,0);//:

0

add-=8;

d12864_lcd(add,y,2);//:

2

d12864_lcd(0,4,18);//:

d12864_lcd(16,4,19);//:

we1=wendu();

we2=we1/10;

d12864_lcd(32,4,we2);//:

2

we2=we1-we2*10;

d12864_lcd(40,4,we2);//:

显示温度值

cs1_lcd();

y_lcd(4);

x_lcd(50);

w_lcd(0x18);

x_lcd(51);

w_lcd(0x18);

}

/////////////////////////显示时间完毕

hei_lcd(unsignedcharx,y){

//全黑用来做闪标用

chariy,ix,di,i;

di=0x00;

if(x>;63){

x=x-64;

cs2_lcd();

}

elsecs1_lcd();

i=0;

for(iy=0;iy;0;useconds--)

key_t();

}

time_key(){

unsignedcharkeyd,ktime;

unsignedintyear;

wordkk;

keyd=0;

kk=10000;///闪动快慢

if(!

key0){

for(;;){

if(!

key0){

keyd=keyd+1;

delay1(500);

if(keyd>;8)keyd=1;

key_time=0;//////每设牟换一个就把存设时间清0

key0=1;

while(!

key0);

key0=1;

}

////////////////////////闪程序

if(keyd==1){//=1进入秒闪同时设置秒时间

key_time=(time1[0]&0x0f)+((time1[0]&0xf0)>;>;4)*10;//将数姐里的数度到key_time里10进制

hei_lcd(112,0);//xy

delay11(kk);//////闪动快慢

if(key_time>;=60)key_time=0;

d12864_lcd(112,0,key_time/10);

d12864_lcd(120,0,key_time-(key_time/10)*10);

time1[0]=(((key_time/10);>;4)*10;//将数姐里的数度到key_time里10进制

hei_lcd(88,0);//xy

delay11(kk);//////闪动快慢

if(key_time>;=60)key_time=0;

d12864_lcd(88,0,key_time/10);

d12864_lcd(96,0,key_time-(key_time/10)*10);

delay1(10000);

time1[1]=(((key_time/10);>;4)*10;//将数姐里的数度到key_time里10进制

hei_lcd(64,0);//xy

delay11(kk);//////闪动快慢

if(key_time>;=24)key_time=0;

d12864_lcd(64,0,key_time/10);

d12864_lcd(72,0,key_time-(key_time/10)*10);

time1[2]=(key_time/10);>;4)*10;//将数姐里的数度到key_time里10进制

hei_lcd(16,2);//xy

delay11(kk);//////闪动快慢

if(key_time>;99)key_time=0;

d12864_lcd(16,2,key_time/10);

d12864_lcd(24,2,key_time-(key_time/10)*10);

time1[6]=(key_time/10);>;4)*10;//将数姐里的数度到key_time里10进制

hei_lcd(40,2);//xy

delay11(kk);//////闪动快慢

if(key_time>;=13)key_time=0;

d12864_lcd(40,2,key_time/10);

d12864_lcd(48,2,key_time-(key_time/10)*10);

time1[4]=(key_time/10);>;4)*10;//将数姐里的数度到key_time里10进制

year=(time1[4]&0x0f)+(((time1[4]&0xf0)>;>;4)*10)+2000;

switch(time1[4]){

//计算闰月

case1:

ktime=31;break;

case3:

ktime=31;break;

case5:

ktime=31;break;

case7:

ktime=31;break;

case8:

ktime=31;break;

case10:

ktime=31;break;

case12:

ktime=31;break;

case4:

ktime=30;break;

case6:

ktime=30;break;

case9:

ktime=30;break;

case11:

ktime=30;break;

case2:

if(year%4==0&&year%100!

=0||year%400==0)ktime=29;

elsektime=29;break;

}

hei_lcd(64,2);//xy

delay11(kk);//////闪动快慢

if(key_time>;ktime)key_time=0;

d12864_lcd(64,2,key_time/10);

d12864_lcd(72,2,key_time-(key_time/10)*10);

time1[3]=(key_time/10);7)key_time=0;

d12864_lcd(96,4,key_time);

time1[5]=key_time;

delay1(10000);

time1[5]=key_time;//换成BCD码存到数组里

}

////////////////

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2