12864液晶电子钟具有按键可调闹钟温度显示资料.docx

上传人:b****6 文档编号:8157895 上传时间:2023-01-29 格式:DOCX 页数:16 大小:18.45KB
下载 相关 举报
12864液晶电子钟具有按键可调闹钟温度显示资料.docx_第1页
第1页 / 共16页
12864液晶电子钟具有按键可调闹钟温度显示资料.docx_第2页
第2页 / 共16页
12864液晶电子钟具有按键可调闹钟温度显示资料.docx_第3页
第3页 / 共16页
12864液晶电子钟具有按键可调闹钟温度显示资料.docx_第4页
第4页 / 共16页
12864液晶电子钟具有按键可调闹钟温度显示资料.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

12864液晶电子钟具有按键可调闹钟温度显示资料.docx

《12864液晶电子钟具有按键可调闹钟温度显示资料.docx》由会员分享,可在线阅读,更多相关《12864液晶电子钟具有按键可调闹钟温度显示资料.docx(16页珍藏版)》请在冰豆网上搜索。

12864液晶电子钟具有按键可调闹钟温度显示资料.docx

12864液晶电子钟具有按键可调闹钟温度显示资料

//程序已全部通过硬件测试,请放心使用。

(没有使用到DS1302)

/************12864时钟显示函数*************/

/******实现时间走动、按键控制、蜂鸣器闹铃、温度显示******/

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

/********************功能:

定义液晶12864控制端接口*********************/

sbitrs=P2^6;

//注意:

rw控制端始终为低电平,直接在硬件上接低电平

sbiten=P2^7;

sbitwd=P2^0;//温度传感器信号线

/********************功能:

定义蜂鸣器、按键接口*********************/

sbitbeet=P2^2;//蜂鸣器定义

sbitkey1=P1^0;//功能选择

sbitkey2=P1^1;//至加

sbitkey3=P1^2;//至减

sbitkey4=P1^3;//北京时间与闹钟时间画面切换

/********************功能:

定义数据初始值******************************/

charhour=23,minute=59,second=58,count=0;

charshi=0,fen=0,miao=0,hm;

intyears=2012;

charmonth=12,day=30,mm=0,cc=7;

uinttemp;

floatf_temp;

/********************功能:

定义数组字符串*********************/

ucharcodetable1[]={"幸福牌电子钟"};

