lcd显示的秒表单片机课程设计Word文档格式.docx

上传人:b****2 文档编号:611599 上传时间:2023-04-29 格式:DOCX 页数:41 大小:365.35KB
下载 相关 举报
lcd显示的秒表单片机课程设计Word文档格式.docx_第1页
第1页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第2页
第2页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第3页
第3页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第4页
第4页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第5页
第5页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第6页
第6页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第7页
第7页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第8页
第8页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第9页
第9页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第10页
第10页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第11页
第11页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第12页
第12页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第13页
第13页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第14页
第14页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第15页
第15页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第16页
第16页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第17页
第17页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第18页
第18页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第19页
第19页 / 共41页
lcd显示的秒表单片机课程设计Word文档格式.docx_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

lcd显示的秒表单片机课程设计Word文档格式.docx

《lcd显示的秒表单片机课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《lcd显示的秒表单片机课程设计Word文档格式.docx(41页珍藏版)》请在冰点文库上搜索。

lcd显示的秒表单片机课程设计Word文档格式.docx

AT89C51是128字节内部RAM,4KB可编程Flash存储器(可擦写1000次),三级程序存储器保密,静态工作频率:

0Hz-24MHz,2个16位定时/计数器,一个串行通讯口,6个中断源,32条I/O引线,有片内时种振荡器。

输入输出引脚资料:

 

(1)P0端口[P0.0-P0.7]P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。

作为输出口时能驱动8个TTL。

在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。

  

(2)P1端口[P1.0-P1.7]P1是一个带有内部上拉电阻的8位双向I/0端口。

输出时可驱动4个TTL。

端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

  (3)P2端口[P2.0-P2.7]P2是一个带有内部上拉电阻的8位双向I/0端口。

  在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。

而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。

  (4)P3端口[P3.0-P3.7]P2是一个带有内部上拉电阻的8位双向I/0端口。

其它控制或复用引脚:

(1)ALE/PROG30访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。

即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。

在访问外部数据存储器时,出现一个ALE脉冲。

(2)PSEN29该引是外部程序存储器的选通信号输出端。

当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。

但访问外部数据存储器时,将不会有脉冲输出。

  (3)EA/Vpp31外部访问允许端。

当该引脚访问外部程序存储器时,应输入低电平。

要使AT89C51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。

 AT89C51特殊功能寄存器列表(适用于同一架构的芯片)

符 号

地 址

注 释

*ACC

E0H

累加器

*B

F0H

乘法寄存器

*PSW

D0H

程序状态字

SP

81H

堆栈指针

DPL

82H

数据存储器指针低8位

DPH

83H

数据存储器指针高8位

*IE

A8H

中断允许控制器

*IP

D8H

中断优先控制器

*P0

80H

端口0

*P1

90H

端口1

*P2

A0H

端口2

*P3

B0H

端口3

PCON

87H

电源控制及波特率选择

*SCON

98H

串行口控制器

SBUF

99H

串行数据缓冲器

*TCON

88H

定时器控制

TMOD

89H

定时器方式选择

TL0

8AH

定时器0低8位

TL1

8BH

定时器1低8位

TH0

8CH

TH1

8DH

定时器1高8位

带*号的特殊功能寄存器都是可以位寻址的寄存器

4.11602LCD

1602字符型LCD简介:

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。

1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780.

1602LCD主要技术参数:

显示容量:

16×

2个字符

芯片工作电压:

4.5—5.5V

工作电流:

2.0mA(5.0V)

模块最佳工作电压:

5.0V

字符尺寸:

2.95×

4.35(W×

H)mm

引脚功能说明:

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表1所示:

编号

符号

引脚说明

1

VSS

电源地

9

D2

数据

2

VDD

电源正极

10

D3

3

VL

液晶显示偏压

11

D4

4

RS

数据/命令选择

12

D5

5

R/W

读/写选择

13

D6

6

E

使能信号

14

D7

7

D0

15

BLA

背光源正极

8

D1

16

BLK

背光源负极

表1:

引脚接口说明

第1脚:

VSS为地电源。

第2脚:

VDD接5V正电源。

第3脚:

VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:

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

第5脚:

R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线。

第15脚:

背光源正极。

第16脚:

背光源负极。

1602LCD的指令说明及时序:

1602液晶模块内部的控制器共有11条控制指令,如下表2所示:

序号

指令

清显示

光标返回

*

置输入模式

I/D

S

显示开/关控制

D

C

B

光标或字符移位

S/C

R/L

置功能

DL

N

F

置字符发生存贮器地址

字符发生存贮器地址

置数据存贮器地址

显示数据存贮器地址

读忙标志或地址

BF

计数器地址

写数到CGRAM或DDRAM)

要写的数据内容

从CGRAM或DDRAM读数

