电子时钟设计实验报告.docx

上传人:b****3 文档编号:27342878 上传时间:2023-06-29 格式:DOCX 页数:25 大小:233.57KB
下载 相关 举报
电子时钟设计实验报告.docx_第1页
第1页 / 共25页
电子时钟设计实验报告.docx_第2页
第2页 / 共25页
电子时钟设计实验报告.docx_第3页
第3页 / 共25页
电子时钟设计实验报告.docx_第4页
第4页 / 共25页
电子时钟设计实验报告.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

电子时钟设计实验报告.docx

《电子时钟设计实验报告.docx》由会员分享,可在线阅读,更多相关《电子时钟设计实验报告.docx(25页珍藏版)》请在冰豆网上搜索。

电子时钟设计实验报告.docx

电子时钟设计实验报告

单片机电子时钟设计报告

一、设计任务

本次课程设计的电子时钟电路,是基于单片机STC89C52、时钟芯片和液晶显示,运用C语言编程实现。

电子时钟可以显示日期的年、月、日和时间的时、分、秒,具有复位功能。

二、系统硬件设备及芯片简介

数字电子钟系统设计已经成熟,但是目前系统设计时基本都是采用LED作为显示电路,造成硬件电路复杂、功耗高、产品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。

字符型液晶显示模块是一类专门用于显示字母、数字、符号等点阵式液晶显示模块。

本系统设计采用字符型液品显示模块LCD1602作为显示器件,这样不仅简化了系统的硬件设计,而且极大地提高了系统的可靠性。

1LCD1602简介

字符型液晶显示模块LCD1602已经是单片机应用设计中最常用的信息显示器件。

LCD1602可以显示两行,每行16个字符,采用+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。

2LCD1602功能介绍

2.1引脚功能

LCD1602采用标准14脚(无背光)或16脚(带背光)接

口,各引脚功能见表1。

表1引脚功能

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

DataI/O

2

VDD

电源正极

10

D3

DataI/O

3

VL

液晶显示偏压信号

11

D4

DataI/O

4

RS

数据/命令选择端

12

D5

DataI/O

5

R/W

读/写选择端

13

D6

DataI/O

6

E

使能信号

14

D7

DataI/O

7

D0

DataI/O

15

BLA

背光源正极

8

D1

DataI/O

16

BLK

背光源负极

 

2.2LCD1602读写指令

LCD1602读写指令较多且较复杂,具体使用可以查相关资料,下面仅列出最常用的的一些命令:

①写指令38H:

显示模式设置;②写指令08H:

显示关闭;③写指令01H:

显示清屏;④写指令06H:

显示光标移动设置;⑤写指令0CH:

显示开及光标设置。

2.3LCD1602读写操作时序

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=上升沿。

输出:

无。

2.4LCD1602显示方法

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

显示字符时,要先输入显示字符地址,即告诉模块在哪里显示字符。

因为写入显示地址时要求最高位D7恒定为高电平,所以实际写入的数据应该是要显示地址值加上80H,即将最高位D7置为1。

在使用此显示模块时一般要对其进行初始化,设置所需要的显示参数。

液晶模块在显示字符时光标是自动右移的,无需人工干预。

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

3数字电子钟硬件电路设计

硬件电路系统设计主要由单片机最小系统、输入电路、输出电路等组成。

单片机最小系统同所有单片机系统,在此不作讨论。

输入电路主要时间调节电路,为简化系统我们使两个外部中断来调节“时”和“分”数值,即将INT0、INT1分别接两个按钮。

LCD显示器和单片机接口电路可以采用总线方式或者是模拟口线方式,本设计采用第二种方式,即以单片机I/O模拟控制信号。

具体电路见图1,P0口作为数据,并接上拉电阻提升电压,P2.0接LCD的RS端、P2.1接LCD的R/W端、P2.2接LCD的E端,“分”调节按钮接INT0,“时”调节按钮接INT1,图1省略了电源和单片机最小系统电路。

 

图1数字电子钟硬件电路

三、设计电路图及程序

1.电路图如下

原理图如下:

2.程序

共有四段程序,用Keil仿真是程序列表如图

Regx52.h程序为:

 

#ifndef__AT89X52_H__

#define__AT89X52_H__

 

sfrP0=0x80;

sfrSP=0x81;

sfrDPL=0x82;

sfrDPH=0x83;

sfrPCON=0x87;

sfrTCON=0x88;

sfrTMOD=0x89;

sfrTL0=0x8A;

sfrTL1=0x8B;

sfrTH0=0x8C;

sfrTH1=0x8D;

sfrP1=0x90;

sfrSCON=0x98;

sfrSBUF=0x99;

sfrP2=0xA0;

sfrIE=0xA8;

