单片机实现闹钟设计_第1页
单片机实现闹钟设计_第2页
单片机实现闹钟设计_第3页
单片机实现闹钟设计_第4页
单片机实现闹钟设计_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1.绪 论31.1 课题研究背景31.2 课题研究意义31.3 本文的主要内容41.4 本文的结构42总体设计42.1 设计要求42.2设计内容52.3 设计方案的确定52.3.1单片机芯片52.3.2显示部分52.3.3时钟部分52.3.4闹铃部分62.3.5 键盘部分62.3.6电源部分62.4总体方案62.5工作原理62.6总体设计图73硬件设计73.1 stc89c52介绍73.1.1 stc89c52主要功能及pdip封装73.1.2 stc-89c52引脚介绍83.2 ds1302时钟芯片介绍93.2.1 ds1302概述93.2.2 ds1302引脚介绍93.2.3 ds13

2、02使用方法103. 3 1602字符液晶介绍123.3.1 1602液晶概述123.3.2 1602引脚介绍123.3.3 1602字符液晶使用方法133.4系统电路设计153.4.1 单片机主控部分153.4.2 时钟系统电路设计163.4.3 显示系统电路设计173.4.4 键盘调控系统电路设计183.4.5闹铃系统电路设计183.5整体电路图194系统软件设计194.1主程序设计204.2子程序设计204.2.1实时时钟子程序设计204.2.2显示子程序设计214.2.3键盘扫描子程序224.2.4闹铃子程序设计235系统调试245.1 硬件调试255.2软件调试256结论256.1

3、课程设计中遇到的问题集解决方案256.2 经验教训26参考文献26附件271.绪 论单片计算机即单片微型计算机(single-chip microcomputer),是集cpu、ram、rom、定时、计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。单片机在这种情况下诞生了。截止今日,单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的

4、控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能ic卡、电子宠物等,这些都离不开单片机。本实验通过对一个基于单片机的能实现时间,闹钟等功能的电子时钟的设计学习,详细介绍了单片机应用中的数据转换显示,液晶显示原理。从而达到学习、了解单片机相关指令在各方面的应用。系统由stc89c52、lcd1602、ds1302等部分构成,能进行年、月、日、周、时、分、秒的显示,也具有定时时间报警等功能。1.1 课题研究背景人类的生活和工作均离不开时钟。从古代的滴漏更鼓到近代的机械钟,从电子表到目前的数字时钟,为了准确的测量和记录时间,人们一直在努力改进

5、着计时工具。钟表的数字化,大力推动了计时的精确性和可靠性。在单片机构成的装置中,数字时钟是必不可少的部件。它的用途十分广泛,只要有计时的存在,便要用到数字时钟的原理及结构;同时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱。随着人类科技文明的发展,人们对于时钟的要求在不断地提高。时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。高精度、多功能、小体积、低功耗,是现代时钟发展的趋势。在这种趋势下,时钟的数字化、多功能化已经成为现代时钟生产研究的主导设计方向。1.2 课题研究意义基于mcs-51、mcs-52单片机

6、的数字时钟系统具有显示准确、直观、易于调整等特点。单片机自诞生以来给全世界人类的生活和工作起到了剧烈的变化,而mcs-51单片机是我国使用最早、最易掌握和应用的一款单片机。通过该系统的设计,对单片机的原理和功能有个较系统和全面的掌握,初步学习到有关工程设计的方法和思路。这样以后的就业面会更加宽广,也可以满足当今社会对单片机开发人才的大量需求。纵观传统的电路设计,大部分是采用分立元件进行设计,既复杂成本又高。随着集成化的发展,现在系统的设计都是在模块化的基础上设计系统的。本课题是基于智能化和模块化的前提下设计数字时钟的,通过对设计目标的分析,分立出各个模块,然后根据各个模块的功能,选择适当的芯片

