基于51单片机时钟LCD显示.docx

上传人:b****4 文档编号:5030793 上传时间:2023-05-07 格式:DOCX 页数:14 大小:331.09KB
下载 相关 举报
基于51单片机时钟LCD显示.docx_第1页
第1页 / 共14页
基于51单片机时钟LCD显示.docx_第2页
第2页 / 共14页
基于51单片机时钟LCD显示.docx_第3页
第3页 / 共14页
基于51单片机时钟LCD显示.docx_第4页
第4页 / 共14页
基于51单片机时钟LCD显示.docx_第5页
第5页 / 共14页
基于51单片机时钟LCD显示.docx_第6页
第6页 / 共14页
基于51单片机时钟LCD显示.docx_第7页
第7页 / 共14页
基于51单片机时钟LCD显示.docx_第8页
第8页 / 共14页
基于51单片机时钟LCD显示.docx_第9页
第9页 / 共14页
基于51单片机时钟LCD显示.docx_第10页
第10页 / 共14页
基于51单片机时钟LCD显示.docx_第11页
第11页 / 共14页
基于51单片机时钟LCD显示.docx_第12页
第12页 / 共14页
基于51单片机时钟LCD显示.docx_第13页
第13页 / 共14页
基于51单片机时钟LCD显示.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机时钟LCD显示.docx

《基于51单片机时钟LCD显示.docx》由会员分享,可在线阅读,更多相关《基于51单片机时钟LCD显示.docx(14页珍藏版)》请在冰点文库上搜索。

基于51单片机时钟LCD显示.docx

基于51单片机时钟LCD显示

 

设计课题:

基于51单片机时钟LCD显示

班级:

学号:

姓名:

时间:

2012-11-11

一需求分析

1.功能描述:

本设计是基于51单片机时钟的LCD显示,通过单片机产生计数功能,通过LCD1602显示,显示时间包括:

年,月,日,时,分,秒,星期。

同时可用按键进行时间调整。

二总体设计

1.设计思路

通过51内部定时器产生时钟来进行准确计时,用独立键盘来实现时钟的可调,最后由LCD1602来显示。

2.器件选择

AT89C51LCD160212M晶振独立按键电容排阻

三硬件设计

1.硬件模块

2电路图

四软件设计

1.软件框图

2.软件流程图

2.1定时器框图

2.2键盘扫描控制模块

五总结:

本设计实现了时钟时,分,秒准确计时和显示。

由于时间仓促,设计仍有不足,主要是还不能对星期的自动调节,还需要进一步研究LCD1602datasheet的字库,来实现这一功能。

附程序代码:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitrs=P2^5;

sbitrw=P2^6;

sbiten=P2^7;

sbitk0=P2^0;//k0键

sbitk1=P2^1;//k1键

ucharcount,k0num;

charmiao,shi,fen;

ucharcodetable[]="2012-11-12MON";

ucharcodetable1[]="00:

00:

00";

voiddelay(uintz)

{

uintx,y;

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

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

}

voidwrite_com(ucharcom)//写指令

{

rs=0;

en=0;

P0=com;

delay(5);

en=1;

delay(5);

en=0;

}

voidwrite_date(uchardate)//写数据

{

rs=1;

en=0;

P0=date;

delay(5);

en=1;

delay(5);

en=0;

}

voidinit()

{

ucharnum;

en=0;

rw=0;

write_com(0x38);//显示模式设置

write_com(0x0c);//开显示,光标闪烁不显示

write_com(0x06);//光标读写指针自动加一

write_com(0x01);//显示清屏

write_com(0x80);//数据指针地址

for(num=0;num<15;num++)

{

write_date(table[num]);

delay(5);

}

write_com(0x80+0x40);//写入液晶屏显示第二行

for(num=0;num<12;num++)

{

write_date(table1[num]);

delay(5);

}

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

voidwrite_sfm(ucharadd,uchardate)//时钟数据显示

{

ucharshi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+0x40+add);

write_date(0x30+shi);

write_date(0x30+ge);

}

voidkeyscan()//键盘扫描

{

if(k0==0)

{

if(k0==0)//k0按下,进入选择模式

{delay(8);

k0num++;

while(!

k0);

if(k0num==1)//修改秒

{

TR0=0;

write_com(0x80+0x40+10);

write_com(0x0f);

}

}

if(k0num==2)//修改分

{

write_com(0x80+0x40+7);

}

if(k0num==3)//修改时

{

write_com(0x80+0x40+4);

}

if(k0num==4)

{

k0num=0;

write_com(0x0c);//开显示,光标闪烁不显示

TR0=1;

}

}

if(k0num!

=0)

{

if(k1==0)//修改秒

{

delay(40);

if(k1==0)

{delay(40);

while(!

k1);

delay(40);

if(k0num==1)

{delay(40);

miao++;

if(miao==60)

miao=0;

write_sfm(10,miao);

write_com(0x80+0x40+10);

}

if(k0num==2)//修改分

{delay(40);

fen++;

if(fen==60)

fen=0;

write_sfm(7,fen);

write_com(0x80+0x40+7);

}

if(k0num==3)//修改时

{delay(40);

shi++;

if(shi==24)

shi=0;

write_sfm(4,shi);

write_com(0x80+0x40+4);

}

}

}

}

}

voidmain()

{

init();

while

(1)

{

keyscan();

}

}

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==20)

{

count=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==24)

{

shi=0;

}

write_sfm(4,shi);

}

write_sfm(7,fen);

}

write_sfm(10,miao);

}

}

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

当前位置:首页 > 表格模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2