1602lcd显示的秒表1.docx

上传人:b****6 文档编号:7132676 上传时间:2023-01-21 格式:DOCX 页数:16 大小:449.33KB
下载 相关 举报
1602lcd显示的秒表1.docx_第1页
第1页 / 共16页
1602lcd显示的秒表1.docx_第2页
第2页 / 共16页
1602lcd显示的秒表1.docx_第3页
第3页 / 共16页
1602lcd显示的秒表1.docx_第4页
第4页 / 共16页
1602lcd显示的秒表1.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

1602lcd显示的秒表1.docx

《1602lcd显示的秒表1.docx》由会员分享,可在线阅读,更多相关《1602lcd显示的秒表1.docx(16页珍藏版)》请在冰豆网上搜索。

1602lcd显示的秒表1.docx

1602lcd显示的秒表1

1602lcd显示的秒表

(1)

1602lcd显示的秒表

(1)

 

PSEN:

程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。

在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP:

外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。

需注意的是:

如果加密位LB1被编程,复位时内部会锁存EA端状态。

如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

XTAL1:

振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2:

振荡器反相放大器的输出端。

2.2系统分析

设计的电路主要是能多次记时和查询时间,记时的多少通过显示电路显示出来,每一次计时可以通过控制电路查询出来。

设计框图如图2-1所示;

图2-1

3硬件系统的设计

3.1硬件介绍

根据设计要求和设计思路,硬件电路有两部分组成,即单片机按键电路,LCD显示器电路。

图2-2为硬件电路设计框图。

图2-2

系统硬件电路根据课题设计要求,它由以下几个部件组成:

单片机89C52RC、电源、时分秒显示模块。

时分秒显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。

显示模块中时分秒显示驱动、校时模块都通过89C52RC的I/O口控制。

显示模块中的复位电路由89C52RC的RESET端控制。

电源部分:

电源部分有二部分组成。

一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作;另一部分是由5V的电池供电,以保证停电时正常走时。

正常情况下电池是不提供电能的,以保证电池的寿命。

3.2部分硬件原理图

3.2.1STC89C52管脚图

如图3-1所示:

图3-1

3.2.21602LCD液晶硬件图

如图3-2所示:

图3-2

3.3最小单片机系统

如图3-3所示:

图3-3

4系统的软件设计

此部分主要介绍显示模块,显示模块是实现数字钟的重要部分,在显示时,首先将时间十进制数据转化为显示段码,然后送往液晶显示。

显示段码采用动态扫描的方式。

在要求改变显示数据的类别时,只须改变@R1(指向数据缓冲区的指针)指向的十进制数据缓冲区即可。

如图4-1所示:

图4-1

结束语

通过这次实验,我学会了熟练运用protues,keil,protel等软件,在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。

为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。

其次,在这次课程设计中,我们运用到了以前所学的专业课知识。

虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获后,要做好一个课程设计,就必须做到:

在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。

附录1protel原理图

附录2PCB图

附录3protues仿真图

附录4程序清单

#include

#include

#defineucharunsignedchar

#defineunitunsignedint

#definedelayNOP(){_nop_();_nop_();_nop_();_nop_();}

//LCD控制

voidLCD_Initialize();

voidLCD_Set_POS(uchar);

voidLCD_Write_Data(uchar);

voidDisplay_String(uchar*,uchar);

sbitK1=P1^0;

sbitK2=P1^1;

sbitBEEP=P3^0;

sbitLCD_RS=P2^0;

sbitLCD_RW=P2^1;

sbitLCD_EN=P2^2;

ucharKeyCount=0;

ucharcodemsg1[]={"SecondWatch0"};

ucharcodemsg2[]={">>>>"};

ucharcodePrompts[][16]=