ucharcodetable2[]={"温馨提示:

00.0℃"};

/********************功能:

延时函数***************************/

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/*******************功能:

蜂鸣器响应***********************/

voidfengmingqi()

{

beet=0;delay

(1);beet=1;delay

(1);

}

/********************功能:

液晶12864读写数据******************/

voidxieling_shu(ucharaa,ucharbb)

{

if(aa==1){rs=0;}

if(aa==0){rs=1;}

P0=bb;delay

(1);

en=1;delay

(1);

en=0;delay

(1);

}

/********************功能:

液晶12864写入地址******************/

voidxieludizhi(ucharx,uchary)

{

switch(x)

{

case1:

xieling_shu(1,0x80+y);return;//return返回的意思

case2:

xieling_shu(1,0x90+y);return;

case3:

xieling_shu(1,0x88+y);return;

case4:

xieling_shu(1,0x98+y);return;

}

}

/********************功能:

液晶12864写入字符串*****************/

voidxiezifuchuan(uchar*dd)

{

while(*dd!

='\0')

{

xieling_shu(0,*dd++);

}

}

/********************功能:

液晶12864清屏函数*********************/

voidqingping()

{

xieling_shu(1,0x01);//清屏

xieling_shu(1,0x01);//清屏

xieling_shu(1,0x01);//清屏

delay(20);

}

/********************功能:

液晶12864初始化指令操作******************/

voidinit_12864()

{

xieling_shu(1,0x30);//基本指令操作

xieling_shu(1,0x30);//基本指令操作

xieling_shu(1,0x0C);//0x0c:

无光标,OXOF:

光标反白显示

xieling_shu(1,0x01);//清屏

xieling_shu(1,0x06);

}

/********************功能:

液晶12864初始化字串显示******************/

voidinit_zifu()

{

xieludizhi(1,0);xiezifuchuan("欢迎使用");delay

(1);

xieludizhi(2,0);xiezifuchuan("幸福牌电子钟");delay

(1);

xieludizhi(3,0);xiezifuchuan("订购热线");delay

(1);

xieludizhi(4,0);xiezifuchuan("Phone:

0777-66914");delay(9534);

qingping();

xieludizhi(1,0);xiezifuchuan(table1);delay

(1);

xieludizhi(4,0);xiezifuchuan(table2);delay

(1);

xieludizhi(3,5);xiezifuchuan("星期");

xieludizhi(2,2);xiezifuchuan("年月日");

}

/*******************功能:

时间、年月日显示函数********************/

voiddisplay()

{

xieludizhi(3,0);//显示时分秒

xieling_shu(0,0x30+hour/10);

xieling_shu(0,0x30+hour%10);

xieling_shu(0,':

');

xieling_shu(0,0x30+minute/10);

xieling_shu(0,0x30+minute%10);

xieling_shu(0,':

');

xieling_shu(0,0x30+second/10);

xieling_shu(0,0x30+second%10);

xieludizhi(2,0);//显示年

xieling_shu(0,0x30+years/1000);

xieling_shu(0,0x30+years%1000/100);

xieling_shu(0,0x30+years%100/10);

xieling_shu(0,0x30+years%10);

xieludizhi(2,3);//显示月

xieling_shu(0,0x30+month/10);

xieling_shu(0,0x30+month%10);

xieludizhi(2,5);//显示日

xieling_shu(0,0x30+day/10);

xieling_shu(0,0x30+day%10);

}

/*******************功能:

闹钟(时间、年月日)显示函数********************/

voiddisplay1()

{

xieludizhi(3,0);//显示时分秒

xieling_shu(0,0x30+shi/10);

xieling_shu(0,0x30+shi%10);

xieling_shu(0,':

');

xieling_shu(0,0x30+fen/10);

xieling_shu(0,0x30+fen%10);

xieling_shu(0,':

');

xieling_shu(0,0x30+miao/10);

xieling_shu(0,0x30+miao%10);

xieludizhi(2,0);//显示年

xieling_shu(0,0x30+years/1000);

xieling_shu(0,0x30+years%1000/100);

xieling_shu(0,0x30+years%100/10);

xieling_shu(0,0x30+years%10);

xieludizhi(2,3);//显示月

xieling_shu(0,0x30+month/10);

xieling_shu(0,0x30+month%10);

xieludizhi(2,5);//显示日

xieling_shu(0,0x30+day/10);

xieling_shu(0,0x30+day%10);

}

/*******************功能:

星期函数*********************************/

voidxingqi()

{

switch(cc)

{

case1:

xieludizhi(3,7);xiezifuchuan("一");return;

case2:

xieludizhi(3,7);xiezifuchuan("二");return;

case3:

xieludizhi(3,7);xiezifuchuan("叁");return;

case4:

xieludizhi(3,7);xiezifuchuan("四");return;

case5:

xieludizhi(3,7);xiezifuchuan("五");return;

case6:

xieludizhi(3,7);xiezifuchuan("六");return;

case7:

xieludizhi(3,7);xiezifuchuan("日");return;

}

}

/*******************功能:

按键程序*******************/

voidanjian()

{

if(key4==0){delay

(1);hm=~hm;while(key4==0);}

/*******************功能:

key1按键选择功能*******************/

if(key1==0)

{

delay

(1);

mm++;if(hm!

=0){if(mm>=4)mm=0;}

if(mm==1){xieludizhi(3,3);xieling_shu(0,0x5f);}

if(mm==2){TR0=1;xieludizhi(3,2);xieling_shu(0,0x5f);}

if(mm==3){xieludizhi(3,0);xieling_shu(0,0x5f);}

if(mm==4){xieludizhi(2,5);xieling_shu(0,0x5f);}

if(mm==5){xieludizhi(2,3);xieling_shu(0,0x5f);}

if(mm==6){xieludizhi(2,1);xieling_shu(0,0x5f);}

if(mm==7){xieludizhi(3,7);xieling_shu(0,0x5f);}

if(mm==8){xieludizhi(2,7);xieling_shu(0,0x02);}

if(mm>=9){xieludizhi(2,7);xieling_shu(0,0x20);mm=0;}//mm=0;跳出调整时间

while(key1==0);

}

/*******************功能:

key2按键加减功能*******************/

if(mm==1&&key2==0)//秒加1

{

if(hm==0){TR0=0;delay

(1);if(key2==0){second++;if(second>=60){second=0;}}}

if(hm!

=0){delay

(1);if(key2==0){miao++;if(miao>=60){miao=0;}}}

while(key2==0);

}

if(mm==1&&key3==0)//秒减1

{

if(hm==0){TR0=0;delay

(1);if(key3==0){second--;if(second<=-1){second=59;}}}

if(hm!

=0){delay

(1);if(key3==0){miao--;if(miao<=-1){miao=59;}}}

while(key3==0);

}

if(mm==2&&key2==0)//分加1

{

if(hm==0){delay

(1);if(key2==0){minute++;if(minute>=60){minute=0;}}}

if(hm!

=0){delay

(1);if(key2==0){fen++;if(fen>=60){fen=0;}}}

while(key2==0);

}

if(mm==2&&key3==0)//分减1

{

if(hm==0){delay

(1);if(key3==0){minute--;if(minute<=-1){minute=59;}}}

if(hm!

=0){delay

(1);if(key3==0){fen--;if(fen<=-1){fen=59;}}}

while(key3==0);

}

if(mm==3&&key2==0)//时加1

{

if(hm==0){delay

(1);if(key2==0){hour++;if(hour>=24){hour=0;}}}

if(hm!

=0){delay

(1);if(key2==0){shi++;if(shi>=24){shi=0;}}}

while(key2==0);

}

if(mm==3&&key3==0)//时减1

{

if(hm==0){delay

(1);if(key3==0){hour--;if(hour<=-1){hour=23;}}}

if(hm!

=0){delay

(1);if(key3==0){shi--;if(shi<=-1){shi=23;}}}

while(key3==0);

}

if(mm==4&&key2==0)//日加1

{

delay

(1);

if(key2==0)

{

day++;

if(day>=31){day=1;}

}

while(key2==0);

}

if(mm==4&&key3==0)//日减1

{

delay

(1);

if(key3==0)

{

day--;

if(day<=0){day=31;}

}

while(key3==0);

}

if(mm==5&&key2==0)//月加1

{

delay

(1);

if(key2==0)

{

month++;

if(month>=13){month=1;}

}

while(key2==0);

}

if(mm==5&&key3==0)//月减1

{

delay

(1);

if(key3==0)

{

month--;

if(month<=0){month=12;}

}

while(key3==0);

}

if(mm==6&&key2==0)//年加1

{

delay

(1);

if(key2==0){years++;}//不设置年限

while(key2==0);

}

if(mm==6&&key3==0)//年减1

{

delay

(1);

if(key3==0){years--;}

while(key3==0);

}

if(mm==7&&key2==0)//星期加1

{

delay

(1);

if(key2==0)

{

cc++;

if(cc>=8){cc=1;}

}

while(key2==0);

}

if(mm==7&&key3==0)//星期减1

{

delay

(1);

if(key3==0)

{

cc--;

if(cc==0){cc=7;}

}

while(key3==0);

}

}

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

*******************************功能:

18B20所有函数************************************/

/*******************18B20复位,初始化函数**************************/

voiddsreset(void)

{

uinti;

wd=0;

i=103;

while(i>0)i--;

wd=1;

i=4;

while(i>0)i--;

}

/*******************18B20读1位函数**************************/

bittempreadbit(void)

{

uinti;

bitdat;

wd=0;i++;//i++起延时作用

wd=1;i++;i++;

dat=wd;

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

return(dat);

}

/*******************18B20读1个字节函数**************************/

uchartempread(void)

{

uchari,j,dat;

dat=0;

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

{

j=tempreadbit();

dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里

}

return(dat);

}

/*******************18B20写一个字节数据函数**************************/

voidtempwritebyte(uchardat)

{

uinti;

ucharj;

bittestb;

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

{

testb=dat&0x01;

dat=dat>>1;

if(testb)//写1

{

wd=0;

i++;i++;

wd=1;

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

}

else

{

wd=0;//写0

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

wd=1;

i++;i++;

}

}

}

/*******************18B20开始获取温度并转换函数**************************/

voidtempchange(void)

{

dsreset();

delay

(1);

tempwritebyte(0xcc);//写跳过读ROM指令

tempwritebyte(0x44);//写温度转换指令

}

/*******************18B20读取寄存器中存储的温度数据函数**************************/

uintget_temp()

{

uchara,b;

dsreset();

delay

(1);

tempwritebyte(0xcc);

tempwritebyte(0xbe);

a=tempread();//读低8位

b=tempread();//读高8位

temp=b;

temp<<=8;//两个字节组合为1个字

temp=temp|a;

f_temp=temp*0.0625;//温度在寄存器中为12位分辨率位0.0625°

temp=f_temp*10+0.5;//乘以10表示小数点后面只取1位,加0.5是四舍五入

f_temp=f_temp+0.05;

returntemp;//temp是整型

}

/*******************18B20发送数据函数**************************/

voidcomm(char*parr)

{

do

{

SBUF=*parr++;//发送数据

while(!

TI);//等待发送完成标志为1

TI=0;//标志清零

}while(*parr);//保持循环直到字符为'\0'

}

/************************功能:

主函数****************************/

voidmain()

{ucharbuff[4];

TMOD=0x01;//设置T0为工作方式1

EA=1;

ET0=1;

TR0=1;//开启T0中断

TH0=-50000/256;

TL0=-50000%256;

init_12864();

init_zifu();

hm=0;

while

(1)

{if(count>5&&count<18)

{

tempchange();//开始获取温度

get_temp();//读取寄存温度

sprintf(buff,"%f",f_temp);

comm(buff);

xieludizhi(4,5);xieling_shu(0,0x30+temp/100);xieling_shu(0,0x30

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

当前位置:首页 > 人文社科 > 视频讲堂

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

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