读出的数据内容

表2:

控制命令表

1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

(说明:

1为高电平、0为低电平)

指令1:

清显示,指令码01H,光标复位到地址00H位置。

指令2:

光标复位,光标返回到地址00H。

指令3:

光标和显示模式设置I/D:

光标移动方向,高电平右移,低电平左移S:

屏幕上所有文字是否左移或者右移。

高电平表示有效,低电平则无效。

指令4:

显示开关控制。

D:

控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:

控制光标的开与关,高电平表示有光标,低电平表示无光标B:

控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:

光标或显示移位S/C:

高电平时移动显示的文字,低电平时移动光标。

指令6:

功能设置命令DL:

高电平时为4位总线,低电平时为8位总线N:

低电平时为单行显示,高电平时双行显示F:

低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

指令7:

字符发生器RAM地址设置。

指令8:

DDRAM地址设置。

指令9:

读忙信号和光标地址BF:

为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙

指令10:

写数据。

指令11:

读数据。

与HD44780相兼容的芯片时序下表3如下:

读状态

输入

RS=L,R/W=H,E=H

输出

D0—D7=状态字

写指令

RS=L,R/W=L,D0—D7=指令码,E=高脉冲

读数据

RS=H,R/W=H,E=H

D0—D7=数据

写数据

RS=H,R/W=L,D0—D7=数据,E=高脉冲

表3:

基本操作时序表

读写操作时序如图2和3所示:

图2读操作时序

图3写操作时序

1602LCD的RAM地址映射及标准字库表:

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。

要显示字符时要先输入显示字符地址,图4是1602的内部显示地址。

图41602LCD内部显示地址

例如第二行第一个字符的地址是40H,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。

在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。

每次输入指令前都要判断液晶模块是否处于忙的状态。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图5所示,这些字符有:

阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码

图5字符代码与图形对应图

1602LCD的一般初始化(复位)过程:

延时15mS

写指令38H(不检测忙信号)

延时5mS

以后每次写指令、读/写数据操作均需要检测忙信号

写指令38H:

显示模式设置

写指令08H:

显示关闭

写指令01H:

显示清屏

写指令06H:

显示光标移动设置

写指令0CH:

显示开及光标设置

五、电路分析

总体设计分析

本系统中,硬件电路主要有电源电路,晶振电路,复位电路,显示电路以及一些按键电路等,本系统采用AT89C51单片机为中心器件,利用定时器计数器定时和记数的原理,结合硬件电路如电源电路,晶振电路,复位电路,显示电路,蜂鸣器电路以及一些按键电路等来设计计数器,将软、硬件有机地结合起来。

硬件系统采用PROTEUS功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。

5.1电源电路

电源电路是系统最基本的部分,任何电路都离不开电源部分,

随着半导体工艺的发展,稳压电路也采用集成电路器件来制成。

可采用独立的稳压电源。

这种供电方式的优点是稳压可靠,且有各种成熟电路可供选择。

由集成稳压器具有体积小,外界线路简单,使用方便,工作可靠等优点。

因此,在各种电子设备中应用十分普遍,为了跟上时代的发展,可采用W7800系列三端稳压器,主要利用它的输出电压是固定的在使用中不能进行调整等优点。

5.2晶振电路

AT89C51内部的振荡电路是一个高增益反相放大器,引脚RXD和TXD分别是此反向振荡放大器的输入端和输出端。

该反向放大器可以配置为内部方式的片内振荡器。

如图所示,这里选用12MHE的内部振荡方式,电路如下:

电容器C1,C2起稳定振荡频率,快速起振的作用,C1,C2可在20~100PF之间取,这里取30PF,接线时要使晶振振荡器尽可能接近单片机。

5.3复位电路

采用上电+按键复位电路,上电后,由于电容充电,使RST持续一段时间高电平时间。

当单片机已在运行之中时,按下复位按键也能使RST持续一段时间的高电平,从而实现上电加开关复位的操作。

这不仅能时单片机复位,而且还能使单片机的外围芯片也同时复位,当程序出现错误时,可以随时使电路复位。

复位是单片机的初始化操作。

其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。

除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

除PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表1所示。

寄存器

复位状态

PC

0000H

TCON

00H

ACC

TL0

PSW

TH0

SP

07H

TL1

DPTR

TH1

P0-P3

FFH

SCON

IP

XX000000B

SBUF

不定

IE

0X000000B

PCON

0XXX0000B

TMOD

表1一些寄存器的复位状态

因STC89C52单片机需高电平(3.7~5.5V)复位,且复位时流入单片机的电流不能超过10mA。

具体参数:

根据所需要的复位参数可得当按下SW键时出现两个机器周期的高电平在单片机REST端产生的压降等于:

=

图复位电路

5.4显示电路