sfrP3=0xB0;

sfrIP=0xB8;

sfrT2CON=0xC8;

sfrT2MOD=0xC9;

sfrRCAP2L=0xCA;

sfrRCAP2H=0xCB;

sfrTL2=0xCC;

sfrTH2=0xCD;

sfrPSW=0xD0;

sfrACC=0xE0;

sfrB=0xF0;

/*------------------------------------------------

P0BitRegisters

------------------------------------------------*/

sbitP0_0=0x80;

sbitP0_1=0x81;

sbitP0_2=0x82;

sbitP0_3=0x83;

sbitP0_4=0x84;

sbitP0_5=0x85;

sbitP0_6=0x86;

sbitP0_7=0x87;

/*------------------------------------------------

PCONBitValues

------------------------------------------------*/

#defineIDL_0x01

#defineSTOP_0x02

#definePD_0x02/*Alternatedefinition*/

#defineGF0_0x04

#defineGF1_0x08

#defineSMOD_0x80

/*------------------------------------------------

TCONBitRegisters

------------------------------------------------*/

sbitIT0=0x88;

sbitIE0=0x89;

sbitIT1=0x8A;

sbitIE1=0x8B;

sbitTR0=0x8C;

sbitTF0=0x8D;

sbitTR1=0x8E;

sbitTF1=0x8F;

/*------------------------------------------------

TMODBitValues

------------------------------------------------*/

#defineT0_M0_0x01

#defineT0_M1_0x02

#defineT0_CT_0x04

#defineT0_GATE_0x08

#defineT1_M0_0x10

#defineT1_M1_0x20

#defineT1_CT_0x40

#defineT1_GATE_0x80

#defineT1_MASK_0xF0

#defineT0_MASK_0x0F

/*------------------------------------------------

P1BitRegisters

------------------------------------------------*/

sbitP1_0=0x90;

sbitP1_1=0x91;

sbitP1_2=0x92;

sbitP1_3=0x93;

sbitP1_4=0x94;

sbitP1_5=0x95;

sbitP1_6=0x96;

sbitP1_7=0x97;

sbitT2=0x90;/*ExternalinputtoTimer/Counter2,clockout*/

sbitT2EX=0x91;/*Timer/Counter2capture/reloadtrigger&dirctl*/

/*------------------------------------------------

SCONBitRegisters

------------------------------------------------*/

sbitRI=0x98;

sbitTI=0x99;

sbitRB8=0x9A;

sbitTB8=0x9B;

sbitREN=0x9C;

sbitSM2=0x9D;

sbitSM1=0x9E;

sbitSM0=0x9F;

/*------------------------------------------------

P2BitRegisters

------------------------------------------------*/

sbitP2_0=0xA0;

sbitP2_1=0xA1;

sbitP2_2=0xA2;

sbitP2_3=0xA3;

sbitP2_4=0xA4;

sbitP2_5=0xA5;

sbitP2_6=0xA6;

sbitP2_7=0xA7;

/*------------------------------------------------

IEBitRegisters

------------------------------------------------*/

sbitEX0=0xA8;/*1=EnableExternalinterrupt0*/

sbitET0=0xA9;/*1=EnableTimer0interrupt*/

sbitEX1=0xAA;/*1=EnableExternalinterrupt1*/

sbitET1=0xAB;/*1=EnableTimer1interrupt*/

sbitES=0xAC;/*1=EnableSerialportinterrupt*/

sbitET2=0xAD;/*1=EnableTimer2interrupt*/

sbitEA=0xAF;/*0=Disableallinterrupts*/

/*------------------------------------------------

P3BitRegisters(Mnemonics&Ports)

------------------------------------------------*/

sbitP3_0=0xB0;

sbitP3_1=0xB1;

sbitP3_2=0xB2;

sbitP3_3=0xB3;

sbitP3_4=0xB4;

sbitP3_5=0xB5;

sbitP3_6=0xB6;

sbitP3_7=0xB7;

sbitRXD=0xB0;/*Serialdatainput*/

sbitTXD=0xB1;/*Serialdataoutput*/

sbitINT0=0xB2;/*Externalinterrupt0*/

sbitINT1=0xB3;/*Externalinterrupt1*/

sbitT0=0xB4;/*Timer0externalinput*/

sbitT1=0xB5;/*Timer1externalinput*/

sbitWR=0xB6;/*Externaldatamemorywritestrobe*/

sbitRD=0xB7;/*Externaldatamemoryreadstrobe*/

/*------------------------------------------------

IPBitRegisters

------------------------------------------------*/

sbitPX0=0xB8;

sbitPT0=0xB9;

sbitPX1=0xBA;

sbitPT1=0xBB;

sbitPS=0xBC;

