基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx

上传人:b****3 文档编号:8143914 上传时间:2023-05-10 格式:DOCX 页数:22 大小:210.99KB
下载 相关 举报
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第1页
第1页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第2页
第2页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第3页
第3页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第4页
第4页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第5页
第5页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第6页
第6页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第7页
第7页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第8页
第8页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第9页
第9页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第10页
第10页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第11页
第11页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第12页
第12页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第13页
第13页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第14页
第14页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第15页
第15页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第16页
第16页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第17页
第17页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第18页
第18页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第19页
第19页 / 共22页
基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx

《基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx(22页珍藏版)》请在冰点文库上搜索。

基于51单片机的LCD简单电子钟的设计Word文档下载推荐.docx

(4)下载到ZKSYS单片机实验板上验证有关程序实现给定的功能。

1总体方案设计

该电子时钟由89C51,按键,1602LCD液晶屏等构成,采用晶振电路作为驱动电路,利用单片机内部定时计数器0通过软件扩展产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。

时钟的年月日时分秒的切换是由一个按键控制,而另外两个个按键控制加减调节。

图1系统结构框图

该电子时钟由STC89C51,按键,1602LCD液晶屏等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ,使用的定时器/计数器工作方式1,通过软件扩展产生的一秒定时,达到时分秒的计时,60秒为一分钟,60分钟为一小时,24小时为一天,又重00:

00:

00开始计时

2硬件电路设计

(1)时钟电路设计

单片机利用外部12MHZ晶振构成振荡电路作为时钟源,时钟电路的原理如下图。

图2时钟电路图

(2)独立按键输入电路

按键处理设置为:

当有没键按下时,时钟正常运行;

当按K1时分别切换到年月日时分秒;

按K2为加。

按K3为减。

电路图如下图

图3独立按键电路

(3)单片机系统

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

外形及引脚排列如下图

图4单片机系统图

(4)LCD液晶显示

LCD1602采用标准的16脚接口,第1脚:

VSS为电源地;

第2脚:

VDD接5V电源正极;

第3脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高;

第4脚:

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;

第5脚:

RW为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作;

第6脚:

E(或EN)端为使能(enable)端。

第7~14脚:

D0~D7为8位双向数据端;

第15~16脚:

空脚或背灯电源。

电路如下图

图5LCD液晶显示图

3软件设计

本系统的软件系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序四大模块。

系统的流程图如下图

设计思路:

本系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序和LCD液晶驱动程序。

定时中断程序是利用单片机内部定时器0实现1秒的定时,然后利用软件延时实现分小时,时间调整程序是利用单片机的内部存贮器,把调整好的时间写到显示时间的存贮单元,然后启动定时器开始计时并显示,延时程序是利用软件实现延时达到去抖的目的。

液晶启动程序是为了把单片机的数据送到显示器的同时让显示器的第6脚使能断的电平实现由1到0的跳变,使显示器执行显示的命令。

主程序就是利用这些子程序中断程序实现显示、定时等功能。

4调试分析及说明

(1)时钟正常运行调试仿真图

图6正常运行仿真图

(2)时间调整仿真

图10对时分秒的调整

5结论

本次电子时钟的设计基本完成:

当没有键按下时,时钟正常运行;

时钟的年月日时分秒的切换是由一个按键控制,而另外两个个按键控制加减调节

附录1电路原理

附录2程序清单

#include<

reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]="

2015-05-27WED"

;

ucharcodetable1[]="

12:

30:

55"

ucharcodetable2[]="

1200810222"

ucharcodetable3[]="

MadebyHUANG"

ucharcodetable4[]="

MONTUEWEDTHUFRISATSUN"

ucharcount,s1num;

charmiao,fen,shi,ri,yue;

uintnian;

sbitlcd_rs=P2^0;

sbitlcd_rw=P2^1;

sbitlcd_en=P2^2;

sbits1=P1^0;

sbits2=P1^1;

sbits3=P1^2;

sbitOutput_squ=P3^6;

voiddelay(uintz)//延时子函数

{

uintx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

}

voidwrite_com(ucharcom)//写命令函数

lcd_rs=0;

P0=com;

delay(5);

lcd_en=1;

lcd_en=0;

voidwrite_date(uchardate)//写数据函数

lcd_rs=1;

P0=date;

voidinit()//初始化函数

intnum;

shi=12;

fen=30;

miao=55;

ri=27;

yue=5;

nian=2015;

lcd_rw=0;

write_com(0x38);

//显示设置模式

write_com(0x0c);

//00001100开显示,不显示光标,光标不闪烁

write_com(0x06);

//00000110地址指针加一,整屏不移动

write_com(0x01);

//清屏

write_com(0x80);

for(num=0;

num<

16;

num++)//显示数字1200810222

{

write_date(table2[num]);

delay(300);

}

write_com(0x80+0x40);

