12864液晶电子钟具有按键可调闹钟温度显示资料Word文档下载推荐.docx
《12864液晶电子钟具有按键可调闹钟温度显示资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《12864液晶电子钟具有按键可调闹钟温度显示资料Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
ucharcodetable2[]={"
温馨提示:
00.0℃"
延时函数***************************/
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
/*******************功能:
蜂鸣器响应***********************/
voidfengmingqi()
beet=0;
delay
(1);
beet=1;
液晶12864读写数据******************/
voidxieling_shu(ucharaa,ucharbb)
if(aa==1){rs=0;
if(aa==0){rs=1;
P0=bb;
en=1;
delay
(1);
en=0;
液晶12864写入地址******************/
voidxieludizhi(ucharx,uchary)
switch(x)
{
case1:
xieling_shu(1,0x80+y);
return;
//return返回的意思
case2:
xieling_shu(1,0x90+y);
case3:
xieling_shu(1,0x88+y);
case4:
xieling_shu(1,0x98+y);
}
液晶12864写入字符串*****************/
voidxiezifuchuan(uchar*dd)
while(*dd!
='
\0'
)
xieling_shu(0,*dd++);
液晶12864清屏函数*********************/
voidqingping()
xieling_shu(1,0x01);
//清屏
xieling_shu(1,0x01);
delay(20);
液晶12864初始化指令操作******************/
voidinit_12864()
{
xieling_shu(1,0x30);
//基本指令操作
xieling_shu(1,0x0C);
//0x0c:
无光标,OXOF:
光标反白显示
//清屏
xieling_shu(1,0x06);
液晶12864初始化字串显示******************/
voidinit_zifu()
xieludizhi(1,0);
xiezifuchuan("
欢迎使用"
);
xieludizhi(2,0);
xieludizhi(3,0);
订购热线"
xieludizhi(4,0);
Phone:
0777-66914"
delay(9534);
qingping();
xieludizhi(1,0);
xiezifuchuan(table1);
xiezifuchuan(table2);
xieludizhi(3,5);
星期"
xieludizhi(2,2);
年月日"
时间、年月日显示函数********************/
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,0x30+second/10);
xieling_shu(0,0x30+second%10);
//显示年
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()
xieling_shu(0,0x30+shi/10);
xieling_shu(0,0x30+shi%10);
xieling_shu(0,0x30+fen/10);
xieling_shu(0,0x30+fen%10);
xieling_shu(0,0x30+miao/10);
xieling_shu(0,0x30+miao%10);
星期函数*********************************/
voidxingqi()
switch(cc)
xieludizhi(3,7);
xiezifuchuan("
一"
二"
叁"
四"
case5:
五"
case6:
六"
case7:
日"
按键程序*******************/
voidanjian()
if(key4==0){delay
(1);
hm=~hm;
while(key4==0);
}
key1按键选择功能*******************/
if(key1==0)
{
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);
if(mm==3){xieludizhi(3,0);
if(mm==4){xieludizhi(2,5);
if(mm==5){xieludizhi(2,3);
if(mm==6){xieludizhi(2,1);
if(mm==7){xieludizhi(3,7);
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;
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);
key3==0)//秒减1
if(key3==0){second--;
if(second<
=-1){second=59;
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(key2==0){fen++;
if(fen>
=60){fen=0;
key3==0)//分减1
if(key3==0){minute--;
if(minute<
=-1){minute=59;
if(key3==0){fen--;
if(fen<
=-1){fen=59;
if(mm==3&
key2==0)//时加1
if(key2==0){hour++;
if(hour>
=24){hour=0;
if(key2==0){shi++;
if(shi>
=24){shi=0;
key3==0)//时减1
if(key3==0){hour--;
if(hour<
=-1){hour=23;
if(key3==0){shi--;
if(shi<
=-1){shi=23;
if(mm==4&
key2==0)//日加1
if(key2==0)
day++;
if(day>
=31){day=1;
key3==0)//日减1
if(key3==0)
day--;
if(day<
=0){day=31;
if(mm==5&
key2==0)//月加1
month++;
if(month>
=13){month=1;
key3==0)//月减1
month--;
if(month<
=0){month=12;
if(mm==6&
key2==0)//年加1
if(key2==0){years++;
}//不设置年限
key3==0)//年减1
if(key3==0){years--;
if(mm==7&
key2==0)//星期加1
cc++;
if(cc>
=8){cc=1;
key3==0)//星期减1
cc--;
if(cc==0){cc=7;
}
/***************************************************************************************
*******************************功能:
18B20所有函数************************************/
/*******************18B20复位,初始化函数**************************/
voiddsreset(void)
uinti;
wd=0;
i=103;
while(i>
0)i--;
wd=1;
i=4;
/*******************18B20读1位函数**************************/
bittempreadbit(void)
bitdat;
i++;
//i++起延时作用
dat=wd;
i=8;
while(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)
ucharj;
bittestb;
for(j=1;
j<
j++)
testb=dat&
0x01;
dat=dat>
1;
if(testb)//写1
i++;
else
//写0
/*******************18B20开始获取温度并转换函数**************************/
voidtempchange(void)
dsreset();
tempwritebyte(0xcc);
//写跳过读ROM指令
tempwritebyte(0x44);
//写温度转换指令
/*******************18B20读取寄存器中存储的温度数据函数**************************/
uintget_temp()
uchara,b;
tempwritebyte(0xbe);
a=tempread();
//读低8位
b=tempread();
//读高8位
temp=b;
temp<
//两个字节组合为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);
//保持循环直到字符为'
/************************功能:
主函数****************************/
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