sbitPT2=0xBD;

/*------------------------------------------------

T2CONBitRegisters

------------------------------------------------*/

sbitCP_RL2=0xC8;/*0=Reload,1=Captureselect*/

sbitC_T2=0xC9;/*0=Timer,1=Counter*/

sbitTR2=0xCA;/*0=Stoptimer,1=Starttimer*/

sbitEXEN2=0xCB;/*Timer2externalenable*/

sbitTCLK=0xCC;/*0=SerialclockusesTimer1overflow,1=Timer2*/

sbitRCLK=0xCD;/*0=SerialclockusesTimer1overflow,1=Timer2*/

sbitEXF2=0xCE;/*Timer2externalflag*/

sbitTF2=0xCF;/*Timer2overflowflag*/

/*------------------------------------------------

T2MODBitValues

------------------------------------------------*/

#defineDCEN_0x01/*1=Timer2canbeconfiguredasup/downcounter*/

#defineT2OE_0x02/*Timer2outputenable*/

/*------------------------------------------------

PSWBitRegisters

------------------------------------------------*/

sbitP=0xD0;

sbitFL=0xD1;

sbitOV=0xD2;

sbitRS0=0xD3;

sbitRS1=0xD4;

sbitF0=0xD5;

sbitAC=0xD6;

sbitCY=0xD7;

/*------------------------------------------------

InterruptVectors:

InterruptAddress=(Number*8)+3

------------------------------------------------*/

#defineIE0_VECTOR0/*0x03ExternalInterrupt0*/

#defineTF0_VECTOR1/*0x0BTimer0*/

#defineIE1_VECTOR2/*0x13ExternalInterrupt1*/

#defineTF1_VECTOR3/*0x1BTimer1*/

#defineSIO_VECTOR4/*0x23Serialport*/

#defineTF2_VECTOR5/*0x2BTimer2*/

#defineEX2_VECTOR5/*0x2BExternalInterrupt2*/

#endif

 

LCD1602驱动程序为:

 

#ifndefLCD_CHAR_1602_2005_4_9

#defineLCD_CHAR_1602_2005_4_9

#include

//PortDefinitions**********************************************************

sbitLcdRs=P2^0;

sbitLcdRw=P2^1;

sbitLcdEn=P2^2;

sfrDBPort=0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口

//内部等待函数**************************************************************************

unsignedcharLCD_Wait(void)

{

LcdRs=0;

LcdRw=1;_nop_();

LcdEn=1;_nop_();

//while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,

//可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80

//实际硬件时打开此语句

LcdEn=0;

returnDBPort;

}

//向LCD写入命令或数据************************************************************

#defineLCD_COMMAND0//Command

#defineLCD_DATA1//Data

#defineLCD_CLEAR_SCREEN0x01//清屏

#defineLCD_HOMING0x02//光标返回原点

voidLCD_Write(bitstyle,unsignedcharinput)

{

LcdEn=0;

LcdRs=style;

LcdRw=0;_nop_();

DBPort=input;_nop_();//注意顺序

LcdEn=1;_nop_();//注意顺序

LcdEn=0;_nop_();

LCD_Wait();

}

//设置显示模式************************************************************

#defineLCD_SHOW0x04//显示开

#defineLCD_HIDE0x00//显示关

#defineLCD_CURSOR0x02//显示光标

#defineLCD_NO_CURSOR0x00//无光标

#defineLCD_FLASH0x01//光标闪动

#defineLCD_NO_FLASH0x00//光标不闪动

voidLCD_SetDisplay(unsignedcharDisplayMode)

{

LCD_Write(LCD_COMMAND,0x08|DisplayMode);

}

//设置输入模式************************************************************

#defineLCD_AC_UP0x02

#defineLCD_AC_DOWN0x00//default

#defineLCD_MOVE0x01//画面可平移

#defineLCD_NO_MOVE0x00//default

voidLCD_SetInput(unsignedcharInputMode)

{

LCD_Write(LCD_COMMAND,0x04|InputMode);

}

//移动光标或屏幕************************************************************

/*

#defineLCD_CURSOR0x02

#defineLCD_SCREEN0x08

#defineLCD_LEFT0x00

#defineLCD_RIGHT0x04

voidLCD_Move(unsignedcharobject,unsignedchardirection)

{

if(object==LCD_CURSOR)

LCD_Write(LCD_COMMAND,0x10|direction);

if(object==LCD_SCREEN)

LCD_Write(LCD_COMMAND,0x18|direction);

}

*/

//初始化LCD************************************************************

voidLCD_Initial()

{

LcdEn=0;

LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵

LCD_Write(LCD_COMMAND,0x38);

LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//开启显示,无光标

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动

}

//***

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

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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