num++)//显示madebyHUANG

write_date(table3[num]);

delay(5000);

num++)//显示日期

write_date(table[num]);

delay(5);

12;

num++)//显示时间

write_date(table1[num]);

TMOD=0x51;

//启动定时器中断

TH0=0X3C;

//50ms

TL0=0XB0;

TH1=0X00;

TL1=0X00;

EA=1;

ET0=1;

TR0=1;

//打开定时器0

TR1=1;

//打开定时器0

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);

voidwrite_nyr(uintadd,uintdate)//写年月日函数,此处若用uchar范围只有0-255

{//不够,改用uint(0-65535)

uintqian,bai,shi,ge;

qian=date/1000;

bai=date%1000/100;

shi=date%100/10;

write_com(0x80+add);

write_date(0x30+qian);

write_date(0x30+bai);

voidwrite_yr(ucharadd,uchardate)//写月日函数

voidkeyscan()//按键扫描函数

intm,n;

if(s1==0)

if(s1==0)//按键1光标移位扫描

{

s1num++;

if(s1num==1)

{while(!

s1);

//等待按键松手

write_com(0x80+0x40+10);

TR0=0;

//关闭定时器

write_com(0x0f);

//开显示,显示光标,光标闪烁

}

if(s1num==2)

{

while(!

write_com(0x80+0x40+7);

if(s1num==3)

write_com(0x80+0x40+4);

if(s1num==4)

write_com(0x80+3);

if(s1num==5)

write_com(0x80+6);

if(s1num==6)

write_com(0x80+9);

if(s1num==7)

s1)

write_com(0x80+13);

if(s1num==8)

s1num=0;

write_com(0x0c);

TR0=1;

//开定时器

}

}

if(s1num!

=0)

{

if(s2==0)//按键2加功能

delay(5);

if(s2==0)

s2);

if(s1num==1)//秒加

{

miao++;

if(miao==60)

{

miao=0;

}

write_sfm(10,miao);

write_com(0x80+0x40+10);

}

if(s1num==2)//分加

fen++;

if(fen==60)

fen=0;

write_sfm(7,fen);

write_com(0x80+0x40+7);

if(s1num==3)//时加

shi++;

if(shi==24)

shi=0;

write_sfm(4,shi);

write_com(0x80+0x40+4);

if(s1num==4)//年加

nian++;

if(nian==10000)

nian=2000;

write_nyr(1,nian);

write_com(0x80+3);

if(s1num==5)//月份加

yue++;

if(yue==13)

yue=1;

write_yr(6,yue);

write_com(0x80+6);

if(s1num==6)//日期加

ri++;

if(ri==29&

&

yue==2&

!

((nian%4==0&

nian%100!

=0)||nian%400==0))

ri=1;

//平年

if(ri==30&

=0||nian%400==0)))

//闰年

if(ri==31&

(yue==4||yue==6||yue==9||yue==11))

if(ri==32)

write_yr(9,ri);

write_com(0x80+9);

if(s1num==7)//星期加

m=m+3;

if(m==21)

m=0;

write_com(0x80+12);

for(n=m;

n<

m+3;

n++)

write_date(table4[n]);

delay(5);

write_com(0x80+13);

if(s3==0)//按键3减功能

if(s3==0)

s3);

if(s1num==1)//秒减

miao--;

if(miao==-1)

miao=59;

if(s1num==2)//分减

fen--;

if(fen==-1)

fen=59;

if(s1num==3)//时减

shi--;

if(shi==-1)

shi=23;

if(s1num==4)//年减

nian--;

if(nian==1999)

if(s1num==5)//月份减

yue--;

if(yue==0)

yue=12;

if(s1num==6)//日减

ri--;

if(ri==0)

if(yue==2&

{

ri=28;

}

ri=29;

if(yue==4||yue==6||yue==9||yue==11)

ri=30;

if(yue==1||yue==3||yue==5||yue==7||yue==9||yue==11)

ri=31;

if(s1num==7)//星期减

m=m-3;

if(m==0)

m=21;

n-3<

m;

write_date(table4[n-3]);

voidmain()

inti,j;

init();

while

(1)

keyscan();

if(TL1==8)

{TH1=0X00;

TL1=0X00;

miao++;

if(miao==60)

miao=0;

fen++;

if(fen==60)

fen=0;

ri++;

j=j+3;

if(j==21)

j=0;

write_com(0x80+12);

for(i=j;

i<

j+3;

i++)

write_date(table4[i]);

delay(5);

if(ri==29&

ri=1;

yue++;

if(ri==30&

if(ri==31&

if(ri==32)

if(yue==13)

yue=1;

nian++;

if(nian==10000)

{

nian=2000;

}

write_nyr(1,nian);

write_yr(6,yue);

write_sfm(7,fen);

write_sfm(10

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

当前位置:首页 > 农林牧渔 > 林学

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

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