7、进行设计的。本课题的研究,对智能化、模块化设计具有较强的推广应用价值。1.3 本文的主要内容本文的主要内容是利用51单片机设计一个数字时钟系统,使其实现以下功能:1在lcd液晶显示时间的功能;2具有实现系统时间的调整与设置;3闹铃定时功能。通过对系统功能的分析,该系统主要包括按键电路、显示电路、闹铃电路等。然后对系统进行了硬件设计和软件设计,通过利用proteus和keil软件,对系统进行调试,实现系统的功能。本设计中的数字闹钟是以单片机为控制核心,从各个控制模块介绍电路的设计,经过单片机将时间数据在lcd液晶屏上显示,系统中有按键可以进行定时,定时时间到时,蜂鸣器发出1分钟的提示信号。1.4

8、 本文的结构报告从六个方面介绍了这一设计:(1)简单介绍了课题背景及现状;(2)第二部分对电子时钟功能与方案等作了较详细的阐述;(3)第三部分介绍了系统硬件设计;(4)第三部分介绍了系统软件设计;(5)第四部分介绍了系统调试。(6)第五部分写出程序中遇到的问题,解决方案,经验教训。2总体设计2.1 设计要求(1)使用集成数字电路或单片机作为主控制芯片;(2)使用lcd来显示现在的时间,显示格式为:显示:20年份-月份-日期 week x时时:分分:秒秒;(3)使用时钟芯片ds1302实现时钟定时;(4)具有闹铃功能,一旦时间到则发出1分钟提示声;(5)具有调整时间的功能。2.2设计内容(1)查

9、阅相关资料,整体构思,(2)进行调研和总体设计,并绘制系统方框图和主程序流程图等;(3)详细设计:1)lcd显示电路的设计及功能实现 2)实时时钟电路的设计及其功能实现3)按键设置电路的设计及其功能实现2.3 设计方案的确定2.3.1单片机芯片采用stc89c52,片内rom全都采用flash rom;能以3v的超底压工作;同时也与mcs-51系列单片机完全该芯片内部存储器为8kb rom 存储空间,同样具有89c51的功能,且具有在线编程可擦除技术,对所下载的程序能够加密,比较安全。当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片

10、造成损坏。所以选择采用stc89c52作为主控制系统做此实验比较合理。2.3.2显示部分显示部分是本次设计的重要部分,一般有以下两种方案:方案一:采用led显示,分静态显示和动态显示。对于静态显示方式,所需的译码驱动装置很多,引线多而复杂,且可靠性也较低。而对于动态显示方式,虽可以避免静态显示的问题,但设计上如果处理不当,易造成亮度低,有闪烁等问题。方案二:采用lcd显示。lcd液晶显示具有丰富多样性、灵活性、电路简单、易于控制而且功耗小等优点,对于信息量多的系统,是比较适合的。鉴于上述原因,我们组采用方案二。2.3.3时钟部分数字时钟是本设计的核心的部分。根据需要可采用以下两种方案实现:方案

11、一:方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。年月日的设计也是如此方法。该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。而且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。方案二:方案采用dallas公司的专用时钟芯片ds1302。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹

12、钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,可使系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。基于时钟芯片的上述优点,本课程设计采用方案二完成数字时钟的功能。2.3.4闹铃部分闹铃部分是采用蜂鸣器来进行提示,用蜂鸣器成本低,电路结构简单,而且体积小。一个引脚接地另一个引脚在闹铃时间设置于数字钟时间一致时,给引脚一个高点平,驱动蜂鸣器发出提示音,提示进行延时1分钟。2.3.5 键盘部分用开发板上

13、的5个按键就能实现想要的设计,我们组开始想的是用4个按键,但是实现起来需要做想赢得程序设计,就自己想着多用一个按键,来简单的实现想要的功能。用了开发板上的4个闲置按键意外加了一个按键来实现想要的功能。2.3.6电源部分采用稳定的电压源对开发板进行供电。来实现开发板的各种功能在lcd来显示出来,以及蜂鸣器提示音。2.4总体方案综上各方案所述,对此次作品的方案选定: 采用stc89c52作为主控制系统; ds1302提供时钟;1602液晶作为显示等。独立按键进行控制,蜂鸣器实现闹铃提示。2.5工作原理本设计采用stc89c52rc单片机作为本系统的控制模块。单片机对ds1302进行初始化,写入当前

