12864液晶电子钟具有按键可调闹钟温度显示资料Word文档下载推荐.docx

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

12864液晶电子钟具有按键可调闹钟温度显示资料Word文档下载推荐.docx

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

12864液晶电子钟具有按键可调闹钟温度显示资料Word文档下载推荐.docx

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

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

当前位置:首页 > 考试认证 > 司法考试

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

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