资源描述
<p>基于单片机AT89C52的多功能液晶电子日历的毕业设计
目录
目录3
第一章绪论5
1.1课题设计的背景5
1.2选题的目的与意义5
第二章系统的总体设计6
2.1系统功能概述6
2.2系统功能实现6
2.3功能模块选择7
2.3.1核心控制模块7
2.3.2时钟模块8
2.3.3温度采集模块11
2.3.4液晶显示模块14
2.3.5时间调整与闹钟设置按键模块17
2.3.6闹钟发声模块18
第三章硬件电路与Proteus仿真设计19
3.1仿真总体电路图19
3.2功能模块外围电路20
3.2.1核心控制模块电路20
3.2.2时钟模块电路20
3.2.3温度采集模块电路21
3.2.4液晶显示模块电路22
3.3仿真显示效果23
第四章原理图和PCB设计25
4.1原理图26
4.2 PCB设计图27
4.3产品图28
第五章C程序设计32
5.1程序设计32
5.2程序流程图33
5.3 C语言程序34
完毕语35
参考文献36
附件37
附件(一)37
附件(二)57
附件(三)59
附件(四)61
第一章 绪论
1.1课题设计的背景
随着科技、社会的发展,人们得知时间的方法,从观土圭(日影)火钟(燃香)摆钟到现在的机械表、电子钟,不断研究、改革、创新。在日常生活、工作和学习中,人们会遇到很多很多需要准时去做的事情,时间观念变得尤其重要。
由于单片机的可再编程性能,以与在控制领域的普遍使用和应用技术不断的提高,单片机越来越受到电子设计者的青睐和追捧。
1.2选题的目的与意义
科技是推动社会发展的动力,而二十一世纪又是数字化信息技术高速发展的时代,所以单片机在数字化高速发展的旅程中扮演着尤为重要的角色。单片机的学习与应用在数字化时代的今天亦是电子科学学习者所必须掌握的基本课程。本设计是采用单片机为核心设计的多功能液晶日历,普遍应用在家庭,事业单位和公共场合,应该可以说遍与人们生活的每一个角落。所以说电子日历的设计是生活所需。
功能化模块的使用对电子设计开发提供了很多的便利,时钟芯片DS1302可对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命较长,误差小,有利于提高设计产品的使用寿命和质量。DS18B20是全世界上第一片支持 "一线总线"接口、部使用了ON-BOARD专利技术的数字化温度传感器。它的转换电路和传感元件集成在一只形如三极管的集成电路元件。简洁的一线总线结构使得数字化温度传感器DS18B20具有经济且独特的特点。多功能液晶电子日历采用阿拉伯数字显示,同时显示年、月、日、星期、时、分、秒和温度等信息,具有直观的特点,还可根据需要设置定时闹钟功能。该电路采用单片机AT89C52作为核心,功率消耗小,能在3V的低电压工作,电压一般选用3~5V电压供电。
基于上述原因,我设计了这款基于DS1302、DS18B20和LCD12864的多功能液晶电子日历,方便日常生活的使用。
第二章 系统的总体设计
2.1系统功能概述
我们有多种制作多功能液晶电子日历的方法,也有很多种可供选择的器件和运用的技术。所以,我们应在满足系统的功能的必要条件下,系统的整体设计方案能够充分考虑了系统的环境中,所选择的结构应该是容易实现、使用简单的。器件方面选择稳定性能、参数适宜、低功耗和低成本的。
本设计需要能够显示日期、时间和温度,并能实现时间调整和闹钟功能设定等功能。为实现这些基本功能,保证产品功能稳定,能直观看出这些数据,选定了AT89C52单片机,时钟芯片DS1302,温度传感器DS18B20,液晶显示器AMPIRE128X64,这四种已经非常成熟的功能模块化产品作为本设计的核心组成部分。
2.2系统功能实现
所有功能的实现都通过单片机AT89C52来控制,从DS1302读取日期时间,从DS18B20采集温度,通过一系列按键调整时间和闹钟,显示在AMPIRE128X64上。只要根据各模块的时序,编写各模块的读写操作程序,下载到AT89C52中就能实现所需的功能。
系统功能框图如下:
图1系统功能框图
2.3功能模块选择
本设计共分为6个模块,即核心控制模块,时钟模块,温度采集模块,液晶显示模块,时间调整与闹钟设置按键模块,闹钟发声模块。基于设计的可行性和经济实用性,分别选择如下器材。
2.3.1核心控制模块
该设计中,核心控制模块选用单片机AT89C52。
AT89C52是由全球半导体领先企业美国ATMEL公司生产的高性能,低电压CMOS 8位单片机,片含256 bytes的随机存取数据储存器(RAM)和8K的可反复擦写的只读程序储存器(PEROM),是采用ATMEL公司的高密度、非易失性存储技术生产的器件,与8052产品引脚与标准MCS-51指令系统相兼容,片采用通用8位中央处理器(CPU)和Flash存储单元。许多较为复杂控制应用场合都可使用功能强大AT89C52单片机。
主要性能参数:
1、兼容MCS51指令系统;
2、8kB可反复擦写(大于1000次)Flash ROM;
3、32个双向I/O口;
4、256x8bit部RAM;
5、3个16位可编程定时/计数器中断;
6、时钟频率0-24MHz;
7、2个串行中断,可编程UART串行通道;
8、2个外部中断源,共8个中断源;
9、2个读写中断口线,3级加密位;
10、软件设置的睡眠和唤醒功能,低功耗空闲模式,低功耗掉电模式;
11、有塑料方块平面封装(PQFP)、塑料双列直插式封装(PDIP)、特殊引脚芯片封装(PLCC)与薄塑封四角扁平封装(TQFP)等多种封装形式,可适应不同产品的需求。
功能特性:
AT89C52是由全球半导体领先企业美国ATMEL公司生产的。有丰富功能,除具有上述主要性能参数列出的功能外,AT89C52还可降至0Hz的静态逻辑操作,支持两种软件可选的节电工作模式。在空闲方式下,AT89C52停止CPU的工作,但允许RAM, 串行通信口与中断系统,定时/计数器继续工作。在掉电方式下,RAM中的容得以保存,振荡器停止工作,其他所有部件停止工作,直到下一个硬件复位开始。
AT89C52的功能强大,完全能够担任本次设计核心控制模块。
AT89C52实物图与引脚图如下:
图2 AT89C52实物图
图3AT89C52引脚图
2.3.2时钟模块
本设计中,时钟模块选择DS1302芯片。
美国DALLAS公司推出的有涓细电流充电能力的低功耗实时时钟芯片DS1302。它可对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能。
实时时钟芯片DS1302利用简单的串行接口与微处理器进行通讯。有一个AM/PM 指示器,时钟可以工作在12 小时制或者24小时制。
DS1302 与微处理器联系使用同步串行通讯简化了接口。人性化和简洁的设计使得与时钟/RAM 通讯只采用三根线: CE,I/O (数据线),和 SCLK (串行时钟)。低功耗的设计使得DS1302在非常低的电能下,还能保持数据和时钟信息。DS1302 是DS1202 的后继者。除了拥有DS1202 的基本计时功能以外, DS1302 有其他特点比如,可编程涓流充电器VCC1,双管脚主电源和备用电源,附加7 字节的暂存器。
主要特性:
1、实时时钟计算年、月、日、时、分、秒、星期,直到2100 年,并有闰年调节功能;
2、31*8位通用暂存RAM;
3、通讯接口的同步串行使管脚数降到最少;
4、2.0V至5.5V宽电压围操作;
5、在工作电压为2.0V时工作电流小于300nA;
6、读写时钟或RAM数据时有单字节或多字节(脉冲串模式)数据传送方式;
7、8管脚DIP封装或可选的8管脚表面安装SO封装;
8、简单的3线接口;
9、与TTL兼容(VCC=5V);
10、在工业应用中的温度围从-40摄氏度到+85摄氏度;
11、与DS1202兼容;
12、经美国最具权威的保险机构美国保险商试验室(UL)的认证。
图4 DS1302实物图
图5 DS1302引脚图
表1 管脚描述
管脚
名称
功能
1
Vcc2
双供电配置中的主电源连接收脚,VCC1 连接到芯片备用电源,在主电源失效或电压过低时保持时间和日期数据。DS1302 工作于VCC1 和VCC2 中较大者。
2
X1
与标准的32.768kHz 石英晶体相连。部振荡器设计成与指定的6pF装载电容的晶体共同工作。
3
X2
4
GND
电源地
5
RST
输入RST信号在读写时必须保持高电平。
6
I/O
三线接口的双向数据管脚。
7
SCLK
输入SCLK 用来同步串行接口上的数据动作。
8
Vcc1
工作在单电源和电池工作系统的低功率备用电池。这个管脚在使用涓流充电的系统中,连接到可再充能量源。
时序分析
图6 DS1302写字节时序图
DS1302写字节时,传输第一个字节是地址,第二个字节是数据。RST信号需拉高,否则输入的数据是无效的。在上升沿时由LSB开始读入,地址字节和数据字节的读取才有效。
图7 DS1302读字节时序图
读一个字节和写一个字节有着明显的区别,先写入地址字节,然后读数据字节,上升沿时写地址字节有效,而下降沿时读数据字节有效,前提是RST信号必须拉高。写地址字节和读数据字节同样都是由LSB开始。
表2 寄存器地址
读操作
写操作
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
取值围
81h
80h
CH
10 Seconds
Seconds
00-59
83h
82h
10 Minutes
Minutes
00-59
85h
84h
12/
0
10
Hour
Hour
1-12/0-23
/PM
87h
86h
0
0
10 Date
Date
1-31
89h
88h
0
0
0
10 Month
Month
1-12
8Bh
8Ah
0
0
0
0
0
Day
1-7
8Dh
8Ch
10 Year
Year
00-99
8Fh
8Eh
WP
0
0
0
0
0
0
0
-
91h
90h
TCS
TCS
TCS
TCS
DS
DS
RS
RS
-
2.3.3温度采集模块
本设计中,温度采集模块选择DS18B20芯片。
美国Dallas半导体公司生产的数字化温度传感器DS18B20,是全世界上第一片支持 "一线总线"接口、部使用了ON-BOARD专利技术的数字化温度传感器。
主要特征:
1、 一个端口引脚进行通讯的独特的单线接口;
2、 器件部存储器中储存着唯一地址编码(64位序列号);
3、 应用在对温度精度要求相对较低的多点分布式测温;
4、 无需外部器件;
5、 供电稳定可通过数据线供电,电压在3.0V到5.5V之间。
6、 测温围为-55~+125℃;
7、 在-10~+85℃围精确度为±5℃;
8、 9至12位的温度计分辨率可供使用者选择;
9、 温度转换时间较迅速,转换12位数字最多在0.75s完成;
10、与DS1822兼容的软件;
11、应用于包括温度控制、消费品、工业系统、温度计或任何热感测系统。
图8 DS18B20实物图
图9 DS18B20引脚图
表3 引脚说明
T0-9封装
符号
说明
1
GND
接地
2
DQ
数据输入/输出的引脚。在单线操作:漏极开路。
3
VDD
VDD引脚。
时序图
与DS18B20之间的通讯都需以初始化序列开始,初始化时序见图10。DS18B20在一个复位脉冲跟着一个存在脉冲中说明已经做好发送和接收数据的准备。
图10 DS18B20初始化时序图
在总线控制器读时序时,DS18B20仅可用于将数据传输到控制器。所有读时序必须最少持续60us才可完成写时序,括至少两个读周期为1us在恢复时间。读时序在总线控制器把数据线从逻辑高电平拉到低电平的时候开始,读时序见图11。
图11 DS18B20读时序图
写时序有写1时序和写0时序。总线控制器通过写1时序将逻辑1写到DS18B20,写0时序将逻辑0写到DS18B20。最少持续60us才可完成写时序,括至少两个读周期为1us在恢复时间。写时序在总线控制器把数据线从逻辑高电平拉到低电平的时候开始,见图12 DS18B20写时序图。
图12 DS18B20写时序图
2.3.4液晶显示模块
单片机系统中广泛的应用液晶显示器件(LCD),是因为LCD独具的低压、微功耗特性。
本设计中,由于Proteus仿真只能采用无字库的12864的显示器,应选用AMPIRE128X64作为液晶显示模块。
图13 AMPIRE128X64引脚图
表4AMPIRE128X64接口说明表
管脚号
管脚
电平
说明
1
CS1
H/L
低电平有效,选择前64 列的片选择信号
2
CS2
H/L
低电平有效,选择后64 列的片选择信号
3
GND
0V
逻辑电源地
4
VCC
5.0V
逻辑电源正
5
V0
LCD 的驱动电压输入端,可悬空,视具体情况而定
6
RS
H/L
数据\指令选择端:高电平时,D0-D7送入显示RAM;低电平时,D0-D7送入指令寄存器执行
7
R/W
H/L
读\写选择端:高电平:读数据;低电平:写数据
8
E
H/L
读写使能端
9
DB0
H/L
数据引脚
10
DB1
H/L
数据引脚
11
DB2
H/L
数据引脚
12
DB3
H/L
数据引脚
13
DB4
H/L
数据引脚
14
DB5
H/L
数据引脚
15
DB6
H/L
数据引脚
16
DB7
H/L
数据引脚
17
RST
L
LCD复位信号,低电平有效
18
VOUT
-10V
LCD 驱动电源
表5指令描述表
指令名称
控制信号
控制代码
R/W
RS
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
显示开关
0
0
0
0
1
1
1
1
1
1/0(1)
显示起始行设置
0
0
1
1
X
X
X
X
X
X(2)
页设置
0
0
1
0
1
1
1
X
X
X(3)
列地址设置
0
0
0
1
X
X
X
X
X
X(4)
读状态
1
0
BUSY
0
ON/OFF
RST
0
0
0
0
写数据
0
1
写数据
读数据
1
1
读数据
(1)显示开关功能:设置屏幕显示开/关。 DB0=1,开显示;DB0=0,关显示。
(2)显示起始行设置功能:执行该命令后,屏幕的第一行将显示所设置的行。
(3)页设置功能:执行本指令后,之后的读写操作将在指定页执行,直到重新设置为止。
(4)列地址设置功能:Y地址计数器存储DDRAM 的列地址。
状态检测
CODE:
R/W
RS
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
0
BUSY
0
ON/OFF
RST
0
0
0
0
功能:读忙信号标志位(BUSY)、复位标志位(RST)以与显示状态位(ON/OFF)。
BUSY =1:LCD部正在执行其他操作;BUSY =0:LCD处于空闲状态。
RST=1:LCD正处于复位初始化状态; RST=0:LCD处于正常状态。
ON/OFF=1:表示显示关闭; ON/OFF=0:表示显示开。
写显示数据
CODE:
R/W
RS
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
1
D7
D6
D5
D4
D3
D2
D1
D0
功能:DDRAM是存储图形显示数据的,写数据到DDRAM,写指令执行后Y地址计数器自动加1。数据位为1表示显示,数据位为0表示不显示。
读显示数据
CODE:
R/W
RS
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
1
D7
D6
D5
D4
D3
D2
D1
D0
基本操作时序:
读状态
作输入时:RS=0, E=1, R/W=1,CS1 或CS2=1
作输出时:D0~D7=状态字
写指令
作输入时:RS=0,R/W=0,D0~D7=指令码,CS1或CS2=1,E=高脉冲
作输出时:无
读数据
作输入时:RS=1, E=1,R/W=1,CS1 或CS2=1
作输出时:D0~D7=数据
写数据
作输入时:RS=1,R/W=0,D0~D7=数据,CS1 或CS2=1,E=高脉冲
作输出时:无
2.3.5时间调整与闹钟设置按键模块
在本设计中,为实现时间调整与闹钟设置,选用五个按键,分别是时间设置选择按键Key1,闹钟设置选择按键Key5,时间加按键Key2,时间减按键Key3,设置确认键Key4。
图14 按键组合图图15 按键实物图
如上按键组合图所示,在Key5没有按下的情况下,用Key1选择需要调整的项目,按第一次选择调整秒,按第二次调整分,按第三次调整时,按第四次调整日期,按第五次调整月份,按第六次调整年份,按第七次又跳回调整秒,其中星期与月份和日期相关,不需要手动调整。按Key2、Key3则相应加减调整项目。调整好再按Key4退出调整。按Key5选择是否要设置闹钟,每按一次相应改变闹钟的状态,调整闹钟时间步骤同调整时间。
2.3.6闹钟发声模块
基于操作简便、经济原则,本次设计采用一般蜂鸣器作为闹钟的发声模块,一般单片机输出端口是无法直接驱动蜂鸣器发出声音的,故设计如下驱动电路。
图16 蜂鸣器驱动电路图
上图中R2起到限流作用,NPN三极管作为放大器,sounder为高电平,Q1导通即蜂鸣器发声,sounder为低电平,Q1截止即蜂鸣器关闭。
第三章 硬件电路与Proteus仿真设计
本次设计,我选用Proteus软件进行仿真。
英国Lab Center Electronics公司出版的Proteus软件是由风标电子技术代理的EDA工具软件。出色的EDA工具软件仿真功能和单片机与外围器件的仿真使它深受单片机相关课程学生、从事单片机教学的教师、单片机爱好者、致力于单片机开发应用的科技科研工作者的喜爱。
Proteus是目前世界上唯一一个将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持多种类型编译,支持IAR、Keil和MPLAB等多种不同编译器。
3.1仿真总体电路图
总体仿真电路图如下:
图17 总体仿真电路图
3.2功能模块外围电路
3.2.1核心控制模块电路
单片机最小系统由AT89C52单片机外时钟电路和复位电路组成。
图18 AT89C52单片机最小系统
AT89C52时钟可以由部方式产生或外部方式产生。本设计中AT89C52采用部方式,在XTAL1和XTAL2引脚上外接石英晶体和电容组成的并联谐振回路,部振荡器就产生自激振荡。晶体振荡频率可以选择在0~12MHz之间,电容值选择在5~30pF之间,电容可对频率起微调的作用,本设计中使用12MHz作为晶振振荡频率。
3.2.2时钟模块电路
外接晶振(32.768KHz)作为DS1302时钟芯片的计时振荡源。为保证掉电时,时钟芯片还能正常工作,在VCC1端接3V备用电源。DS1302 工作于VCC1 和VCC2 中较大者。当VCC1 比VCC2高时, VCC1 给DS1302供电。
图19 时钟模块电路
3.2.3温度采集模块电路
DS18B20测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等优点。一般测温电路有寄生电源供电方式电路、寄生电源强上拉供电方式电路、外部电源供电方式电路。
寄生电源供电方式电路虽电路非常简洁但有可能在DS18B20转换温度期间无法提供足够的能量,造成温度误差相对较大。寄生电源强上拉供电方式电路解决寄生电源供电方式电路的缺点,但是多占用了一个I/O口。外部电源供电方式电路不存在电源电流不足的问题,只占用一个I/O口,所以我选用外部电源供电方式电路。
图20 温度采集模块电路
3.2.4液晶显示模块电路
AMPIRE128X64与单片机的连接电路如以下图:
图21 液晶显示模块电路
3.3仿真显示效果
开机后10s显示如以下图,同时蜂鸣器开启。
图22 开机画面
正常运行后,液晶显示屏如以下图所示得到想要的结果,第一行显示当前年、月、日,第二行显示当前星期和闹钟状态,第三行显示当前时、分、秒,第四行显示当前温度与温度围。
图23 正常运行仿真效果
第四章 原理图和PCB设计
电路设计自动化 EDA(Electronic Design Automation)指的就是将电路设计中各种工作交由计算机来协助完成。如电路原理图(Schematic)的绘制、印刷电路板(PCB)文件的制作、执行电路仿真(Simulation)等设计工作。
Altium公司推出一体化的电子产品开发系统Altium Designer把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合是这套软件的画龙点睛之处,为设计者提供了全新的设计解决平台,使设计者可以轻松进行设计。电子电路的设计将随着软件熟练使用必将提高其质量和效率。
本设计中我选用Altium Designer Summer09进行PCB的设计。
我在购买元件的时候,没有买到蜂鸣器,所以原理图与PCB图上并没有设计闹钟的功能,按键中同仿真图相比少了一个Key5按键(轻触开关),液晶显示是采用带字库的YAOXY12864B液晶显示屏,其控制器为ST7920。备用电源选择一枚带焊脚3V的纽扣电池,电源输入采用USB母座端口,总开关采用六脚自锁开关。由于其他原因单片机选用STC89C52RC,时钟芯片选用DS1302,温度传感器选用DDS18B20。其他一些常用的元件就不一一详细说明列举。
4.1原理图
图24 电路原理图
4.2 PCB设计图
图25 PCB图
4.3产品图
图26电路板背面
图27 YAOXY12864B正面
图28电路板背面
图29 YAOXY12864B反面
图30 产品图1
图31 产品图2
第五章 C程序设计
5.1程序设计
德国著名的软件公司Keil公司使用接近传统C语言的语法开发的51系列兼容单片机C语言软件开发的Keil uVision2的系统。与汇编相比,C语言在可读性、结构性上、可维护性、功能性有显著优点。易学易用的C语言有效的提高了工作效率和项目开发周期,并且还能嵌入汇编,使程序达到接近于汇编的工作效率。
类似Windows的操作界面,是我们能很快承受keil c51,并使用它来开发单片机应用程序,所以本次C语言程序设计选用Keil uVision2作为编辑和编译的环境。
5.2程序流程图
图32 程序流程图
5.3 C语言程序
程序见附件(一)时钟日历.c
程序见附件(二)ds18b20.c
程序见附件(三)ds1302.c
程序见附件(四)lcd12864.c
参考文献
【1】郭天祥.51单片机C语言教程.:电子工业,2009.1
【2】谭浩强.C程序设计(第二版)[M].:清华大学,2003
【3】中文字库液晶显示模块使用手册.bbs.elecfans. 电子技术论坛
【4】阎石.数字电子技术基础(第五版).:高等教育,2006.05
【5】华成英. 模拟电子技术基础.:高等教育,2006
【6】AT89C52中文手册(译文). Atmel公司
【7】DS1302中文手册(译文). DALLAS公司
【8】DS18B20中文手册(译文). DALLAS公司
【9】学平. Altium Designer Summer 09电路设计与制作.:电子工业,2012.4
【10】彭伟.单片机C语言程序设计实训100例——基于8051+Proteus仿真(第2版).:电子工业,2012.10
【11】徐爱钧.Keil C51单片机高级语言应用编程与实践.:电子工业,2013.12
【12】杜树春,体才.单片机与外围器件接口实例详解.:中国电力,2009.1
附件
附件(一)
《时钟日历.c》
#include</p><reg52.h>#include<intrins.h>#include<stdio.h>#define uchar unsigned char
#define uint unsigned int
#define write_week 0x8a
#define write_second 0x80
#define write_minute 0x82
#define write_hour 0x84
#define write_day 0x86
#define write_mouth 0x88
#define write_year 0x8c
#define write_week 0x8a
#define write_protect 0x8e
#define read_second 0x81
#define read_minute 0x83
#define read_hour 0x85
#define read_day 0x87
#define read_mouth 0x89
#define read_week 0x8b
#define read_year 0x8d
uchar read_temperature();
extern uchar init_ds18b20();
extern writeonebyte(uchar dat);
extern uchar readonebyte();
extern void delayms(uint xms);
extern void write1302(uchar addr,date);
extern uchar read1302(uchar addr);
extern void init1302();
extern void lcd_init();
extern void display(uchar screen, uchar page,uchar column,uchar *p,uchar j);
extern void displaynumber(uchar screen, uchar page,uchar column,uchar *p,uchar j);
extern void scankey();
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;
sbit key4=P3^6;
sbit key5=P3^2;
sbit sounder=P3^7;
uchar code number[]={
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, //9
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00, //小数点
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空格
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00, // -
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空白
0x00,0xE0,0xF0,0xF8,0xF8,0xF0,0xE0,0x00,0x04,0x07,0x07,0x0F,0x0F,0x07,0x07,0x04 //闹钟显示
};
uchar code day[]={
29,31,28,31,30,31,30,31,31,30,31,30,31
};
uchar code hanzi[]={
0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,
0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//年
0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,
0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,//月
0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,//日
0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,0x00,
0x00,0x44,0x42,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x41,0x40,0x00,0x00,//星
0x00,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
0x88,0x48,0x2F,0x09,0x09,0x19,0xAF,0x48,0x30,0x0F,0x02,0x42,0x82,0x7F,0x00,0x00,//期
0x00,0xFC,0x84,0x84,0x84,0xFC,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,
0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x01,0x06,0x40,0x80,0x7F,0x00,0x00,0x00,//时
0x80,0x40,0x20,0x90,0x88,0x86,0x80,0x80,0x80,0x83,0x8C,0x10,0x20,0x40,0x80,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,//分
0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0xC0,0x38,0x00,0xFF,0x00,0x08,0x10,0x60,0x00,
0x08,0x06,0x01,0xFF,0x01,0x06,0x81,0x80,0x40,0x40,0x27,0x10,0x0C,0x03,0x00,0x00 //秒
};
uchar code start[]={
0xFF,0xFF,0x93,0x03,0x07,0x03,0x03,0x87,0x87,0x03,0x03,0x07,0x03,0x8B,0xFF,0xFF,
0xFF,0xFF,0xC9,0xC0,0xC8,0xE4,0xC2,0xE1,0xE1,0xC2,0xC4,0xE0,0xC0,0xC9,0xFF,0xFF,//钟表图
0x00,0x00,0x00,0x60,0x20,0xF8,0xF8,0x38,0xFE,0xFE,0xFC,0x30,0x30,0x00,0x00,0x00,
0x00,0x02,0x42,0x62,0x3A,0x1F,0x0F,0x01,0x7F,0xFF,0x7F,0x01,0x01,0x01,0x01,0x00,//井
0x00,0x00,0x08,0xF8,0xF8,0x48,0xC8,0xC8,0xFC,0x7C,0x24,0xFC,0xFC,0x00,0x00,0x00,
0x00,0x00,0x3E,0x3F,0x0F,0x0E,0x07,0x03,0x07,0x27,0x</stdio.h></intrins.h></reg52.h>
展开阅读全文