14、的时间,以后不再进行写入时间,ds1302有个后备电池我,会自动计时。单片机每隔1s读ds1302时间,从而把数据传输到显示模块,实现时间的显示。以lcd1602为显示模块,把单片机传来的数据显示出来,并且显示多个信息。通过按键设计一个闹铃时间,软件设计中通过比较当前时间和闹铃时间,是否相同,如果相同,启动蜂鸣器发出声音,持续一段时间,然后关闭蜂鸣器。在显示电路中,主要靠按键来实现各种显示要求的功能选择、调节与切换。2.6总体设计图图2.6 :程序设计总体设计图stc89c52主控制模块lcd1602显示模块ds1302时钟模块键盘控制模块蜂鸣器电源模块3硬件设计3.1 stc89c52介绍3

15、.1.1 stc89c52主要功能及pdip封装stc89c52是由深圳宏晶科技公司生产的与工业标准mcs-51指令集和输出管脚相兼容的单片机。其pdip封装如表3.1所示表3.1:stc89c52主要功能主要功能特性兼容mcs51指令系统8k可反复擦写flash rom32个双向i/o口256x8bit内部ram3个16位可编程定时/计数器中断时钟频率0-24mhz2个串行中断可编程uart串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能3.1.2 stc-89c52引脚介绍 主电源引脚(2根)3.1.2 stc-89c52引脚介绍vcc