{

{":

:

1---->"},

{":

:

1---->:

:

2"},

{":

:

1->2:

:

3-->"},

{":

:

1->2:

:

3-->4"}

};

//计时缓冲与显示缓冲

ucharTime_Buffer[]={0,0,0,0};

ucharLCD_Display_Buffer[]={"00:

00:

00:

00"};

//蜂鸣器

voidBeep()

{

uchari,j=70;

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

{

while(--j);BEEP=~BEEP;

}

BEEP=0;

}

//延时

voidDelayX(unitms)

{

uchari;

while(ms--)for(i=0;i<120;i++);

}

//显示计时

voidShow_Second()

{

uchari;

LCD_Set_POS(0x45);//设置LCD显示起点

for(i=3;i!

=0xff;i--)

{

//将两位整数的1/100s,秒,分,时转换为8位数字字符

LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'0';

LCD_Display_Buffer[2*i]=Time_Buffer[i]%10+'0';

//在i=3,2,1,0时分别显示时,分,秒,1、100s

LCD_Write_Data(LCD_Display_Buffer[2*i+1]);

LCD_Write_Data(LCD_Display_Buffer[2*i]);

LCD_Write_Data(':

');

}

}

//Time0中断

voidTime0()interrupt1using0

{

TH0=-10000/256;

TL0=-10000%256;

Time_Buffer[0]++;

if(Time_Buffer[0]==100)

{

Time_Buffer[0]=0;Time_Buffer[1]++;

}

if(Time_Buffer[1]==60)//秒

{

Time_Buffer[1]=0;Time_Buffer[2]++;

}

if(Time_Buffer[2]==60)//分

{

Time_Buffer[2]=0;Time_Buffer[3]++;

}

if(Time_Buffer[3]==24)//时

Time_Buffer[3]=0;

}

//主函数

voidmain()

{

uchari;

IE=0x82;

TMOD=0x01;

TH0=-10000/256;

TL0=-10000%256;

LCD_Initialize();

Display_String(msg1,0x00);

Display_String(msg2,0x40);

while

(1)

{

if(K1==0)

{

DelayX(100);

i=++KeyCount;

switch(i)

{

case1:

case3:

TR0=1;

Display_String(Prompts[i-1],0);

break;

case2:

case4:

TR0=0;

Display_String(Prompts[i-1],0);

break;

default:

TR0=0;

break;

}

while(K1==0);//等待释放K1键

Beep();

}

else

if(K2==0)

{

TR0=0;

KeyCount=0;

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

Time_Buffer[i]=0;//清零计时缓冲

Display_String(msg1,0);

Beep();

DelayX(100);

while(K2==0);//等待释放K2键

}

Show_Second();

}

}

//1602LCD显示驱动函数e

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineDelayNOP(){_nop_();_nop_();_nop_();_nop_();}

bitLCD_Busy_Check();

voidLCD_Initialize();

voidLCD_Set_POS(uchar);

voidLCD_Write_Command(uchar);

voidLCD_Write_Data(uchar);

//延时

voidDelayMS(uintms)

{

uchart;

while(ms--)for(t=0;t<120;t++);

}

//LCD忙检查

bitLCD_Busy_Check()

{

bitResult;

LCD_RS=0;LCD_RW=1;LCD_EN=1;DelayNOP();

Result=(bit)(P0&0x80);

LCD_EN=0;

returnResult;

}

//向LCD写指令

voidLCD_Write_Command(ucharcmd)

{

while(LCD_Busy_Check());

LCD_RS=0;LCD_RW=0;LCD_EN=0;

_nop_();_nop_();

P0=cmd;DelayNOP();

LCD_EN=1;DelayNOP();

LCD_EN=0;

}

//向LCD写数据‘

voidLCD_Write_Data(ucharstr)

{

while(LCD_Busy_Check());

LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=str;DelayNOP();

LCD_EN=1;DelayNOP();LCD_EN=0;

}

//初始化LCD

voidLCD_Initialize()

{

DelayMS(5);LCD_Write_Command(0x38);

DelayMS(5);LCD_Write_Command(0x0c);

DelayMS(5);LCD_Write_Command(0x06);

DelayMS(5);LCD_Write_Command(0x01);

DelayMS(5);

}

//设置显示位置

voidLCD_Set_POS(ucharPosition)

{

LCD_Write_Command(Position|0x80);

}

//显示函数,在LCD指令行上显示字符串

voidDisplay_String(uchar*str,ucharLineNo)

{

uchark;

LCD_Set_POS(LineNo);

for(k=0;k<16;k++)LCD_Write_Data(str[k]);

}

附录5元器件清单

序号

名称

型号

数量

1

单片机

STC89C52

1

2

排针

2.54mm单排针

2排

3

排阻

2K

1

4

瓷片电容

30pf

2

5

晶振

11.0592MHZ

1

6

单片机插座

40P

1

7

按键

1

8

万能板

双面板10cm*15cm

1

9

电解电容

10uF/16V

1

10

电阻

10K

1

11

电阻

1K

1

12

可调电阻

W103

1

13

发光二极管

1

14

蜂鸣器

HYDZ

1

15

PNP三极管

9012

1

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

当前位置:首页 > 小学教育 > 语文

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

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