显示电路既可以选用液晶显示器,也可以选用数码管显示,我们采用液晶显示电路

1602LCD引脚接口说明

DataI/O

液晶显示偏压信号

数据命令选择端口(H/L)

读/写选择端(H/L)

显示电路部分引脚分析:

3脚:

VL,液晶显示偏压信号,用于调整LCD1602的显示对比度,一般会外接电位器用以调整偏压信号,此脚电压为0时可以得到最强的对比度。

4脚:

RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而为低电平时,则是进行命令字节的传输操作。

命令字节,即是用来对LCD1602的一些工作方式作设置的字节;

数据字节,即使用以在1602上显示字节。

5脚:

R/W,读写选择端。

当此脚为高电平可对LCD1602进行读数据操作,反之进

行写数据操作。

6脚:

E,使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。

7~14脚:

8位并行数据口,使得对LCD1602的数据读写大为方便。

基本操作时序:

(1)读状态:

输入:

RS=L,RW=H,E=H;

输出:

D0~D7=状态字

(2)写指令:

RS=L,RW=L,D0~D7=指令码,E=高脉冲;

(3)读数据:

RS=H,RW=H,E=H;

D0~D7=数据

(4)写数据:

RS=H,RW=L,D0~D7=数据,E=高脉冲;

需要两个写时序:

①当我们要写指令字,设置LCD1602的工作方式时:

需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。

②当我们要写入数据字,在1602上实现显示时:

需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。

6、代码分析

#include<

reg51.h>

#include<

intrins.h>

皆属于头文件,前者是定义51单片机特殊功能寄存器和位寄存器的,后者包含特殊指令例如:

crol(),cror()。

#defineucharunsignedchar,#defineuintunsignedint,definedelayNOP(){nop();

nop();

nop()}皆属于宏定义,后者是将三个延时周期定义在一起,用一个delayNOP()表示。

VoidLCD_intialize,voidLCD_Set_POS(uchar),voidDisplay_String(char*,char);

皆为调用函数,第一个是调用LCD初始化函数;

第二个是调用LCD的显示位置函数;

第三个是调用LCD写数据函数;

第四个是调用LCD指定行上显示字符串函数。

SbitK1=P1^0,sbitK2=P2^1,sbitBEEP=3^0,sbitLCD_RS=P2^0,sbitLCD_RW=P2^1,sbitLCD_EN=P2^2;

皆为个函数接口声明,定义K1、K2为两个控制开关;

定义BEEP为扬声器接口;

RS为寄存器选择高电平

(1)时选择数据寄存器、低电平(0)时选择指令寄存器;

RS为读写信号,高电平

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

E(或EN)端为使能端(enable),将单片机与LCD1602显示器连接。

UcharKeyCount=0;

KeyCount为按键计数变量,用于累计按键的次数。

定义其为无符号整型,并且付初值为0.

ucharcodemsg1[]={"

SecondWatch0"

},ucharcodemsg2[]={"

>

"

};

定义两个一维数组,在protues仿真软件中,当按下play键后,1602LCD显示屏是会出现这两个数组中的字符。

ucharcodePrompts[][16]=

{

{"

:

1---->

},

2---->

:

2"

1->

2:

3-->

4"

}

}

定义一个二维数组,将其中的一维显示于1602LCD上。

K1为启停控制按钮,第一次按下时开始计数,显示“:

1--”;

当第二次按下时停止计数,显示"

……

ucharTime_Buffer[]={0,0,0,0},ucharLCD_Display_Buffer[]={"

00:

00"

};

定义两个数组,一个用于计时缓冲,一个用于显示时间缓冲。

voidBeeP()

uchari,j=70;

for(i=0;

i<

180;

i++)

{

while(--j);

BEEP=~BEEP;

}

BEEP=0;

}定义一个调用蜂鸣器的子函数。

For(i=0;

i++)用于控制蜂鸣器响的时间,BEEP=~BEEP用于使蜂鸣器进行短暂的响一下又不响的效果。

因为蜂鸣器接地,只有当P3.0接入高电平(即1)时,蜂鸣器才工作。

所以在响了一声过后,级(执行完成之后)将BEEP赋值为0,让它处于不导通状态,蜂鸣器不响。

voidDelayX(uintms)

uchari;

while(ms--)for(i=0;

120;

i++);

}定义一个延时子函数

voidShow_Second()

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+'

在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('

'

);

}定义显示计时函数

}LCD_Set_POS(0X45),调用函数,用于调用设置显示位置函数,在此子函数中又嵌套了一个函数调用,LCD_Write_Command(Position|0X80)(即LCD_Write_Command(0X45|0X80))函数。

进行或操作:

45

80

C5

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

当前位置:首页 > 工程科技 > 能源化工

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

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