温度计加时间文档格式.docx

上传人:b****6 文档编号:20680720 上传时间:2023-01-25 格式:DOCX 页数:20 大小:20.61KB
下载 相关 举报
温度计加时间文档格式.docx_第1页
第1页 / 共20页
温度计加时间文档格式.docx_第2页
第2页 / 共20页
温度计加时间文档格式.docx_第3页
第3页 / 共20页
温度计加时间文档格式.docx_第4页
第4页 / 共20页
温度计加时间文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

温度计加时间文档格式.docx

《温度计加时间文档格式.docx》由会员分享,可在线阅读,更多相关《温度计加时间文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

温度计加时间文档格式.docx

//校时按键与C51的引脚连接定义

sbitkey1=P1^5;

//设置键

sbitkey2=P1^6;

//加键

sbitkey3=P1^7;

//减键

sbitbuzzer=P1^3;

//蜂鸣器,通过三极管9012驱动,端口低电平响

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

ucharcodetab1[]={"

20--"

};

//年显示的固定字符

ucharcodetab2[]={"

:

"

//时间显示的固定字符

//延时函数,后面经常调用

voiddelay(uintxms)//延时函数,有参函数

{

uintx,y;

for(x=xms;

x>

0;

x--)

for(y=110;

y>

y--);

}

/********液晶写入指令函数与写入数据函数,以后可调用**************/

/*在这个程序中,液晶写入有关函数会在DS1302的函数中调用,所以液晶程序要放在前面*/

write_1602com(ucharcom)//****液晶写入指令函数****

rs=0;

//数据/指令选择置为指令

rw=0;

//读写选择置为写

P0=com;

//送入数据

delay

(1);

en=1;

//拉高使能端,为制造有效的下降沿做准备

en=0;

//en由高变低,产生下降沿,液晶执行命令

 

write_1602dat(uchardat)//***液晶写入数据函数****

rs=1;

//数据/指令选择置为数据

P0=dat;

//en置高电平,为制造下降沿做准备

//en由高变低,产生下降沿,液晶执行命令

lcd_init()//***液晶初始化函数****

write_1602com(0x38);

//设置液晶工作模式,意思:

16*2行显示,5*7点阵,8位数据

write_1602com(0x0c);

//开显示不显示光标

write_1602com(0x06);

//整屏不移动,光标自动右移

write_1602com(0x01);

//清显示

write_1602com(yh+1);

//日历显示固定符号从第一行第1个位置之后开始显示

for(a=0;

a<

14;

a++)

{

write_1602dat(tab1[a]);

//向液晶屏写日历显示的固定符号部分

//delay(3);

}

write_1602com(er+2);

//时间显示固定符号写入位置,从第2个位置后开始显示

8;

write_1602dat(tab2[a]);

//写显示时间固定符号,两个冒号

/*********************over***********************/

/***************DS1302有关子函数********************/

voidwrite_byte(uchardat)//写一个字节

ACC=dat;

RST=1;

for(a=8;

a>

a--)

IO=ACC0;

SCLK=0;

SCLK=1;

ACC=ACC>

>

1;

ucharread_byte()//读一个字节

ACC7=IO;

return(ACC);

//----------------------------------------

voidwrite_1302(ucharadd,uchardat)//向1302芯片写函数,指定写入地址,数据

RST=0;

SCLK=0;

write_byte(add);

write_byte(dat);

SCLK=1;

ucharread_1302(ucharadd)//从1302读数据函数,指定读取数据来源地址

uchartemp;

temp=read_byte();

return(temp);

ucharBCD_Decimal(ucharbcd)//BCD码转十进制函数,输入BCD,返回十进制

ucharDecimal;

Decimal=bcd>

4;

return(Decimal=Decimal*10+(bcd&

=0x0F));

//--------------------------------------

voidds1302_init()//1302芯片初始化子函数(2010-01-07,12:

00:

00,week4)

RST=0;

SCLK=0;

write_1302(0x8e,0x00);

//允许写,禁止写保护

//write_1302(0x80,0x00);

//向DS1302内写秒寄存器80H写入初始秒数据00

//write_1302(0x82,0x00);

//向DS1302内写分寄存器82H写入初始分数据00

//write_1302(0x84,0x12);

//向DS1302内写小时寄存器84H写入初始小时数据12

//write_1302(0x8a,0x04);

//向DS1302内写周寄存器8aH写入初始周数据4

//write_1302(0x86,0x07);

//向DS1302内写日期寄存器86H写入初始日期数据07

//write_1302(0x88,0x01);

//向DS1302内写月份寄存器88H写入初始月份数据01

//write_1302(0x8c,0x10);

//向DS1302内写年份寄存器8cH写入初始年份数据10

write_1302(0x8e,0x80);

//打开写保护

//------------------------------------

//温度显示子函数

voidwrite_temp(ucharadd,uchardat)//向LCD写温度数据,并指定显示位置

uchargw,sw;

gw=dat%10;

//取得个位数字

sw=dat/10;

//取得十位数字

write_1602com(er+add);

//er是头文件规定的值0x80+0x40

write_1602dat(0x30+sw);

//数字+30得到该数字的LCD1602显示码

write_1602dat(0x30+gw);

write_1602dat(0xdf);

//显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码

write_1602dat(0x43);