16、(pin40):电源输入,接5v电源。gnd(pin20):接地线。外接晶振引脚(2根)xtal1(pin19):片内振荡电路的输入端。xtal2(pin20):片内振荡电路的输出端。控制引脚(4根)rst/vpp(pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ale/prog(pin30):地址锁存允许信号。psen(pin29):外部存储器读选通信号。ea/vpp(pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。可编程输入/输出引脚(32根)stc89c52单片机有4组8位的可编程i/o口,分别位p0、p1、

17、p2、p3口,每个口有8位(8根引脚),共32根。p0口(pin39pin32):8位双向i/o口线,名称为p0.0p0.7。p1口(pin1pin8):8位准双向i/o口线,名称为p1.0p1.7 。p2口(pin21pin28):8位准双向i/o口线,名称为p2.0p2.7 。p3口(pin10pin17):8位准双向i/o口线,名称为p3.0p3.7。图3.1.2 : stc89c52引脚图3.2 ds1302时钟芯片介绍3.2.1 ds1302概述ds1302 是美国dallas公司推出的一种高性能、低功耗、带ram的实时时钟芯片,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补

18、偿功能,工作电压为2.5v5.5v。采用双电源供电(主电源和备用电源),同时提供了对后背电源进行涓细电流充电的能力。采用三线接口与cpu进行同步通信。图3.2.1 :ds1302引脚图3.2.2 ds1302引脚介绍各引脚功能为:vcc: 主电源;vcc2:备用电源。当vcc2vcc1+0.2v时,由vcc2向ds1302供电;当vcc2vcc1时,由vcc1向ds1302供电。sclk:串行时钟输入端,控制数据的输入与输出。i/o: 三线接口时的双向数据线。 ce: 输入信号,在读、写数据期间必须为高。2引脚3引脚之间接12m晶振。gnd引脚接地引脚 以及rst复位引脚3.2.3 ds130

19、2使用方法表3.2.3:1302rs位及性质(1)rs位电阻典型位00没有没有01r12k10r24k11r38k(1) 时钟芯片ds1302的工作原理:ds1302在每次进行读、写程序前都必须初始化,先把sclk端置 “0”,接着把rst端置“1”,最后才给予sclk脉冲;读/写时序如图5所示。表2为ds1302的控制字,此控制字的位7必须置1,若为0则不能把对ds1302进行读写数据。对于位6,若对程序进行读/写时ram=1,对时间进行读/写时,ck=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出

20、的。表6为ds1302的日历、时间寄存器内容:“ch”是时钟暂停标志位,当该位为1时,时钟振荡器停止,ds1302处于低功耗状态;当该位为0时,时钟开始运行。“wp”是写保护位,在任何的对时钟和ram的写操作之前,wp必须为0。当“wp”为1时,写保护位防止对任一寄存器的写操作。(2) ds1302的控制字节ds1302的控制字如表所示。控制字节最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入ds1302中,位6如果0,则表示存取日历时钟数据,为1表示存取ram数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始

21、传输。表3.2:ds1302控制字(2)1rama4a3a2a1a0rdckwr(3) 数据输入输出(i/o)在控制指令字输入后的下一个sclk时钟的上升沿时,数据被写入ds1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个sclk脉冲的下降沿读出ds1302的数据,读出数据时从低位0位到高位7。其读写时序如3.3图示图3.2.3:ds1302读写时序ds1302中与时间、日期有关的寄存器共有12个,其中7个存放数据的格式为bcd码格式,其读写地址如表3.2.3所示表3.2.3:ds1302时钟寄存器(3)第一行秒寄存器,ch为时钟暂停标志位,该位为1时时钟停止,该位为

22、0时时钟运行第二行分寄存器,bit0bit6表示分钟数,因采用bcd编码,所以低四位最大能表示的数字为9,计数满向高三位进1。第三行时寄存器,12/24用来定义ds1302小时的运行模式,12小时模式下bit5为1表示pm下午,bit5为0表示am上午。第八行控制寄存器,bit7是写保护位wp,当wp为1时,写保护位可防止对任一寄存器的写操作,在任何的对时钟和ram的写操作之前,wp位必须为0 。此外,ds1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与ram相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 ds1302与ram相关的寄存器分为

23、两类:一类是单个ram单元,共31个,每个单元组态为一个8位的字节,其命令控制字为c0hfdh,其中奇数为读操作,偶数为写操作;另一类为突发方式下的ram寄存器,此方式下可一次性读写所有的ram的31个字节,命令控制字为feh(写)、ffh(读)。3. 3 1602字符液晶介绍3.3.1 1602液晶概述工业字符型液晶,1602是指显示的内容为16*2,即能够同时显示两行,每行16个字符。常见的1602字符液晶有两种,一种显示的是绿色背光黑色字体,另一种显示蓝色背光白色字体,目前市面上字符液晶绝大多数是基于hd44780液晶芯片的,控制原理是完全相同的。本课题所用1602液晶模块,显示屏是蓝色

24、背光白色字体。如图3.4所示图3.4 1602字符液晶3.3.2 1602引脚介绍编号符号引脚说明编号符号引脚说明1gnd电源地2vcc电源正极3vo液晶显示对比度调节端4rs数据/命令选择端5r/w读写选择6e使能端口7d0数据口8d1数据口9d2数据口10d3数据口11d4数据口12d5数据口13d6数据口14d7数据口15bla背光电源正16blk背光电源负表3.3.2:1602字符液晶引脚说明各个引脚具体功能说明:第1脚:gnd为地电源。第2脚:vcc接5v正电源。第3脚:vo为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生重影,使用一个1k的电

25、位器调整对比度。第4脚:rs为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。第5脚:r/w为读写信号线,高电平时进行读操作,低电平时进行写操作。第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。第714脚:db0db7为8位双向数据线。第1516脚:背光灯电源。3.3.3 1602字符液晶使用方法(1)基本操作时序图3.3.3 (1) 1602液晶读时序图图3.3.3(2) 1602液晶写时序图(2)ram1602液晶控制器芯片内部带有80个8位的ram缓冲区,其地址和屏幕的对应关系如图3.7示图3.3.3.(3) ram对应图(3)1602字符液晶字库 16

26、02液晶模块内部的字符发生存储器(cgrom)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,我们就能看到字母“a” 。3.4系统电路设计表3.4(1):显示模式设置指令码功能00111000设置16*2显示,5*7点阵,8位数据接口指令码功能00001ddbd=1 开显示;d=0 关显示c=1 显示光标; c=0 不显示光标b=1 光标闪烁; b=0光标不闪烁000001nsn=1 当

27、读或写一个字符后地址指针加一,且光标加一n=0当读或写一个字符后地址指针减一,且光标减一s=1当写一个字符,整屏显示左移(n=1)或右移(n=0),以得到光标不移动而屏幕移动的效果s=0 当写一个字符,整屏显示不移动表3.4(2):显示开/关及光标设置3.4.1 单片机主控部分单片机的主控部分,stc89c52主控部分系统电路如图。主要由电源电路、晶振电路、复位电路等组成。其中电源电路、晶振电路、复位电路是 保证单片机系统能够正常工作的最基本的三部分电路,缺一不可。电源电路 芯片引脚vcc一般接上直流稳压电源+5v,引脚gnd接电源+5v的负极,电源电压范围在45.5之间,可保证单片机系统能正

28、常工作。为提高电路的抗干扰性能,通常在引角vcc与gnd之间接上一个10uf的电解电容和一个0.1uf陶片电容,这样可抑制杂波串扰,从而有效确保电路稳定性。晶振电路 单片机引脚18和引脚19外接晶振及电容, stc89c52芯片的工作频率可在233mhz范围之间选,单片机工作频率取决于晶振xt的频率,通常选用11.0592mhz晶振。两个小电容通常取值3pf,以保证振荡器电路的稳定性及快速性。复位电路 一般若在引脚rst上保持24个工作主频周期的高电平,单片机就可以完成复位,但为了保证系统可靠地复位,复位电路应使引脚rst保持10ms以上的高电平。复位电路带有上电自动复位功能,当电路上电时,由

29、于电容两端电压值不能突变,电源+5v会通过电容向rst提供充电电流,因此在rst引脚上产生一高电平,使单片机进入复位状态。随着电容充电,它两端电压上升使得rst电位下降,最终使单片机退出复位状态。正常运行时,可按复位按钮对单片机复位。图3.4.1:单片机主控部分电路图3.4.2 时钟系统电路设计ds1302与单片机的连接仅需3条线:时钟线sclk、数据线i/o和复位线rst。时钟线sclk与p1.6相连,数据线i/o与p1.7相连,复位线rst与p1.5相连。由于ds1302是靠涓细电流充电来实现串行输入输出的,因此,在sclk 、i/o、 rst线上要加上拉电阻,其中,它们的电流应该在500

30、u1ma之间,若电源为5v,则r约为10k,因此,我们的电阻r=10k。 在单电源与电池供电系统中,vcc1提供低电源并提供低功率的备用电源。vcc2提供高电源作为芯片供电的主电源。因此,这里vcc1用3v纽扣电池,vcc2用5v的系统电源。晶振为32.768khz接入x1、x2引脚。图3.4.2 时钟系统电路图3.4.3 显示系统电路设计lcd液晶显示模块采用lcd1602型号,具有很低的功耗,正常工作时电流仅2.0ma/5.0v。通过编程实现自动关闭屏幕能够更有效的降低功耗。lcd1602分两行显示,每行可显示多达16个字符。lcd1602液晶模块内部的字符发生存储器(cgrom)已经存储

31、了160个不同的点阵字符图形,通过内部指令可实现对其显示多样的控制,并且还能利用空余的空间自定义字符。其接线如图3.10图3.10 显示系统电路图3.4.4 键盘调控系统电路设计按键需要5个,分别实现为时间调整、时间的加、时间的减、闹铃设置、退出功能。用单片机的5个i/o口接收控制信号,其电路图如图3.11图3.4.4:按键调控电路图3.4.5闹铃系统电路设计闹铃电路由蜂鸣器、三极管、电阻 等构成电路。接入单片机p2.0图3.12 闹铃电路图3.5整体电路图系统整体电路如图3.5所示:图3.5:系统整体电路图4系统软件设计软件是单片机应用系统的灵魂,是整个系统的核心部分。如果把硬件比作人的手臂

32、,那么软件就是人的大脑,手臂的一切动作的执行都要受控于大脑。同样,对ds1302时钟芯片和1602液晶显示模块的操作都是通过相应的软件程序来控制的。单片机可以应用汇编语言和c语言进行编程。,汇编语言与机器指令一一对应所以用汇编语言编写的程序在单片机里运行起来效率较高。c语言程序可读性高,更便于理解。我们组的程序设计使用c语言编程。4.1主程序设计第一次上电,系统先进行初始化, lcd显示初始时间并开始走时。单片机依次开始调用键盘扫描子程序、ds1302子程序、闹铃子程序,经过延时,返回程序开头循环运行。开始初始化1302 1602读取ds1302时间lcd显示时间键盘扫描闹铃子程序 返回图4.

33、1 主程序流程图4.2子程序设计4.2.1实时时钟子程序设计该程序主要实现对ds1302写保护、充电,对时、分、秒等寄存器的读写操作。在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用i/o口软件模拟串行时钟脉冲,所以在通信过程中最好保证传输的连续性,不要允许中断。其流程图如图4.2.1开始初始化写入时钟初值开始计时读出数据返回图4.2 实时时钟子程序流程图ds1302每次上电时自动处于暂停状态,必须把秒寄存器的位7置位0,时钟才开始计时。如果ds1302一直没有掉电,则不存在此问题。在进行写操作时,需要先解除写保护寄存器的“禁止”状态。当用多字节模式进行操作

34、时,必须写够8字节。4.2.2显示子程序设计在片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高;数字式接口;体积小、重量轻;功耗低。液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、pda移动通信工具等众多领域。lcd1602是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它由32个5*8点阵字符位组成,每一个点阵字符位都可以显示一个字符,但是它不能显示图形。模块内部自带有160个5*8点阵字型的字符发

35、生器chrom和8个可由用户自定义的5*8的字符发生器cgram。图4.2.2:显示子程序流程图4.2.3键盘扫描子程序单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。在随机扫描方式中,cpu完成某特定任务后,即执行键盘扫描程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作。在执行键盘按键规定的功能中不理睬键盘输入。定时扫描方式与随机扫描方式基本相同,只是利用cpu内的定时中断,每隔一定时间扫描有无按键被按下,键盘反应速度较快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。前两种扫描方式均会占用cpu大量时间。不管有没有键入操作,cpu总要

36、在一定的时间内进行扫描,这对于单片机控制系统是很不利的。单片机扫描完键盘,得到键值,并根据键值转入执行对应任务,以实现按键功能。如果没有按键按下,则程序扫描到key=ffh,将键值key清零,返回主程序。图4.2.3:按键扫描子程序流程图4.2.4闹铃子程序设计闹铃子程序最主要的任务是不断用时钟分(min)与时(hour)同设定的闹铃分(clk_min)与闹铃时(clk_hour)比较,只要满足min等于clk_min、hour等于clk_hour,响铃启动一段时间,并根据外部按键执行相应任务。该程序流程图参见图4.5。开始读取时间数据 闹钟时间是否已到报警 yes no是否进行闹铃调节 no

37、扫描按键 yes调节时 、分退出图4.5闹铃子程序流程图5系统调试调试工作分硬件调试和软件调试两部分,调试方法介绍如下:首先,硬件调试主要是先搭建硬件平台,然后利用万用表等工具对电路检查,最后应用程序进行功能调试。硬件调试比较费时,需要细心和耐心,也需要熟练掌握电路原理。然后,软件调试可以直接应用一些编辑或仿真软件进行,比如单片机c51编辑软件keil。该软件提供了一个集成开发环境uvision,它包括c编辑器、宏编辑器、连接器、库管理和一个功能强大的仿真调试器。通过编译、运行,可以检查程序错误。但应用此方法,仍需要十分了解所使用元器件的工作方式和管脚连接方式。在软件调试过程中要仔细耐心,即便

38、是多写或少些一两个字符,都无法编译成功。还有一种方式,即应用仿真软件搭建电路的软件平台,再导入程序进行仿真调试。如果电路出错,可以在计算机上方便的修改电路,程序出错可以重新编辑程序,这种方法节时、省力,经济、方便。总之,调试过程是一个软硬件相结合调试的过程,硬件电路是基础,软件是检测硬件电路和实现其功能的关键。5.1 硬件调试电子时钟的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。在本成电子时钟的设计调试中遇到了很多的问题。回想这些问题只要

39、认真多思考都是可以避免的,以下为主要的问题:(1)1602在显示时间时出现黑格子,遮挡了时间(2)修改时间时,有时时间改变2次。解决:根据仪器的测试,发现电路引脚有接错的现象,重新焊接后晶振,复位正常,程序能够下载。1602出现黑格子是由于在其第三引脚没加电阻分压导致,加上5k电阻后正常。按键延时较短致使按键次数多加。5.2软件调试在硬件调试完毕的基础上,需要进一步完善程序,也就是进入软件调试阶段。在本设计中,软件调试主要分两大部分:实时时钟子程序调试、按键子程序调试。将这两部分调试成功,那么整个设计的软件部分也就基本完成了。关于这两部分的调试只需要在主程序中分别调用这两部分程序即可。6结论6

40、.1 课程设计中遇到的问题集解决方案(1)电路的搭建中用到1602时不显示、或者总是显示乱码解决办法:第一,焊接可能有问题1602的16个引脚焊接部规范造成焊点错误焊接,拆掉焊点重新焊接就能解决问题。第二,可能是开发板上的调节1602亮度的没有进行调节,在显示不是自己想要的时候调节亮度调节器,能显示正确的数字。(2)1602正确接入的情况下,1602显示总是数字5 或8 解决办法:这个问题出现有3个原因:第一,是晶振焊接错误,第二,对1302引脚不熟悉接电路的时候上电后烧坏1302芯片,第三,连接数据的杜邦线有断路。检查这些原因就能正常显示。 (3)在电路的搭建完成后.c文件生成的.hex文件

41、解决方案:用keil软件进行编译 ,先新建一个工程,命名成.c文件,在源文件中保存这个文件,然后进行编译。编译的同时允许生成.hex的文件。在文件夹中找到.hex的文件加入到89c52中就能对电路进行仿真。(4)刚写程序时,显示的数字钟(时间不走)格式不对解决办法:问题出在对1602的显示不清楚,地址写入错误,使得在错误的地方显示自己的数据。熟悉数据1602的两行地址输入,在仔细修改程序,编译就能实现正确的送显示数字。(5)在数字中的设置是设置键按下一次后好像按下好多下解决办法:没有消抖程序,不消抖则造成接口判断按键按下了n次。跟扫描时间间隔有关。看似一个简单的消抖程序,其实是看我们编程是不是

42、很细心,注意到程序的细节问题。细节决定程序的完善程度,越是细心程序的漏洞就越少。6.2 经验教训经过这两个周的学习和设计,我们组完成了对电子时钟的设计。试验中遇到了困难也解决了困难,我们组共同做这个设计对我们是一种历练,也是一种财富。其功能基本满足要求,通过对系统功能的分析,该系统包括数字时钟电路,显示电路,报警电路等。然后对系统进行了硬件设计和软件设计,通过利用proteus和keil软件,对系统进行硬件和软件调试,实现系统的功能。该时钟功能强大,性能优越,能为很多领域,特别是对时钟工作的精确性和可靠性有较高要求的场合,提供较好的实时时钟。程序编写中,由于思路不清晰,开始时遇到了很多的问题,

43、经过静下心来思考,理清了思路,反而得心应手。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。也练就了我们的耐心,做什么事都在有耐心。此次电子制作中学到了很多很多东西,这是最重要的。总之,参加这次电子制作我的能力得到了全方位的提高。参考文献1余发山,单片机原理及应用技术,徐州:中国矿业大学出版社,20032沈红卫,基于单片机的智能系统设计与实现,北京:电子工业出版社,20053李朝青,单片机原理及接口技术,北京:北京航空航天大学出版社,20054求是科技,单片机典型模块设计实例导航,北京:人民邮电出版社,2004附件实验电路程序代码 #include #include /

44、#include lcd1602.h/#include ds1302.h#define uint unsigned int#define uchar unsigned charsbit ds1302_clk = p17; /实时时钟时钟线引脚 sbit ds1302_io = p16; /实时时钟数据线引脚 sbit ds1302_rst = p15; /实时时钟复位线引脚sbit clock_set = p33; /闹铃功能脚sbit spek =p20;sbit set = p30; /模式切换键sbit up = p31; /加法按钮sbit down = p32; /减法按钮sbit

45、out = p35; /立刻跳出调整模式按钮sbit acc0 = acc0;sbit acc7 = acc7;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; /秒,分,时到日,月,年位闪的计数char done,count,temp,flag,up_flag,down_flag;uchar week_value2;uchar time_naoling=00:00;uchar hour_set=5,min_set=34;bit flang;uchar flang_jishu,num,hour,m

46、in;void key_time_set();void show_time(); /液晶显示程序/*1602液晶显示部分子程序*/port definitions*sbit lcdrs= p25;sbit lcdrw= p26;sbit lcden = p27;sfr dbport = 0x80;/p0=0x80,p1=0x90,p2=0xa0,p3=0xb0.数据端口/内部等待函数*unsigned char lcd_wait(void)lcdrs=0;lcdrw=1;lcden=1;lcden=0;return dbport;/向lcd写入命令或数据*#define lcd_command

47、0 / command#define lcd_data1 / data#define lcd_clear_screen0x01 / 清屏#define lcd_homing 0x02 / 光标返回原点void lcd_write(bit style, unsigned char input)lcden=0;lcdrs=style;lcdrw=0;/_nop_;dbport=input;/_nop_;/注意顺序lcden=1;/_nop_;/注意顺序lcden=0;/_nop_;lcd_wait();/设置显示模式*#define lcd_show0x04 /显示开#define lcd_hid

48、e0x00 /显示关 #define lcd_cursor0x02 /显示光标#define lcd_no_cursor0x00 /无光标#define lcd_flash0x01 /光标闪动#define lcd_no_flash0x00 /光标不闪动void lcd_setdisplay(unsigned char displaymode)lcd_write(lcd_command, 0x08|displaymode);/设置输入模式*#define lcd_ac_up0x02#define lcd_ac_down0x00 / default#define lcd_move0x01 / 画

49、面可平移#define lcd_no_move0x00 /defaultvoid lcd_setinput(unsigned char inputmode)lcd_write(lcd_command, 0x04|inputmode);/初始化lcd*void lcd_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,lc

50、d_clear_screen); /清屏lcd_setinput(lcd_ac_up|lcd_no_move); /ac递增, 画面不动/液晶字符输入的位置*void gotoxy(unsigned char x, unsigned char y)if(y=0)lcd_write(lcd_command,0x80|x);if(y=1)lcd_write(lcd_command,0x80|(x-0x40);/将字符输出到液晶显示void print(unsigned char *str)while(*str!=0)lcd_write(lcd_data,*str);str+;/*ds1302时钟部

51、分子程序*/typedef struct _systemtime_unsigned char second;unsigned char minute;unsigned char hour;unsigned char week;unsigned char day;unsigned char month;unsigned char year;unsigned char datestring11;unsigned char timestring9;systemtime;/定义的时间类型systemtime currenttime;/1302 相应地址#define am(x)x#define pm(x)(x+12) / 转成24小时制#define ds1302_second0x80 /时钟芯片的寄存器位置,存放时间#define ds1302_minute0x82#define ds1302_hour0x84 #define ds1302_week0x8a#define ds1302_day0x86#define ds1302_month0x88#define ds1302_year0x8c void ds1302inputbyte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论