ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:236.19KB ,
资源ID:22779660      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22779660.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(LCD1602数字电子钟.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

LCD1602数字电子钟.docx

1、LCD1602数字电子钟LCD1602数字电子钟摘要:随着科技的进展,单片机的应用正在不断深入,涉及到日常生活的方方面面。本设计是基于单片机89C51为操纵核心,以液晶为显示的数字时钟。本数字时钟设计的原理相对简单,因此硬件电路也相对简单,难点和重点要紧放在C语言的编程上,使用到定时器的子程序、延时程序、时分秒的操纵程序、液晶模块和单片机模块的初始化程序、液晶显示的程序等,各个函数交叉调用,配合主程序的运行。关键字:LCD1602 89C51 定时器一、数字时钟的概述与功能的简介本设计用到单片机的P0端做数据端,把数据发送到LCD的数据接收端,然后通过利用程序进行对液晶的操纵,实现数字的显示。

2、在本设计中,设计了四个功能按键,分别是启动/停止时钟,时、分、秒的加一功能,以此对时刻的调整。硬件电路相对简单,因此软件的开销相对增大,专门是对液晶模块的程序设计,也正是设计本数字时钟的目的,期望通过此设计提高自己的软件编程与调试能力。由于个人能力也有限,在短时刻内不能编写出用液晶显示年月日的程序,因为代码量确实增大许多。二、89C51单片机的简介1. 单片机的概述所谓单片机,通俗的来讲,确实是把中央处理器CPUCentral Processing Unit,储备器memory,定时器,I/OInput/Output接口电路等一些运算机的要紧功能部件集成在一块集成电路芯片上的微型运算机。单片机

3、又称为微操纵器MCU。中文单片机的称呼是由英文名称Single Chip Microcomputer直截了当翻译而来的。2.芯片引脚图的介绍 芯片的引脚图如下:引脚功能:I/O接口MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照-单片机引脚图:P0.0P0.7 P0口8位双向口线在引脚的3932号端子。P1.0P1.7 P1口8位双向口线在引脚的18号端子。P2.0P2.7 P2口8位双向口线在引脚的2128号端子。P3.0P3.7 P2口8位双向口线在引脚的1017号端子。P0口有三个功能: 1、外部扩展储备器时,当做数据总线如图1中的D0D7为数据总线接口 2、外部扩展储

4、备器时,当作地址总线如图1中的A0A7为地址总线接口 3、不扩展时,可做一样的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。P1口只做I/O口使用:其内部有上拉电阻。P2口有两个功能: 1、扩展外部储备器时,当作地址总线使用 2、做一样I/O口使用,其内部有上拉电阻;P3口有两个功能:除了作为I/O使用外其内部有上拉电阻,还有一些专门功能,由专门寄存器来设置。ALE/PROG 地址锁存操纵信号在系统扩展时,ALE用于操纵把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。ALE有可能是高电平也有可能是低电平,当ALE是高电平常,承诺地址锁存信号,当访问外部

5、储备器时,ALE信号负跳变即由正变负将P0口上低8位地址信号送入锁存器。当ALE是低电平常,P0口上的内容和锁存器输出一致。 在没有访问外部储备器期间,ALE以1/6振荡周期频率输出即6分频,当访问外部储备器以1/12振荡周期输出12分频。PROG为编程脉冲的输入端程序通过编程脉冲输入才能写到里面去的,那个脉冲的输入端口确实是PROG。 PSEN为外部程序储备器读选通信号在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作。 RST 复位信号 当输入的信号连续2个机器周期以上高电平常即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序储备器

6、的0000H单元读取第一条指令码。XTAL1和XTAL2 外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。VCC:电源+5V输入VSS:GND接地。三、89C51单片机结构1、总体结构结构框图如下:中央处理器CPU MCS-51的CPU能处理8位二进制数或代码。CPU是单片机的要紧核心部件,在CPU里面包含了运算器、操纵器以及假设干寄存器等部件给成。总线指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信。地址总线AB:地址总线是单向的,用于传送地址信息。地址总线的宽度为16位,因此基外部储备器直截了当寻址64K

7、,16位地址总线由P0口经地址锁存器提供低8位地址A0A7,P2口直截了当提供高8位地址A8A15。数据总线DB:一样为双向,用于CPU与储备器,CPU与外设、或外设与外设之间传送数据信息包括实际意义的数据和指令码。数据总线宽度为8位,由P0口提供。操纵总线CB:是运算机系统中所有操纵信号的总称,在操纵总线中传送的是操纵信息。由P3口的第二功能状态和4根独立的操纵总线,RESET、EA、ALE、PSEN组成。储备器用来存放运算机中的所有信息:包括程序、原始数据、运算的中间结果及最终结果等。只读储备器ROM: 只读储备器在使用时,只能读出而不能写入,断电后ROM中的信息可不能丢失。因此一样用来存

8、放一些固定程序,如监控程序、子程序、字库及数据表等。内部程序储备器ROM:MCS-51内部有4KB/8KB字节的ROM51系列为4KB,51系列为8KB,用于存放程序、原始数据或表格。因此称之为程序储备器,简称内部RAM。地址范畴为0000HFFFFH64KB。随机储备器RAM: 这种储备器又叫读写储备器。它不仅能读取存放在储备单元中的数据,还能随时写入新的数据,写入后原先的数据就丢失了。断电后RAM中的信息全部丢失。因些,RAM常用于存放经常要改变的程序或中间运算结果等信息。内部数据储备器RAM:MCS-51单片机芯片共有256个RAM单元,其中后128单元被专用寄存器占用稍后我们详解,能作

9、为寄存器供用户使用的只是前128单元,用于存放可读写的数据。因此通常所说的内部数据储备器确实是指前128单元,简称内部RAM。地址范畴为00HFFH256B。是一个多用多功能数据储备器,有数据储备、通用工作寄存器、堆栈、位地址等空间。定时器/计数器 80C51单片机内部设有两个16位的可编程定时器/计数器。可编程的意思是指其功能如工作方式、定时时刻、量程、启动方式等均可由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器之外,还有两个专门功能寄存器操纵寄存器和方式寄存器。定时器/计数器的结构:中断系统 8051单片机的中断系统简单有用,其差不多特点是:有5个固定的可屏蔽中断源,3个在

10、片内,2个在片外,它们在程序储备器中各有固定的中断入口地址,由此进入中断服务程序;5个中断源有两级中断优先级,可形成中断嵌套;2个专门功能寄存器用于中断操纵和条件设置的 编程。中断系统的结构:5个中断源的符号、名称及产生的条件如下。INT0:外部中断0,由P32端口线引入,低电平或下跳沿引起。INT1:外部中断1,由P33端口线引入,低电平或下跳沿引起。T0:定时器计数器0中断,由T0计满回零引起。T1:定时器计数器l中断,由T1计满回零引起。TIRI:串行IO中断,串行端口完成一帧字符发送接收后引起。2.定时器/计数器中相关寄存器的设置定时计数器的原理:16位的定时器/计数器实质上确实是一个

11、加1计数器,其操纵电路受软件操纵、切换。 当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。明显,定时器的定时时刻与系统的振荡频率有关。因一个机器周期等于12个振荡周期,因此计数频率fcount=1/12osc。 这是最短的定时周期。假设要延长定时时刻,那么需要改变定时器的初值,并要适当选择定时器的长度如8位、13位、16位等。 当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平。假设一个机器周期采样值为1,下一个机器周期

12、采样值为0,那么计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。因此检测一个由1至0的跳变需要两个机器周期,故外部事年的最高计数频率为振荡频率的1/24。例如,假如选用12MHz晶振,那么最高计数频率为0.5MHz。尽管对外部输入信号的占空比无专门要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时刻均需在一个机器周期以上。 当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时刻,除非定时器计满溢出,才可能中断CPU当前操作。CPU也能够重新设置定时器工作方式,以改变定时器的操作。由此可见,定时器

13、是单片机中效率高而且工作灵活的部件。 综上所述,我们定时器/计数器是一种可编程部件,因此在定时器/计数器开始工作之前,CPU必须将一些命令称为操纵字写入定时/计数器。将操纵字写入定时/计数器的过程叫定时器/计数器初始化。在初始化过程中,要将工作方式操纵字写入方式寄存器,工作状态字或相关位写入操纵寄存器,赋定时/计数初值。下面我们就提出的操纵字的格式及各位的要紧功能与大伙儿详细的讲解。操纵寄存器 定时器计数器T0和T1有2个操纵寄存器-TMOD和TCON,它们分别用来设置各个定时器计数器的工作方式,选择定时或计数功能,操纵启动运行,以及作为运行状态的标志等。其中,TCON寄存器中另有4位用于中断

14、系统。定时器/计数器方式寄存器TMOD 定时器方式操纵寄存器TMOD在专门功能寄存器中,字节地址为89H,无位地址。TMOD的格式如以下图所示。由图可见,TMOD的高4位用于T1,低4使用于T0,4种符号的含义如下:GATE:门操纵位。GATE和软件操纵位TR、外部引脚信号INT的状态,共同操纵定时器计数器的打开或关闭。CT:定时器计数器选择位。C/T1,为计数器方式;CT0,为定时器方式。M1M0:工作方式选择位,定时器计数器的4种工作方式由M1M0设定。定时器/计数器方式操纵寄存器TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器0,高半字节定义为定时器1。

15、复位时,TMOD所有位均为0。定时器/计数器操纵寄存器TCON TCON在专门功能寄存器中,字节地址为88H,位地址(由低位到高位)为88H一8FH,由于有位地址,十分便于进行位操作。TCON的作用是操纵定时器的启、停,标志定时器溢出和中断情形。 TCON的格式如以下图所示。其中,TFl,TRl,TF0和TR0位用于定时器计数器;IEl,ITl,IE0和IT0位用于中断系统。各位定义如下:TF1:定时器1溢出标志位。当字时器1计满溢出时,由硬件使TF1置1”,同时申请中断。进入中断服务程序后,由硬件自动清0”,在查询方式下用软件清0”。TR1:定时器1运行操纵位。由软件清0”关闭定时器1。当G

16、ATE=1,且INT1为高电平常,TR1置1”启动定时器1;当GATE=0,TR1置1”启动定时器1。TF0:定时器0溢出标志。其功能及操作情形同TF1。TR0:定时器0运行操纵位。其功能及操作情形同TR1。IE1:外部中断1要求标志。IT1:外部中断1触发方式选择位。IE0:外部中断0要求标志。IT0:外部中断0触发方式选择位。 TCON中低4位与中断有关。由于TCON是能够位寻址的,因而假如只清溢出或启动定时器工作,能够用位操作命令。定时器/计数器的初始化: 由于定时器/计数器的功能是由软件编程确定的,因此一样在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作。初始货的步骤一样如

17、下:1、确定工作方式即对TMOD赋值;2、预置定时或计数的初值可直截了当将初值写入TH0、TL0或TH1、TL1;3、依照需要开放定时器/计数器的中断直截了当对IE位赋值;4、启动定时器/计数器假设已规定用软件启动,那么可把TR0或TR1置1”;假设已规定由外中断引脚电平启动,那么需给外引脚步加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时。3、中断系统的操纵寄存器的设置中断承诺寄存器IE在中断源与CPU之间有一级操纵,类似开关,其中第一级为一个总开关,第二级为五个分开关,由IE操纵。在MCS51中断系统中,中断的承诺或禁止是由片内可进行位寻址的8位中断承诺寄存器I

18、E来操纵的。见下表其中EA是总开关,假如它等于0,那么所有中断都不承诺。ES串行口中断承诺ET1定时器1中断承诺EX1外中断1中断承诺。ET0定时器0中断承诺EX0外中断0中断承诺。中断优先级寄存器IP中断优先原那么:概括为四句话1、低级不打断高级2、高级不睬低级3、同级不能打断4、同级、同时中断,事先约定。四、系统硬件的设计 硬件电路整体说明:P0口做数据端,并接上上拉电阻,把数据直截了当送到LCD1602的数据接收端。S1为启动/停止计时按键,S2为秒数增加一的按键,S3为分钟数增加一的按键,S4为小时数增加一的按键,S5为复位按键。经典的复位电路与晶振电路的原理不再详细说明了。LCD16

19、02的说明: 1602LCD分为带背光和不带背光两种,基操纵器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如以下图10-54所示:图10-54 1602LCD尺寸图1602LCD要紧技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最正确工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明1602LCD采纳标准的14脚无背光或16脚带背光接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据

20、4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表10-13:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生鬼影,使用时能够通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平常选择数据寄存器、低电平常选择指令寄存器。第5脚:R/W为读写信号线,高电平常进行读操作,低电平常进行写操作。当RS和R/W共同为低电平常能够写入指令或者显示地址,当RS为低电平R/W为高电平常能

21、够读忙信号,当RS为高电平R/W为低电平常能够写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平常,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。硬件连接原理图如下:五、系统软件的编程设计程序运行流程简图程序代码如下:#include#define uchar unsigned char#define uint unsigned intuchar hour,min,sec,count,hour1,hour2,sec1,sec2,min1,min2,keystopc,temp;sbit keystop=P14;sbit keyh=P1

22、5;sbit keym=P16;sbit keys=P17;sbit lcden=P34;sbit lcdrs=P35;uchar code table=0,1,2,3,4,5,6,7,8,9,:;void init() /定时器初始化 count=0; hour=23; min=59; sec=50; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1;void delay(uint z) /延时程序 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void

23、 write_com(uchar com) lcdrs=0; P0=com; delay(0); lcden=1; delay(0); lcden=0;void write_data(uchar date) lcdrs=1; P0=date; delay(1); lcden=1; delay(1); lcden=0;void init_1602() /初始化1602 lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80);void display(uchar hou

24、r1,uchar hour2,uchar min1,uchar min2,uchar sec1,uchar sec2) /显示程序 init_1602(); /write_com_nextl(0x80+0x40+0x03); write_data(tablehour1); write_data(tablehour2); write_data(table0x0a); write_data(tablemin1); write_data(tablemin2); write_data(table0x0a); write_data(tablesec1); write_data(tablesec2);vo