//显示"

C"

符号,0x43是液晶屏字符库里大写C的地址码

//时分秒显示子函数

voidwrite_sfm(ucharadd,uchardat)//向LCD写时分秒,有显示位置加、现示数据,两个参数

//-------------------------------------

//年月日显示子函数

voidwrite_nyr(ucharadd,uchardat)//向LCD写年月日,有显示位置加数、显示数据,两个参数

write_1602com(yh+add);

//设定显示位置为第一个位置+add

//-------------------------------------------

voidwrite_week(ucharweek)//写星期函数

write_1602com(yh+0x0c);

//星期字符的显示位置

switch(week)

case1:

write_1602dat('

M'

);

//星期数为1时,显示

write_1602dat('

O'

N'

break;

case2:

T'

//星期数据为2时显示

U'

E'

case3:

W'

//星期数据为3时显示

D'

case4:

//星期数据为4是显示

H'

case5:

F'

//星期数据为5时显示

R'

I'

case6:

S'

//星期数据为6时显示

A'

case7:

//星期数据为7时显示

//****************键盘扫描有关函数**********************

voidkeyscan()

if(key1==0)//---------------key1为功能键(设置键)--------------------

delay(9);

//延时,用于消抖动

if(key1==0)//延时后再次确认按键按下

buzzer=0;

//蜂鸣器短响一次

delay(20);

buzzer=1;

while(!

key1);

key1n++;

if(key1n==9)

key1n=1;

//设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环

switch(key1n)

case1:

TR0=0;

//关闭定时器

//TR1=0;

write_1602com(er+0x09);

//设置按键按动一次,秒位置显示光标

write_1602com(0x0f);

//设置光标为闪烁

temp=(miao)/10*16+(miao)%10;

//秒数据写入DS1302

write_1302(0x8e,0x00);

write_1302(0x80,0x80|temp);

//miao

write_1302(0x8e,0x80);

case2:

write_1602com(er+6);

//按2次fen位置显示光标

//write_1602com(0x0f);

case3:

write_1602com(er+3);

//按动3次,shi

case4:

write_1602com(yh+0x0e);

//按动4次,week

case5:

write_1602com(yh+0x0a);

//按动5次,ri

case6:

write_1602com(yh+0x07);

//按动6次,yue

case7:

write_1602com(yh+0x04);

//按动7次,nian

case8:

write_1602com(0x0c);

//按动到第8次,设置光标不闪烁

TR0=1;

//打开定时器

temp=(miao)/10*16+(miao)%10;

write_1302(0x8e,0x00);

write_1302(0x80,0x00|temp);

//miao数据写入DS1302

break;

//------------------------------加键key2----------------------------

if(key1n!

=0)//当key1按下以下。

再按以下键才有效(按键次数不等于零)

if(key2==0)//上调键

delay(10);

if(key2==0)

key2);

miao++;

//设置键按动1次,调秒

if(miao==60)

miao=0;

//秒超过59,再加1,就归零

write_sfm(0x08,miao);

//令LCD在正确位置显示"

加"

设定好的秒数

//十进制转换成DS1302要求的DCB码

write_1302(0x80,temp);

//向DS1302内写秒寄存器80H写入调整后的秒数据BCD码

write_1302(0x8e,0x80);

//因为设置液晶的模式是写入数据后,光标自动右移,所以要指定返回

//write_1602com(0x0b);

fen++;

if(fen==60)

fen=0;

write_sfm(0x05,fen);

设定好的分数据

temp=(fen)/10*16+(fen)%10;

//允许写,禁止写保护

write_1302(0x82,temp);

//向DS1302内写分寄存器82H写入调整后的分数据BCD码

//打开写保护

write_1602com(er+6);

//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置

shi++;

if(shi==24)

shi=0;

write_sfm(2,shi);

//令LCD在正确的位置显示"

设定好的小时数据

temp=(shi)/10*16+(shi)%10;

write_1302(0x84,temp);

//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码

write_1602com(er+3);

//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位

week++;

if(week==8)

week=1;

write_1602com(yh+0x0C);

//指定'

加'

后的周数据显示位置

write_week(week);

//指定周数据显示内容

temp=(week)/10*16+(week)%10;

write_1302(0x8a,temp);

//向DS1302内写周寄存器8aH写入调整后的周数据BCD码

write_1602com(yh+0x0e);

ri++;

if(ri==32)

ri=1;

write_nyr(9,ri);

设定好的日期数据

temp=(ri)/10*16+(ri)%10;

//允许写,禁止写保护

write_1302(0x86,temp);

//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码

write_1602com(yh+10);

yue++;

if(yue==13)

yue=1;

write_nyr(6,yue);

设定好的月份数据

temp=(yue)/10*16+(yue)%10;

write_1302(0x88,temp);

//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码

write_1602com(yh+7);

nian++;

if(nian==100)

nian=0;

write_nyr(3,nian);

设定好的年份数据

temp=(nian)/10*16+(nian)%10;

write_1302(0x8c,temp);

//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码

write_1602com(yh+4);

//------------------减键key3,各句功能参照'

加键'

注释---------------

if(key3==0)

//调延时,消抖动

key3);

miao--;

if(miao==-1)

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

当前位置:首页 > 求职职场 > 社交礼仪

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

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