用定时器设计时钟并在1602液晶上显示Word文档格式.docx

上传人:b****4 文档编号:17853402 上传时间:2022-12-11 格式:DOCX 页数:15 大小:17.27KB
下载 相关 举报
用定时器设计时钟并在1602液晶上显示Word文档格式.docx_第1页
第1页 / 共15页
用定时器设计时钟并在1602液晶上显示Word文档格式.docx_第2页
第2页 / 共15页
用定时器设计时钟并在1602液晶上显示Word文档格式.docx_第3页
第3页 / 共15页
用定时器设计时钟并在1602液晶上显示Word文档格式.docx_第4页
第4页 / 共15页
用定时器设计时钟并在1602液晶上显示Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

用定时器设计时钟并在1602液晶上显示Word文档格式.docx

《用定时器设计时钟并在1602液晶上显示Word文档格式.docx》由会员分享,可在线阅读,更多相关《用定时器设计时钟并在1602液晶上显示Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

用定时器设计时钟并在1602液晶上显示Word文档格式.docx

/*****延时1ms*****/

voiddelay(uintz)

{

uintx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

}

/**********

1602初始化

**********/

voidwrite_com(ucharcom)//写命令

lcdrs=0;

P0=com;

delay(5);

lcden=1;

lcden=0;

voidwrite_data(uchardate)//写数据

lcdrs=1;

P0=date;

voidinit_1602()//初始化

//lcdwr=0;

dula=0;

//关断选、位选

wela=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80+0x04);

write_data('

:

'

);

write_com(0x80+0x07);

write_com(0x80+0x40);

for(i=0;

i<

4;

i++)

write_data(table[i]);

write_com(0x80+0x44);

.'

write_com(0x80+0x47);

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

1602显示时间

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

voidwrite_sfm()//显示时分秒

write_com(0x80+0x02);

write_data(0x30+shi/10);

write_com(0x80+0x03);

write_data(0x30+shi%10);

write_com(0x80+0x05);

write_data(0x30+fen/10);

write_com(0x80+0x06);

write_data(0x30+fen%10);

write_com(0x80+0x08);

write_data(0x30+miao/10);

write_com(0x80+0x09);

write_data(0x30+miao%10);

/*****当显示小时的数小于13,显示AM*****/

if(shi<

13)

{

write_com(0x80+0x0c);

write_data('

A'

write_com(0x80+0x0d);

M'

}

/*****显示PM*****/

if(shi>

12)

P'

}

/*显示月日*/

write_com(0x80+0x45);

write_data(0x30+yue/10);

write_com(0x80+0x46);

write_data(0x30+yue%10);

write_com(0x80+0x48);

write_data(0x30+ri/10);

write_com(0x80+0x49);

write_data(0x30+ri%10);

/*显示星期*/

write_com(0x80+0x4c);

write_data(table1[q][0]);

write_com(0x80+0x4d);

write_data(table1[q][1]);

write_com(0x80+0x4e);

write_data(table1[q][2]);

write_com(0x80+0x4f);

write_data(table1[q][3]);

voidwrite_sfm1()

write_data(0x30+shi1/10);

write_data(0x30+shi1%10);

write_data(0x30+fen1/10);

write_data(0x30+fen1%10);

write_data(0x30+miao1/10);

write_data(0x30+miao1%10);

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

定时器计时

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

voidinit_time0()

TMOD=0x02;

//定时器0的工作方式2,避免了软件重装初值所带来的时间误差

TH0=6;

TR0=6;

EA=1;

ET0=1;

TR0=1;

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

分解独立键盘扫描

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

voidkeyscanf()

if(s1==0)//当按键1按下,开始进入设置时间状态,

delay(5);

if(s1==0)

{

num++;

if(num==1)//按下的次数决定光标的位置,即为要修改的地方

{

TR0=0;

//关闭定时器(当设置下面的闹钟时不用关定时器)

write_com(0x80+0x09);

write_com(0x0f);

//光标显示并闪烁

}

if(num==2)

write_com(0x80+0x08);

if(num==3)

write_com(0x80+0x06);

if(num==4)

write_com(0x80+0x05);

if(num==5)

write_com(0x80+0x03);

if(num==6)

write_com(0x80+0x02);

if(num==7)

write_com(0x80+0x49);

if(num==8)

write_com(0x80+0x48);

if(num==9)

write_com(0x80+0x46);

if(num==10)

write_com(0x80+0x45);

if(num==11)

write_com(0x80+0x4c);

if(num==12)

num=0;

//按下第12次跳出调时间状态

TR0=1;

//打开定时器

write_com(0x0c);

while(!

s1);

//等待按键释放

}

/*****按下s2和s3分别增大和减小数值*****/

if(num!

=0)//这里不能写成“if(s1==0)”,否则当s2按下后数字不会自加

if(s2==0)

delay(5);

if(s2==0)

switch(num)

{

case1:

miao++;

if(miao==60)

miao=0;

write_sfm();

break;

case3:

fen++;

if(fen==60)

fen=0;

write_sfm();

case5:

shi++;

if(shi==24)

shi=0;

case7:

ri++;

q++;

if(ri==30)

ri=1;

if(q==7)

q=0;

case9:

yue++;

if(yue==12)

yue=1;

case11:

q++;

}

while(!

s2);

=0)

if(s3==0)//减小数值

if(s3==0)

miao--;

if(miao==0)

miao=60;

fen--;

if(fen==0)

fen=60;

shi--;

if(shi==0)

shi=24;

ri--;

if(ri==1)

ri=30;

yue--;

if(yue==1)

yue=12;

q--;

//表示星期,q的值用于选择数组的值

if(q==0)

q=7;

}

s3);

/*闹钟功能*/

if(s4==0)//进入调闹钟功能,调闹钟功能时不用关定时器

if(s4==0)

temp=1;

num1++;

if(num1==1)//用于选择调的位置

if(num1==2)

if(num1==3)

if(num1==4)

if(num1==5)

if(num1==6)

if(num1==7)

num1=0;

temp=0;

s4);

if(num1!

=0)

if(s2==0)

switch(num1)

miao1++;

if(miao1==60)

miao1=0;

write_sfm1();

fen1++;

if(fen1==60)

fen1=0;

write_sfm1();

shi1++;

if(shi1==24)

shi1=0;

if(s3==0)

miao1--;

if(miao1==0)

miao1=60;

fen1--;

if(fen1==0)

fen1=60;

shi1--;

if(shi1==0)

shi1=24;

}

}

/*******

主函数

*******/

voidmain()

rd=0;

init_1602();

init_time0();

while

(1)

keyscanf();

if(temp==0)//temp为标志,为0时显示调时间的状态,为1时显示调闹钟状态

write_sfm();

else

write_sfm1();

if(shi==shi1&

&

fen==fen1&

miao==miao1)//当设置的闹钟时间和当前显示的时间吻合,led做出反应

for(i=0;

10;

for(j=0;

j<

50;

j++)

P1=0xfd;

delay(5);

P1=0xff;

write_sfm();

}

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

中断函数

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

voidt0()interrupt1

a++;

if(a==4000)//当a=4000,1秒

a=0;

miao++;

if(miao==60)

miao=0;

fen++;

if(fen==60)

fen=0;

shi++;

if(shi==24)

shi=0;

ri++;

q++;

if(q==7)

q=0;

if(ri==30)

{

ri=1;

yue++;

if(yue==12)

yue=1;

}

}

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

当前位置:首页 > 求职职场 > 简历

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

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