25、id count0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; if(count=20) count=0; sec+; if(sec=60) sec=0; min+; if(min=60) min=0; hour+; if(hour=24) hour=0; void main() init(); while(1) if(keystop=0) /检测是否停止键按下 delay(10); if(keystop=0) if(keystopc!=1) keystopc+; /按停止键的次数 else keyst

26、opc=0; while(keystop=0); /松手检测 delay(5); while(keystop=0); switch(keystopc) case 1:TR0=0;break; / 按键一次就停止计数 case 0:TR0=1;break; default:break; if(keyh=0) /实现小时加一 delay(5); if(keyh=0) if(hour!=23) hour+; else hour=0; while(!keyh); delay(5); while(!keyh); hour1=hour/10; /数据分离 hour2=hour%10; min1=min/1

27、0; min2=min%10; sec1=sec/10; sec2=sec%10; display(hour1,hour2,min1,min2,sec1,sec2); if(keym=0) /实现分钟加一 delay(5); if(keym=0) if(min!=59) min+; else min=0; while(!keym); /松手检测 delay(5); while(!keym); hour1=hour/10; hour2=hour%10; min1=min/10; min2=min%10; sec1=sec/10; sec2=sec%10; display(hour1,hour2,

28、min1,min2,sec1,sec2); if(keys=0) /实现秒加一 delay(5); if(keys=0) if(sec!=59) sec+; else sec=0; while(!keys); delay(5); while(!keys); hour1=hour/10; hour2=hour%10; min1=min/10; min2=min%10; sec1=sec/10; sec2=sec%10; display(hour1,hour2,min1,min2,sec1,sec2); hour1=hour/10; hour2=hour%10; min1=min/10; min2=min%10; sec1=sec/10; sec2=sec%10; display(hour1,hour2,min1,min2,sec1,sec2); /一直显示时钟 运行期间仿真图如下:六、实验总结通过这次创新设计,我学到了专门多书本上没有的实际的知识,熟悉了一些元器件、芯片在工程中的灵活运用。在设计过

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

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