基于STC89C52单片机的LED显示电子钟
海 南 大 学
单片机课程设计报告
目:基于STC89C52单片机的LED
显示电子钟的设计
学 号: 20122834320024
姓 名: 彭伟
年 级: 2012级
学 院: 应用科技学院(儋州校区)
学 部: 工学部
专 业: 电子科学与技术
指导教师: 张健、黎锦钰
完成日期: 2014 年 7 月 11 日
摘要
单片机具有体积小,成本低,抗干扰能力强,面向控制,可以实现分机各分布式控制等优点。随着社会的发展和科技的进步,以单片机最小系统为基础的电路设计在实际生活具有广泛的应用,所以熟悉单片机的原理和使用对于我们走向社会具有重要意义。
本文就课程设计为基础,详细介绍了单片机LED点阵电子时钟系统的设计结构与原理:由AT89C51单片机为基础,74LS373数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时。通过安装与调试,证明该电路设计合理,电子时钟功能强大,具有可观的市场前景。
关键词:AT89C51;LED点阵;电子时钟
目录
1 绪论 .............................................................................................................................................. 4
1.1 课题研究背景 ................................................................................................................... 4
1.2 课程设计的意义 ............................................................................................................... 5
1.3 设计任务和要求 ............................................................................................................... 5 2 系统
....................................................................................................................................... 5
2.1 显示模块的选择 ............................................................................................................... 5
2.2 硬件结构 ........................................................................................................................... 6
2.3 设计方案 ........................................................................................................................... 6 3 元件选择....................................................................................................................................... 7
3.1 AT89C51介绍 .................................................................................................................... 7
3.2 74LS138介绍 .................................................................................................................. 10
3.3 74LS373介绍 .................................................................................................................. 10
3.4芯片74LS245 ................................................................................................................... 11
3.5芯片74LS04 ..................................................................................................................... 12
3.6 LED点阵显示器 .............................................................................................................. 13 4 系统硬件电路设计 ..................................................................................................................... 14
4.1晶振电路设计 .................................................................................................................. 14
4.2复位电路设计 .................................................................................................................. 15
4.3 时分调节电路设计 ......................................................................................................... 15
4.4 按键电路的设计 ............................................................................................................. 16
4.5单片机最小系统的设计 .................................................................................................. 16 5 系统软件内容 ............................................................................................................................. 17
5.1 软件流程图 ..................................................................................................................... 17
5.2 程序分析 .......................................................................................................................... 20
5.3编程软件简介 .................................................................................................................. 20 6 电路仿真..................................................................................................................................... 21
6.1 Proteus软件介绍 .......................................................................................................... 21
6.2时钟系统 PROTUES仿真 ................................................................................................. 21
6.3 电路板制作 ..................................................................................................................... 22 7 总结 ............................................................................................................................................ 22
致谢 ................................................................................................................................................ 23
参考文献......................................................................................................................................... 24
附件一:电路原理图 ..................................................................................................................... 25 附件二:Proteus仿真调试图 ...................................................................................................... 26 附件三:PCB板图和仿真图 .......................................................................................................... 27
1 绪论
1.1 课题研究背景
LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。目前大多数的LED点阵显示系统自带字库。其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动,该
虽然比较方便,但显示只能按照预先的设计进行。而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示等。这时一般的显示系统就很难达到要求。另外,由于受到存储器本身的局限,其特殊字符往往难以显示,同时显示内容也不能随意更改。 因此就提出了一种利用PC机和单片机控制的LED显示系统通信方法。该方法可以对显示内容进行实时控制,从而实现诸如动态显示效果。同时用户也可以在PC机上进行显示效果的预览,显示内容亦可以即时修改。同时它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。LED 显示屏发展较快,本文讲述了基于P89C51单片机8×8 LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术。
LED电子显示屏是随着计算机及相关的微电子)光电子技术的迅猛发展而形成的一种新型信息显示媒体。它利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本低等特点,在短短的十来年中,迅速成长为平板显示的主流产品,在信息显示领域得到了广泛的应用。LED 点阵电子显示屏是集微电子技术、计算
机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成 为众多显示媒体以及户外作业显示的理想选择。同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。
1.2 课程设计的意义
随着LED显示器在广告传媒领域逐渐崭露头角,其控制系统也如雨后春笋,层出不穷。由于它的控制系统均是基于嵌入式微处理器开发,所以单片机在其中也占有一席之地。此次毕业设计就是基于以上社会背景设计出一种简单的基于单片机的LED点阵电子显示钟。通过本次课程设计,引导学生结合所学的电路理论和程序设计的知识,思考设计方案,以小组合作方式,分工完成各个部分,从而掌握相关的硬件结合软件显示电路的设计和调试技术,一方面提高了学生的实践动手和协作能力,另一方面培养了学生综合运用所学理论知识进行工程设计的能力。
1.3 设计任务和要求
采用STC89C52单片机和LED点阵显示
能显示当前的月、日、时、分、秒,24小时制;
月、日、时、分、秒均可以单独设置,设置时该项目闪烁;
外接3个按键,一个用于选择需要设置的项目,一个增加、一个减少;
单片机和LED点阵独立供电;
计时精度误差:?1秒/日
2 系统方案
2.1 显示模块的选择
显示模块采用8*8的点阵LED数码管,它具有低功耗、小体积、高性能、低价格等特点。这种模块由64个发光LED芯片以8*8的形式构成一个正方形模块,
然后用两列12针引脚将内部电路接口引出,供驱动电路使用。这种结构是市面上最通用,也是现在应用最为广泛采用的形式。
2.2 硬件结构
根据功能与要求,可采用AT89C51作为核心控制器。电子钟由显示电路、行驱动电路、列驱动电路、中央控制器AT89C51、按键电路和复位电路组成。 2.3 设计方案
我们把行列总线接在单片机的I/O口,然后把上面分析到的扫描代码送入总线,就可以得到显示的字符了。我们在实际应用中是将LED点阵的8条列线通过驱动电路接在P1口,8条行线通过限流电阻接在P0口。单片机89C51按照设定的程序在P1和P0接口输出与内部字符对应的代码电平送至LED点阵的行列线(高电平驱动),从而选中相应的象素LED发光,并利用人眼的视觉暂留特性合成整个字符的显示。再改变取表地址实现字符的滚动显示。
并行接口时钟芯片 DS12887
特点:采用单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。
但是对于80C52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口芯片的体积相对较大,DS12887管脚图如图1所示。
图1 DS12887管脚图
显示的方法有两种:
1、逐列扫描方式。如下图所示,P1口输出列码决定哪一列能亮(相当于位码),P2口输出行码(列数据)决定列上哪些LED亮(相当于段码),能亮的列从左向
右扫描完8列(相当于位码循环移位8次)即显示出一帧完整的图像。 2、逐行扫描方式,与逐列扫描调换,即P2口输出位码,P1口输出段码,扫描完8行显示出一帧图像。
以逐行扫描为例,从上图可以很明了的知道点阵的显示原理了(红色表示高电平,绿色表示低电平),当把扫描速度加快,人的视觉停留,看见的就是一幅图或一个字了,如下图所示。
3 元件选择
3.1 AT89C51介绍
AT89C51俗称单片机,是一种带4K字节的FLASH存储器,它具有低电压、高性能的特点。片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用Intel公司的高密度、非易
失性存储技术生产,片内置通用4位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机适合于许多较为复杂控制应用场合。AT89C51引脚图如图所示:
AT89C51引脚图
它的主要特性有以下几点:
1 与MCS-51 兼容;
2 4K字节可编程FLASH存储器; 3 寿命:1000写/擦循环; 4 数据保留时间:10年; 5 全静态工作:0Hz-24MHz; 6 三级程序存储器锁定; 7 128×8位内部RAM;
8 32可编程I/O线;
9 两个16位定时器/计数器; 10 5个中断源;
11 可编程串行通道;
12 低功耗的闲置和掉电模式; 13 片内振荡器和时钟电路
它各个引脚的功能如下:
Vcc(40):电源电压 GND(20):接地
P0口(32-39):P0口是一个8位双向I/O接口,也即地址/数据总线复用口。作为输出口用时,每位吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。在访问外部数据存储器时,这组口线分时转换地址(低8位)和数据总线复用。
P1口(1-8):P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”通过内部的上拉电阻把端口拉到高电平时,此时可作输入口。作为输入品使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
RST(9):复位信号输入端。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG(30):地址锁存有效信号输出端。当访问片外程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节,一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的,要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。
XTAL1(18):振荡器反相放大器的输出端。通过XTAL1、XTAL2外接晶振后,即可构成自激振荡器,驱动内部时钟发生器向主机提供时钟信号。
AT89C51原理图
3.2 74LS138介绍
74LS138工作原理如下:
和/(E3))为低电平当一个选通端(E1)为高电平,另两个选通端((/E2))时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。比如:A2A1A0=110时,则Y6输出端输出低电平信号。
利用 E1、E2和E3可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。
若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。 可用在8086的译码电路中,扩展内存。
74LS138引脚图
3.3 74LS373介绍
74LS373为三态输出的锁存器,共有 54S373 和 74LS373 两种线路结构型
式,其主要电器特性的典型值如下表(不同厂家具体值有差别):
主要电器特性的典型值
声抗扰度被改善400mV。
引出端符号:
D0,D7 数据输入端;
OE 三态允许控制端(低电平有效); LE 锁存允许端; Q0,Q7 输出端。
74LS373逻辑图
74LS373真值表
3.4芯片74LS245
74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相
三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。引脚图如图7所示。
当51单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)。
*DIR=“1”,信号由A向B传输;(发送)当/CE为高电平时,A、B均为高阻态由于P2口始终输出地址的高8位,接口时74LS245的三态控制端/1G和/2G接地,P2口与驱动器输入线对应相连。
图7 74LS245引脚图
3.5芯片74LS04
74LS04是内含6组相同的反相器。即1A输入高电平,1Y输出低电平。
引出端符号: 1A,6A 输入端 1Y,6Y 输出端
其管脚及封装图如图
图13 74LS04引脚图
3.6 LED点阵显示器
8乘8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,第一列就会点亮。
LED等效电路图
LED点阵原理图
4 系统硬件电路设计
4.1晶振电路设计
晶振电路部分由两个值为30uf的电容C1、C2和一个6MHz的晶振X1串联组成。由它产生的振荡信号可以保证精度高而且稳定并且频率稳定在6MHz,次方
波信号提供给单片机作为一个时钟信号,当定时器需要定时的时候使用。
晶振电路原理图
4.2复位电路设计
复位电路由一个数值为10uf的电容和一个按键串联组成,电路中的复位设定为上电与按键均有效的模式,当电路上电时,RST引脚获得一个高电频,随着C3电容不断的在运行过程中充电,所以导致RST引脚的高电频不断地下降。因为RST引脚上的高电频只能维持两个机器周期的时间,所以单片机就可以通过这个复位电路进行复位操作。在电路运行期间,当按下按键开关的瞬间,RST上的电频立即变为高电频,以此来实现电路复位。
复位电路原理图
4.3 时分调节电路设计
由AT89C51的P3.2端口接入按键S1,P3.3端口接入按键S2,再将二者并联,分别接入74LS138的E2和E3端口,以此来实现按键调节时分的设计。当电路运行时,LED显示器初始值为12:00。每按一次S1按键,分针数字就会加1,当分针数字满60再次按下按键S1,就会回归为0;每按下按键S2时,时针数字就会依次加1,当时针为12时再次按下按键S2,时针为就会显示为0。
时分调节电路原理图
4.4 按键电路的设计
根据设计要求,系统的按键电路用4个按键和一个拨码开关就可以进行对时间的调整,按键就采用最简单的点动式按钮,由单片机的I/O进行扫描,来实现扫描按键功能。其中,时间调整按钮与单片机STC89C51的P3.5相连,其功能是当按下此键时,开始调整年、月、日、星期、时、分、秒,没按一次就改变一个相应的要改变的位;闹钟调整按钮与单片机STC89C52的P3.4相连,其功能是当按下此键时开始进行闹钟调整,并且每按一次就改变一次要调整的位;加法按钮与单片机STC89C51的P2.5连,其功能是每按一次此键就将相应的要改变的位的数值加一;减法按钮与单片机STC89C51的P2.6连,其功能是每按下一次此键就将要改变的位的数值减一;近远程选择按钮与STC89C51的P2.4相连。 4.5单片机最小系统的设计
AT89C51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51
单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
单片机的最小系统如图8所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。
图15 单片机最小系统
5 系统软件内容
5.1 软件流程图
设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。
当计时中断开始时,LED显示器开始接受信号,接受到一个信号时秒数增加,当秒数累计加到60时,则分数为主动进1,分数位累计加到60时,时数位1
主动增加1。秒针、分针、时针只要有一位未接受到信号,那么系统就会自动结束。其程序执行流程见下图
5.2 程序分析
延时函数:控制时间间隔,调整时钟频率
中断请求允许和中断触发方式程序。
5.3编程软件简介
Keil 软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil 的优势。下面详细介绍Keil C51开发系统各部分功能和使用。
Keil工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成
的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编
语言后再使用C来开发,体会更加深刻。
6 电路仿真
6.1 Proteus软件介绍
PROTEUS软件嵌入式系统仿真与开发平台是一款可以实现数字电路、模拟电路、微控制器系统仿真以及PCB设计等功能的EDA软件。从元器件的选取到连线,直至电路的调试、分析和软件的编译,都是在计算机中完成,所有的工作先在虚拟环境下进行。基于这一思想开发的PROTEUS软件,可在原理图设计阶段对所设计的电路进行评估、验证,看是否达到设计要求的技术指标,并可以通过改变元器件参数使整个电路性能达到最优化。这样就避免了传统电子电路设计中方案更换带来的多次重复购买元器件及制版,在节省设计时间与经费的同时,提高了设计效率与质量。
PROTEUS软件提供了三十多个元器件库、数千种元器件。元器件涉及电容、电阻、二极管、晶体管、MOS管、变压器、继电器、各种放大器、各种激励源、300多种微控制器、各种门电路和各种终端等。在PROTEUS软件中提供的仪表有交直流电压表、交直流电流表、逻辑分析仪、定时/计数器和信号发生器。PROTEUS作为交互可视化仿真软件,提供数码管、液晶屏、LED、按钮、键盘等外设,同时支持图形化的分析功能,具有直流工作点,瞬态特征、交直流参数扫描频率特性、傅里叶、失真、噪声分析等多种分析功能,并可将仿真曲线绘制到图表中。 6.2时钟系统 PROTUES仿真
用PROTUES软件,根据数字电子钟的原理图,画出仿真图,得到的图6.2。
图18 时钟系统仿真图
6.3 电路板制作
Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。因此用 Proteus制作PCB板。完成后将芯片焊接到对应的位置上。检查线路,看是否焊接出现短路情况。
7 总结
总结本次单片机课程设计,主要做了下面几点工作:
一、通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标。并且通过对单片机资料的查阅和应用,更进一步增加了对单片机知识的理解和运用能力。并证实了自己的思路:“查资料?思考总结?运用?找出差错,再查资料和向别人询问?再次运用”的正确性。
二,本文设计的LED显示屏能够实现在目测条件下LED显示屏各点亮度均
匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。
三,本文列出了系统具体的硬件设计方案,硬件结构电路图,软件流程图和具体汇编语言程序设计与调试等方面。
四,在这次毕业设计的过程中学会了Proteus的基本使用,感到Proteus对应用电气专业的同学来说是一门很有用的课程。
五,通过这次毕业设计,重新复习并进一步增强了动手的能力,学以致用,把只是运用到实际生活中才是根本目的。
六,存在问题:没有考虑仿真软件是一个理想的仿真环境,而实际连接的电路板会由于譬如连接不当,相邻器件间的干扰等等的问题导致在仿真软件中能良好运行的程序,出现显示问题,经过排查和合理的器件摆放焊接,问题解决。
总体来说这次的毕业设计很成功,达到了预想的目的:学到了知识,提高了能力,完成了任务。有点缺憾是时间有限,不能进一步深入和扩散学习和研究。希望有时间可以对程序和电路图作更进一步的改进,譬如实现点阵的上下移动,对角线移动,三色显示等。
致谢
本课程设计是在张老师的悉心指导下完成的,从课题的选择到设计报告的最终完成的每一个环节,自始至终得到张老师的精心指导和帮助。老师渊博的学识、严谨的治学态度、求实创新的工作作风、对事业和科学的执着追求,以及对我们小组谆谆教诲给我留下了深刻的印象,使我受益终身。在课题的研究设计过程中,我不仅从张老师那里学到许多专业知识,更重要的是学会了学习新知识并将其巩固的方法,这无疑是一把开启未来生活的钥匙,特此向张老师表示衷心的感谢~
在此,还要感谢我们的同学,感谢你们的无私奉献和热情的帮助,使我们克服了很多困难,最终完成了课程设计。
参考文献
[1]杨素行.模拟电子技术基础(第二版) .北京:高等教育出版社,2006. [2]马忠梅,张凯.单片机的C语言应用程序设计(第四版).北京:航空航天大学出
版社.
[3]谭浩强.程序设计与开发技术(北京:清华大学出版社,1991.
[4]阎石.数字电子技术基础(第五版).北京:高等教育出版社,2006.
[5]李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出
版社,1998.
[6]候殿有.单片机C语言程序设计.北京:人民邮电出版社,2012,2:203-207. [7]杨居义.单片机课程设计指导.北京:清华大学出版社,2011,8:135-138.
附件一:电路原理图
附件二:Proteus仿真调试图
附件三:PCB板图和仿真图
附件四 程序
/****************************************************/
#include
#define uchar unsigned char
#define uint unsigned int
sbit P3_5=P3^5;
sbit P3_6=P3^6;
sbit P3_7=P3^7;
unsigned char code table[][8]={
0x3c,0x42,0x42,0x3c,0x3c,0x42,0x42,0x3c, //00 0x40,0x7e,0x44,0x00,0x3c,0x42,0x42,0x3c, //01 0x4c,0x52,0x62,0x44,0x3c,0x42,0x42,0x3c, //02 0x6c,0x92,0x92,0x54,0x3c,0x42,0x42,0x3c, //03 0x10,0x7e,0x14,0x18,0x3c,0x42,0x42,0x3c, //04 0x32,0x4a,0x4a,0x4e,0x3c,0x42,0x42,0x3c, //05 0x30,0x49,0x4a,0x3c,0x3c,0x42,0x42,0x3c, //06 0x7e,0x02,0x02,0x02,0x3c,0x42,0x42,0x3c, //07 0x6c,0x92,0x92,0x6c,0x3c,0x42,0x42,0x3c, //08 0xfc,0x12,0x12,0x0c,0x3c,0x42,0x42,0x3c, //09 0x3c,0x42,0x42,0x3c,0x40,0x7e,0x44,0x00, //10 0x40,0x7e,0x44,0x00,0x40,0x7e,0x44,0x00, //11 0x4c,0x52,0x62,0x44,0x40,0x7e,0x44,0x00, //12
0x6c,0x92,0x92,0x54,0x40,0x7e,0x44,0x00, //13 0x10,0x7e,0x14,0x18,0x40,0x7e,0x44,0x00, //14 0x32,0x4a,0x4a,0x4e,0x40,0x7e,0x44,0x00, //15 0x30,0x49,0x4a,0x3c,0x40,0x7e,0x44,0x00, //16 0x7e,0x02,0x02,0x02,0x40,0x7e,0x44,0x00, //17 0x6c,0x92,0x92,0x6c,0x40,0x7e,0x44,0x00, //18 0xfc,0x12,0x12,0x0c,0x40,0x7e,0x44,0x00, //19 0x3c,0x42,0x42,0x3c,0x4c,0x52,0x62,0x44, //20 0x40,0x7e,0x44,0x00,0x4c,0x52,0x62,0x44, //21 0x4c,0x52,0x62,0x44,0x4c,0x52,0x62,0x44, //22 0x6c,0x92,0x92,0x54,0x4c,0x52,0x62,0x44, //23 0x10,0x7e,0x14,0x18,0x4c,0x52,0x62,0x44, //24 0x32,0x4a,0x4a,0x4e,0x4c,0x52,0x62,0x44, //25 0x30,0x49,0x4a,0x3c,0x4c,0x52,0x62,0x44, //26 0x7e,0x02,0x02,0x02,0x4c,0x52,0x62,0x44, //27 0x6c,0x92,0x92,0x6c,0x4c,0x52,0x62,0x44, //28 0xfc,0x12,0x12,0x0c,0x4c,0x52,0x62,0x44, //29 0x3c,0x42,0x42,0x3c,0x6c,0x92,0x92,0x54, //30 0x40,0x7e,0x44,0x00,0x6c,0x92,0x92,0x54, //31 0x4c,0x52,0x62,0x44,0x6c,0x92,0x92,0x54, //32 0x6c,0x92,0x92,0x54,0x6c,0x92,0x92,0x54, //33 0x10,0x7e,0x14,0x18,0x6c,0x92,0x92,0x54, //34 0x32,0x4a,0x4a,0x4e,0x6c,0x92,0x92,0x54, //35 0x30,0x49,0x4a,0x3c,0x6c,0x92,0x92,0x54, //36 0x7e,0x02,0x02,0x02,0x6c,0x92,0x92,0x54, //37 0x6c,0x92,0x92,0x6c,0x6c,0x92,0x92,0x54, //38 0xfc,0x12,0x12,0x0c,0x6c,0x92,0x92,0x54, //39 0x3c,0x42,0x42,0x3c,0x10,0x7e,0x14,0x18, //40 0x40,0x7e,0x44,0x00,0x10,0x7e,0x14,0x18, //41 0x4c,0x52,0x62,0x44,0x10,0x7e,0x14,0x18, //42 0x6c,0x92,0x92,0x54,0x10,0x7e,0x14,0x18, //43 0x10,0x7e,0x14,0x18,0x10,0x7e,0x14,0x18, //44 0x32,0x4a,0x4a,0x4e,0x10,0x7e,0x14,0x18, //45 0x30,0x49,0x4a,0x3c,0x10,0x7e,0x14,0x18, //46 0x7e,0x02,0x02,0x02,0x10,0x7e,0x14,0x18, //47 0x6c,0x92,0x92,0x6c,0x10,0x7e,0x14,0x18, //48 0xfc,0x12,0x12,0x0c,0x10,0x7e,0x14,0x18, //49 0x3c,0x42,0x42,0x3c,0x32,0x4a,0x4a,0x4e, //50 0x40,0x7e,0x44,0x00,0x32,0x4a,0x4a,0x4e, //51 0x4c,0x52,0x62,0x44,0x32,0x4a,0x4a,0x4e, //52 0x6c,0x92,0x92,0x54,0x32,0x4a,0x4a,0x4e, //53 0x10,0x7e,0x14,0x18,0x32,0x4a,0x4a,0x4e, //54 0x32,0x4a,0x4a,0x4e,0x32,0x4a,0x4a,0x4e, //55 0x30,0x49,0x4a,0x3c,0x32,0x4a,0x4a,0x4e, //56
0x7e,0x02,0x02,0x02,0x32,0x4a,0x4a,0x4e, //57 0x6c,0x92,0x92,0x6c,0x32,0x4a,0x4a,0x4e, //58 0xfc,0x12,0x12,0x0c,0x32,0x4a,0x4a,0x4e,};//59 unsigned char code saomiao[8]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7};
void delay(uint z);
uchar int_time;
char second;
char minute;
char hour;
char day;
char month;
/****************************************************
延时函数
****************************************************/
void delay()
{
uint x,z;
for(z=0;z<5;z++)
for(x=0;x<12;x++);
}
/***************************************************
显示函数
***************************************************/
void display()
{
uint j;
for(j=0;j<8;j++)
{
P2=saomiao[j];
P0=table[second][j];
P1=0xfe;
delay();
}
for(j=0;j<8;j++)
{
P2=saomiao[j];
P0=table[minute][j];
P1=0xfd;
delay();
}
for(j=0;j<8;j++)
{
P2=saomiao[j];
P0=table[hour][j];
P1=0xfb;
delay();
}
for(j=0;j<8;j++)
{
P2=saomiao[j];
P0=table[day][j];
P1=0xf7;
delay();
}
for(j=0;j<8;j++)
{
P2=saomiao[j];
P0=table[month][j];
P1=0xef;
delay();
}
}
/***************************************************
主函数
***************************************************/
void main()
{
TMOD=0x01; //T0工作在定时器方式1
EA=1; //中断允许
EX0=1; //外中断1
ET0=1; //T0开中断
TR0=1; //定时器0计数
TR1=1; //定时器1计数
IT0=1; //外中断0为跳沿触发
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
int_time=0;
second=50;
minute=59;
hour=23;
day=30;
month=12;
while(1)
{
display();
}
}
/***************************************************
定时器0中断
***************************************************/
void T0_isr() interrupt 1 using 0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
int_time++;
if(int_time==20)
{int_time=0;second++;}
if(second==60)
{second=0;minute++;}
if(minute==60)
{minute=0;hour++;}
if(hour==24)
{hour=0;day++;}
if(day==31)
{day=1;month++;}
if(month==13)
{month=1;}
}
/****************************************************
外中断0
****************************************************/
void int0() interrupt 0 using 1
{
int i;
if(P3_5==0) //选择月日时分秒
{
delay();
if(P3_5==0)
i++;
if(i>5)
i=1;
}
if(P3_6==0) //加按键
{
delay();
if(P3_6==0)
switch(i)
{
case 1:second++;if(second==60)second=0;break;
case 2:minute++;if(minute==60)minute=0;break;
case 3:hour++;if(hour==24)hour=0;break;
case 4:day++;if(day==31)day=1;break;
case 5:month++;if(month==13)month=1;break;
}
}
if(P3_7==0) //减按键
{
delay();
if(P3_7==0)
switch(i)
{
case 1:second--;if(second<0)second=59;break;
case 2:minute--;if(minute<0)minute=59;break;
case 3:hour--;if(hour<0)hour=23;break;
case 4:day--;if(day<1)day=30;break;
case 5:month--;if(month<1)month=12;break;
}
}
}
附录五 实物图