LCD液晶多钟设计.docx

上传人:b****7 文档编号:25703488 上传时间:2023-06-11 格式:DOCX 页数:12 大小:48.37KB
下载 相关 举报
LCD液晶多钟设计.docx_第1页
第1页 / 共12页
LCD液晶多钟设计.docx_第2页
第2页 / 共12页
LCD液晶多钟设计.docx_第3页
第3页 / 共12页
LCD液晶多钟设计.docx_第4页
第4页 / 共12页
LCD液晶多钟设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

LCD液晶多钟设计.docx

《LCD液晶多钟设计.docx》由会员分享,可在线阅读,更多相关《LCD液晶多钟设计.docx(12页珍藏版)》请在冰豆网上搜索。

LCD液晶多钟设计.docx

LCD液晶多钟设计

2011年6月25日

一.设计目的

设计制作基于LCD液晶显示屏的,可以调整的时钟系统。

二.设计要求

(1)采用1602液晶屏显示显示时间。

(2)时间可以显示为:

时分秒。

三.原理框图

四.电路图设计

五.主要元件选择及参数设计

(1)单片机STC89S52

STC89S52是比较常用的52系列单片机。

它的工作电压是+5v。

外围电路加上12M的晶振,使其正常工作。

P2口控制DAC0832。

通过对P2口赋值来改变输出增益的大小。

(2)1602A液晶

1602A显示容量为16乘2个字符。

工作电压为+5v。

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

DateI/O

2

VDD

电源正极

10

D3

DateI/O

3

VL

液晶显示偏压信号

11

D4

DateI/O

4

RS

数据/命令选择端

12

D5

DateI/O

5

R/W

读写选择端

13

D6

DateI/O

6

E

使能端

14

D7

DateI/O

7

D0

DateI/O

15

BLA

背光源正极

8

D1

DateI/O

16

BLK

背光源负极

六.软件编程

按照电路图的设计焊接好硬件电路。

就开始软件编程。

程序主要分为两个部分,即液晶显示部分和复位的部分。

该数字时钟实现的功能是液晶正常显示时分秒,年月日。

编程思路是,在确定了时钟要实现的功能后编写程序。

本程序包含液晶写指令函数(write_com())、写数据函数(write_data())、初始化函数(init())、写入时分秒函数(write_sfm())、写入月和日函数(write_nyr())

七.调试部分

本次实验的调试部分花了大量的时间。

当程序写好编译通过后,下载到单片机中,调试硬件看有无显示和输出。

液晶部分,经过几次程序的修改,和对液晶部分电路的检测终于将液晶部分调出有显示。

再检查电路的焊接确定无误后,结果显示良好。

八.心得体会与总结

单片机设计不仅给我们提供了一个很好的展现自己所掌握知识的平台,又是检验自己所学知识的一次考核。

我们运用各自在各方面的优势中,通过团队力量,才使设计得以完成.可以说,我们四个人是一个不可或缺的整体,少了任何一个人都是无法完成任务的。

本次实验总共做了两大方面的任务,编程和调试。

在编程过程中必须牢牢把握数字时钟所要实现的功能,在确定方案的情况下理清思路,认真思考如何实现时钟的各种功能。

通过编程认识到一个单片机编程人员必须有清晰的思路。

编写这个程序花费了将近一天的时间,耗费了不少精力。

在编程过程中使用的是自己焊接的单片机开发板,其液晶的用法(主要是RS、RW,E这些端口的时序),在调试过程中我们发现了一些问题,一是液晶上在年月日后面空白处出现了乱码,原因是在初始化函数中显示年月日的时候for语句多执行了3次。

通过此次单片机设计我们掌握了1602A液晶的用法,也学到了很多编程技巧,获益匪浅。

附录实验源程序

#include

#defineuintunsignedint

#defineucharunsignedchar

Ucharcodetable[]="2010-05-18";

ucharcodetime[]="23:

00:

00";

ucharcodexi1[]="mon";

ucharcodexi2[]="tue";

ucharcodexi3[]="wed";

ucharcodexi4[]="thu";

ucharcodexi5[]="fri";

ucharcodexi6[]="sat";

ucharcodexi7[]="sun";

sbitwr=P3^3;

sbitrd=P3^5;

sbitlcde=P3^4;

uinti,shi,fen,miao,nian,yue,ri,count,num,x;

voiddelay(uintz)

{

uintx,y;

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

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

}

voidwrite_add(ucharadd)

{

rd=0;

P0=add;

lcde=1;

delay(5);

lcde=0;

}

voidwrite_date(uchardate)

{

rd=1;

P0=date;

lcde=1;

delay(5);

lcde=0;

}

voidwritesfm(ucharadd,uchardate)

{

uchars,g;

s=date/10;

g=date%10;

write_add(0x80+0x40+add);

write_date(0x30+s);

write_date(0x30+g);

}

voidwritenyr(ucharadd,uchardate)

{

uchars,g;

s=date/10;

g=date%10;

write_add(0x80+0x00+add);

write_date(0x30+s);

write_date(0x30+g);

}

voidxi(uchara)

{

if(a==1)

{

write_add(0x80+0x00+10);

for(i=0;i<3;i++)

{

write_date(xi1[i]);

delay(5);

}

}

if(a==2)

{

write_add(0x80+0x00+10);

for(i=0;i<3;i++)

{

write_date(xi2[i]);

delay(5);

}

}

if(a==3)

{

write_add(0x80+0x00+10);

for(i=0;i<3;i++)

{

write_date(xi3[i]);

delay(5);

}

}

if(a==4)

{

write_add(0x80+0x00+10);

for(i=0;i<3;i++)

{

write_date(xi4[i]);

delay(5);

}

}

if(a==5)

{

write_add(0x80+0x00+10);

for(i=0;i<3;i++)

{

write_date(xi5[i]);

delay(5);

}

}

if(a==6)

{

write_add(0x80+0x00+10);

for(i=0;i<3;i++)

{

write_date(xi6[i]);

delay(5);

}

}

if(a==7)

{

write_add(0x80+0x00+10);

for(i=0;i<3;i++)

{

write_date(xi7[i]);

delay(5);

}

}

}

voidinit()

{

lcde=0;

wr=0;

write_add(0x38);

write_add(0x0c);

write_add(0x06);

write_add(0x01);

write_add(0x80+0x00+0);

for(i=0;i<10;i++)

{

write_date(table[i]);

delay(5);

}

write_add(0x80+0x00+10);

for(i=0;i<3;i++)

{

write_date(xi7[i]);

delay(5);

}

write_add(0x80+0x40+0);

for(i=0;i<8;i++)

{

write_date(time[i]);

delay(5);

}

}

voidmain()

{

init();

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

while

(1)

{

key();

if(count==20)

{

count=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==24)

{

shi=0;

ri++;

x++;

xi(x);

if(x==7)

{

x=0;

}

if(ri==30)

{

ri=0;

yue++;

if(yue==13)

{

yue=0;

nian++;

if(nian==100)

{

nian=0;

}

writenyr(2,nian);

}

writenyr(5,yue);

}

writenyr(8,ri);

}

writesfm(0,shi);

}

writesfm(3,fen);

}

writesfm(6,miao);

}

}

}

voidt()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

}

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

当前位置:首页 > 人文社科 > 广告传媒

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

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