电子时钟设计实验报告Word文档格式.docx
《电子时钟设计实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《电子时钟设计实验报告Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
VSS
电源地
9
D2
DataI/O
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
背光源负极
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=EnableTimer