毕业设计(论文)-基于单片机的数字时钟日历设计.doc_第1页
毕业设计(论文)-基于单片机的数字时钟日历设计.doc_第2页
免费预览已结束,剩余43页可下载查看

下载本文档

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

文档简介

基于单片机的多功能电子时钟设计 姓名: 学号: 专业:电子信息工程 目目 录录 1 使用硬件模块使用硬件模块介介绍绍.1 1.1 stc89c52 单片机最小系统模块.2 1.212864 液晶显示模块3 1.3 ds18b20 的温度传感器的测温模块 .5 1.4 ds1302 时钟芯片模块7 1.5. 定时报警模块 9 1.6. ne555 背光模块.10 1.7 电源与按键模块10 2 程序控制与实现程序控制与实现11 1 1.使用硬件模块介绍使用硬件模块介绍 该电子时钟是基于 at89c52 单片机设计的,具有定时,闹铃,显示实时温度, 显示日历,节日信息,由于程序较大,所以选择了 stc89c52 单片机,他可以 提供 8kb 的 flashrom,设计可以分为以下七个模块 单片机的最小系统模块。 12864 液晶显示模块 ds18b20 的温度传感器的测温模块。 ds1302 时钟芯片模块。 定时报警模块。 ne555 背光模块。 电源与按键模块 总电路及实物如下总电路及实物如下: xtal2 32.768k hz c 11 30 c 10 30 gnd gnd vc c 3v p3.2 p3.3 p3.4 1 2 3 4 5 6 7 8 p5 header 4x2a 1 2 p6 header 2 gnd 10k r 6 r es s emi 10k r 7 r es s emi 10k r 8 r es s emi vc c 1 2 p10 header 2 12 34 56 78 p4 header 4x2 vc c 220k r 3 r es s emi c 9 103 + c 4 33uf q1 9013 vc c gnd gnd led s 0 s w -pb gnd r 10 1k r s t ax1 ax2 vc c gnd p3.2 p3.4 p1.4 p3.3p2.0 1 2 3 4 5 6 7 8 9 p3 r 10*8k vc c vc c gnd vc c p1.1 p1.2 p1.0 p1.0 p1.1 p1.2 gnd vcc vcc vcc 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 p1 header 20 led 1 2 p8 header 2 vc c 1k r 2 r pot vin 1 vout 3 gnd2 zu1 78l05 c 6 103 c 7 103 + c 8 10uf /6.3v + c 5 10uf /6.3v gnd vc c 1 2 p2 header 2h vc c 9+ q2 2n3906 ls 1 b ell p2.0 vc c gnd 1k r 5 r es s emi 器器器 xtal1 12m c 3 30 c 1 30 gnd ax1 ax2 + c 2 10uf /6.3v r 1 10k r s t gnd vc c vc c 3 dq 2 gnd 1 1 ds 18b 20 vc c gnd p1.410k r 4 r es s emi 电源 ds1302 18b20 其他 ne555背光灯 at89s52 ea/vpp 31 xtal1 19 xtal2 18 r s t 9 p3.7(r d) 17 p3.6(w r ) 16 p3.2(int0) 12 p3.3(int1) 13 p3.4(t0) 14 p3.5(t1) 15 p1.0(t2) 1 p1.1(t2ex ) 2 p1.2 3 p1.3 4 p1.4 5 p1.5 6 p1.6 7 p1.7 8 (ad0)p0.0 39 (ad1)p0.1 38 (ad2)p0.2 37 (ad3)p0.3 36 (ad4)p0.4 35 (ad5)p0.5 34 (ad6)p0.6 33 (ad7)p0.7 32 (a8)p2.0 21 (a9)p2.1 22 (a10)p2.2 23 (a11)p2.3 24 (a12)p2.4 25 (a13)p2.5 26 (a14)p2.6 27 (a15)p2.7 28 ps en 29 ale/pr og 30 (txd)p3.1 11 (r xd)p3.0 10 gnd 20 vc c 40 u1 at89c 52 s 1 s w -pb s 2 s w -pb s 3 s w -pb s 4 s w -pb gnd p2.1 p2.2 p2.3 p2.4 p2.1 p2.2 p2.3 p2.4 s 5 s w -pb p2.5 p2.5 2 1.1 stc89c52 单片机最小系统模块 单片机由时钟电路和复位电路组成 1.时钟电路 stc89c52 内部有一个用于构成振荡器的高增益反相放大器,引脚 rxd 和 txd 分别是此 放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生 2.复位及复位电路 (1)复位操作 复位是单片机的初始化操作。其主要功能是把 pc 初始化为 0000h,使单片机从 0000h 单 元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系 统处于死锁状态时,为摆脱困境,也需按复位键重新启动。 2)复位信号及其产生 rst 引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续 24 个振荡周 期(即二个机器周期)以上。若使用颇率为 6mhz 的晶振,则复位信号持续时间应超过 4us 才能完成复位操作。 二.stc89c52 单片机具体功能如下 主电源引脚(2 根) vcc(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、p2、p3 口,每个口有 8 位 (8 根引脚),共 32 根。 po 口(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 p1.0 2 p1.1 3 p1.2 4 p1.3 5 p1.4 6 p1.5 7 p1.6 8 p1.7 9 rst 10 p3.0 11 p3.1 12 p3.2 13 p3.3 14 p3.4 15 p3.5 16 p3.6 17 p3.7 18 x t al2 19 x t al1 20 v ss 21 p2.0 22 p2.1 23 p2.2 24 p2.3 25 p2.4 26 p2.5 27 p2.6 28 p2.7 29 psen 30 ale 31 v pp 32 p0.7 33 p0.6 34 p0.5 35 p0.4 36 p0.3 37 p0.2 38 p0.1 39 p0.0 40 v cc at 89s52 r?30pf 11.0592m hz 30pf 30pf 30pf v cc v cc 1.21.2 1286412864 液晶显示模块液晶显示模块 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。 除了黑白显示外,液晶显示器还有多灰度有彩色显示等。 在本万年历当中 12864 液晶显示显示当前的实时时间和温度及重要的阴阳历节日等功 能。 12864 液晶显示具有如下的特性: 提供8 位,4 位并行接口及串行接口可选 并行接口适配m6800 时序 自动电源启动复位功能 内部自建振荡源 6416 位字符显示ram(ddram 最多16 字符4 行,lcd 显示范围162 行) (改为半角输入) 2m 位中文字型rom(cgrom),总共提供8192 个中文字型(1616 点阵) 16k 位半宽字型rom(hcgrom),总共提供126 个西文字型(168 点阵) 6416 位字符产生ram(cgram) 1516 位总共240 点的icon ram(iconram) 其与单片机的连接电路如图 1.2.1 所示: 4 图 1.2.1 12864 与单片机的接线图 液晶显示 12864 的引脚功能如表 1.2.2 所示。 表 1.2.2 液晶显示 12864 的引脚功能 引脚号引脚名称方向功能说明 1vss-模块的电池地 2vdd-模块的电源正端 3vo-lcd 驱动电压输入端 4rs(cs)h/l并行的指令数据选择信号:串行的片选信号 5r/w(sid)h/l并行的读写选择信号:串行的数据口 6e(clk)h/l并行的使能信号:串行的同步时钟 7db0h/l数据 0 8db1h/l数据 1 9db2h/l数据 2 10db3h/l数据 3 11db4h/l数据 4 12db5h/l数据 5 13db6h/l数据 6 5 14db7h/l数据 7 15psbh/l并串行接口选择:h-并行:l-串行 16nc空脚 17rsth/l复位 低电平有效 18nc空脚 19led_a-背光电源正极 20led_k-背光电源负极 12864lcd 的指令系统及时序的指令系统及时序 该类液晶显示模块(即 ks0108b 及其兼容控制驱动器)的指令系统比较简单,总共只 有七种。其指令表如表 2 所示: 控制信号控制代码指令名称 r/wrsdb7db6db5db4db3db2db1db0 显示开关0000111111/0 显示起始行设置0011xxxxxx 页设置0010111xxx 列地址设置0001xxxxxx 读状态10busy0on/off rst0000 写数据01写数据 读数据11读数据 1.31.3 ds18b20ds18b20 的温度传感器的测温模块的温度传感器的测温模块 v cc gnd dq ds18b20 10k p1.4 v cc 图 1.3 测温电路图 6 温度传感器的种类众多,dallas 公司生产的 ds18b20 温度传感器适合在应用与高 精度、高可靠性的场合。ds18b20 的主要特点:超小的体积,超低的硬件开销,抗干扰能 力强,精度高。 ds18b20 的主要特征: 全数字温度转换及输出 先进的单总线数据通信 最高 12 位分辨率,精度可达土 0.5 摄氏度 12 位分辨率时的最大工作周期为 750 毫秒 可选择寄生工作方式 检测温度范围为55c +125c (67f +257f) 内置 eeprom,限温报警功能 64 位光刻 rom,内置产品序列号,方便多机挂接 多样封装形式,适应不同硬件系统 ds18b20 工作原理及应用:工作原理及应用: ds18b20 的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其 一个工作周期可分为两个部分,即温度检测和数据处理。ds18b20 共有三种形态的存储器 资源,分别是: rom 只读存储器:用于存放 ds18b20 的 id 编码,其前 8 位是单线系列编码 (ds18b20 的编码是 19h) ,后面 48 位是芯片唯一的序列号,最后 8 位是以上 56 位的 crc 码(冗余校验) 。数据在出产时设置不由用户更改。ds18b20 共 64 位 rom。 ram 数据暂存器:用于内部计算和数据存取,数据在掉电后丢失,ds18b20 共 9 个 字节 ram,每个字节为 8 位。第 1、2 个字节是温度转换后的数据值信息,第 3、4 个字节 是用户 eeprom(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第 5 个 字节则是用户第 3 个 eeprom 的镜像。第 6、7、8 个字节为计数寄存器,是为了让用户 得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第 9 个字节 为前 8 个字节的 crc 码。eeprom 非易失性记忆体,用于存放长期需要保存的数据,上 下限温度报警值和校验数据,ds18b20 共 3 位 eeprom,并在 ram 都存在镜像,以方便 用户操作。 ds18b20 芯片与单片机的接口:ds18b20 只需要接到控制器(单片机)的一个 i/o 口上,由于单总线为开漏,所以需要外接一个 4.7k 的上拉电阻。如要采用寄生工作方式, 只要将 vdd 电源引脚与单总线并联即可。但在程序设计中,寄生工作方式将会对总线的 状态有一些特殊的要求。 微控制器控制 ds18b20 完成温度转换必须经过三个步骤:每一次读写之前要对 ds18b20 进行复位,复位成功后发送一条 rom 指令,最后发送 ram 指令,这样才能对 7 读数据 写 0 60 微秒 15 微秒 45 微秒 15 微秒 45 微秒15 微秒 ds18b20 写时间间隙 写 1 ds18b20 进行预定的操作。复位要求微控制器将数据线下拉 500 微秒,然后释放, ds18b20 收到信号后等待 1660 微秒左右,然后发出 60240 微秒的存在低脉冲,微控 制器收到此信号表示复位成功,如果没有收到复位成功信号,则表示 ds18b20 出现问题, 可以用来作为系统设计时的故障提示、判断信号。 ds18b20 的单总线数据传输特点,决定了它严格的控制时序。微控制器写 1 时,数据线必 须先被拉至低电平,然后就被释放,使数据线在写时间片开始之后的 15 微秒之内拉至高电 平。微控制器写 0 时,数据线必须先被拉至低电平且至少保持逻辑低电平 60 微秒。微控制 器把数据线从高电平拉至低电平时,产生读时间片,数据线必须保持在逻辑低电平至少 1 微秒;来自 ds18b20 的输出数据在读时间片下降沿之后 15 微秒有效。因此,为了读取从 时间片开始算起 15 微秒的数据线状态,微控制器必须停止把数据线驱动至低电平。在读时 间片结束时,数据线经过外部的上拉电阻拉回至高电平。所有读时间片的最短持续期限为 60 微秒,各个读时间片之间必须有最短为 1 微秒的恢复时间。其读写时序如图所示 1.41.4 ds1302ds1302 时钟芯片模块时钟芯片模块 1 2 p10 header 2 1 2 p6 header 2 32.768khz xtal2 c10 30uf c11 30uf r6 10k r7 10k r8 10k vcc vcc 3v 1 2 3 4 5 6 7 8 p5 header4*2 p3.4 p3.3 p3.2 1.4.1 ds1302 电路原理图 8 (1)ds1302是美国dallas公司推出的一种高性能、低功耗、带ram的实时时钟芯 片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压 宽达2.55.5v。时钟可工作在24小时格式或12小时(am/pm)格式。 ds1302与单片机的 接口使用同步串行通信,仅用3条线与之相连接。可采用一次传送一个字节或突发方式一次 传送多个字节的时钟信号或ram数据。ds1302内部有一个318的用于临时性存放数据的 ram寄存器。ds1302是ds1202的升级产品,与ds1202兼容,但增加了主电源后背电源 双电源引脚。 如图1.4.2所示 。 引脚号引脚名称功能 1vcc2主电源 2、3x1、x2振荡源,外接 32768hz 晶振 4gnd地线 5rst复位/片选线 6i/o串行数据输入/输出端(双向) 7sclk串行时钟输入端 8vcc1后备电源 9 图图 1.4.21.4.2 ds1302ds1302 引脚功能表引脚功能表 (2)ds1302 共有 12 个寄存器,其中有 7 个寄存器与日历、时钟相关,存放的数据位为 bcd 码形式。其日历、时间寄存器及其控制字见下表。 此外,ds1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与 ram 相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器的内容。 ds1302 与 ram 相关的寄存器分为两类,一类是单个 ram 单元,共 31 个,每个单元组态为 一个 8 位的字节,其命令控制字为 c0h-fdh,其中奇数为读操作,偶数为写操作;再一类 为突发方式下的 ram 寄存器,此方式下可一次性读写所有的 ram 的 31 个字节,命令控制字 为 feh(写)、ffh(读)。 命令字各位内容寄存器名 写操 作 读操 作 取值范围 76543210 秒寄存器 80h81h00-59ch10secsec 分寄存器 82h83h00-59010minmin 时寄存器 84h85h 01-12 或 00- 23 12/ 24 010hrhr 日寄存器 86h87h01- 28,29,30,31 0010datedate 月寄存器 88h89h01-1200010mmonth 周寄存器 8ah8bh01-0700000day 年寄存器 8ch8dh00-9910yearyear ds1302 的日历、时钟寄存器及其控制字 1.5.1.5. 定时报警模块定时报警模块 ls1 bell q2 pnp 1k vcc r5 p2.0 1.5 报警电路图 10 因为单片机的 i/o 的驱动能力不足以让蜂鸣器发声,所以外加三极管来放大电路驱动 蜂鸣器,当 p2.0 管脚输出高电平时,发射结导通,集电结反偏,三极管处于放大状态,所 以可以提供较大的电流来驱动蜂鸣器报警 1.6.1.6. ne555ne555 背光模块背光模块 r9 220k r10 1k s0 sw-pb c4 33uf q1 npn c103 cap 12 34 56 78 p4 header 4x2 led vcc vcc 1.6.1 ne555 背光电路 此电路是由 555 构成的单稳态电路,当按键 s0 按下了,电容将会放电,被单稳态电 路触发整形,形成一定宽度的脉冲,从 5 脚输出,使得三极管导通一段时间,从而使得 led 导通一段时间,从而实现,在使用时可以看到屏幕,不使用时,屏幕处于省电的状态, 节约了能量 1.71.7 电源与按键模块电源与按键模块. . s1 sw-pb s2 sw-pb s3 sw-pb s4 sw-pb s5 sw-pb p2.1 p2.2 p2.3 p2.4 p2.5 1 2 p2 header 1 2 3 vinvout gnd v cc 11 1.6.2 电源与按键模块 按键是用来设置日期,时间,其中各部分的功能分别为 p21:退出设置键,显示版本 信息键 p22:上调键 p23:设置键 p24:减,下调键 p25:日程提醒 电源是为各个元器件提供能量的,电路所采用的单电源供电,7805 输出的是一个压值 大小为 5v 的直流电压。 2 程序控制与实现程序控制与实现 /头文件 #include #include #include /*/ /灯与扬声器定义 sbit beep = p20;/扬声器 /*/ /温度传感器引脚定义 sbit dq = p1 4 ;/ds18b20*/ /*/ /键盘引脚定义 sbit key_1 = p21; /退出设置键,显示版本信息键 sbit key_2 = p22; /上调键 sbit key_3 = p23; /设置键 sbit key_4 = p24; /减,下调键 sbit key_7 = p25; /日程提醒 /*/ /led 接口定义 sbit rs = p12;/模式位,为 0 输入指令,为 1 输入数据 sbit rw = p11;/读写位,为 0 读,为 1 写 sbit e = p10;/使能位 #define lcd_bus p0 /数据总线 /sbit wela = p26; /sbit dula = p27; /*/ /定义 ds1302 时钟接口 sbit clock_clk = p3 2;/ds1302_clk(时钟线) sbit clock_dat = p3 3;/ds1302_dat(数据线) sbit clock_rst = p3 4;/ds1302_rst(复位线) /*/ /定义累加器 a 中的各位 sbit a0 = acc 0; sbit a1 = acc 1; 12 sbit a2 = acc 2; sbit a3 = acc 3; sbit a4 = acc 4; sbit a5 = acc 5; sbit a6 = acc 6; sbit a7 = acc 7; /*/ /定义全局变量 unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,tiangan,dizhi,moontemp1,moontemp2,nf,ns;/ 定义时间映射全局变量(专用寄存器) bit w = 0; /调时标志位,=0 时为走时状态,=1 时为调时状态 static unsigned char menu = 0;/定义静态小时更新用数据变量 static unsigned char keys = 0;/定义静态小时更新用数据变量 static unsigned char timecount = 0;/定义静态软件计数器变量 signed char address,item,max,mini,calam,dalam,aalam,balam,ealam,falam,galam,halam; unsigned char flag=0,flag1=0; unsigned char richeng=0; int kk=0; /*/ void delaym(unsigned int a)/延时函数 1ms/次 unsigned char i; while( -a != 0) for(i = 0; i 0) write_data(*s); s+; /*/ void lcm_w_test(bit i,unsigned char word)/写指令或数据 if(i = 0) write_com(word);/写指令或数据(0,指令) else write_data(word);/写指令或数据(1,数据) /*/ void lcm_clr(void)/清屏函数 lcm_w_test(0,0x01); /*/ 14 void lcm_clr2(void)/清屏上面 3 行(用空格填满要清显示的地方,因为液晶屏是静态显示的,所以这办法 常用) lcm_w_test(0,0x80);/第一行 lcm_w_word(“ “); /标尺(“1234567812345678“应该能够显示满一行) lcm_w_test(0,0x90);/第二行 lcm_w_word(“ “); /标尺(“1234567812345678“应该能够显示满一行) lcm_w_test(0,0x88);/第一行 lcm_w_word(“ “); /标尺(“1234567812345678“应该能够显示满一行) /*/ /ds18b20 温度传感器驱动(显示 0 至 60 度,小数点后显示一位) /*/ void delay(int num)/延时函数 while(num-) ; /*/ void init_ds18b20(void)/初始化 ds1820 unsigned char x=0; dq = 1; /dq 复位 delay(8); /稍做延时 dq = 0; /单片机将 dq 拉低 delay(80); /精确延时 大于 480us dq = 1; /拉高总线 delay(14); x=dq; /稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 delay(20); /*/ unsigned char readonechar(void)/读一个字节 unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) dq = 0; / 给脉冲信号 dat=1; dq = 1; / 给脉冲信号 if(dq) dat|=0x80; delay(4); return(dat); 15 /*/ void writeonechar(unsigned char dat)/写一个字节 unsigned char i=0; for (i=8; i0; i-) dq = 0; dq = dat delay(5); dq = 1; dat=1; /*/ unsigned int readtemperature(void)/读取温度,温度值返回到此函数中,供调用 unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; init_ds18b20(); writeonechar(0xcc); / 跳过读序号列号的操作 writeonechar(0x44); / 启动温度转换 init_ds18b20(); writeonechar(0xcc); /跳过读序号列号的操作 writeonechar(0xbe); /读取温度寄存器 a=readonechar(); /读低 8 位 b=readonechar(); /读高 8 位 t=b; t0;a-)/第一个声音的长度 beep = beep;/取反扬声器驱动口,以产生音频 delay(100);/音调设置延时 for(a=100;a0;a-)/同上 beep = beep; delay(80);/ for(a=100;a0;a-)/同上 beep = beep; delay(30);/ beep = 1;/音乐结束后扬声器输出 1 关闭,因为后端用 9012 驱动,所以控制输出 0 时蜂鸣响 /*/ void beep_set(void)/bell -扬声器-确定设置 unsigned char a;/定义变量用于发声的长度设置 for(a=50;a0;a-)/第一个声音的长度 beep = beep;/取反扬声器驱动口,以产生音频 delay(100);/音调设置延时 for(a=100;a0;a-)/同上 beep = beep; delay(50);/ for(a=50;a0;a-)/同上 beep = beep; delay(100);/ beep = 1;/音乐结束后扬声器输出 1 关闭,因为后端用 9012 反相驱动,所以控制输出 0 时蜂鸣响 /*/ void beep_key(void)/-扬声器-按键音 unsigned char a;/定义变量用于发声的长度设置 for(a=100;a0;a-)/声音的长度 beep = beep; 19 delay(50);/音调设置延时 beep = 1;/音乐结束后扬声器拉高关闭 /*/ /农历节日数据库表,农历纪念日数据表,加上公历的重大节日 /*/ void jie_nl(void) / dd = read_clock(0x87);/日 mo = read_clock(0x89);/月 yy = read_clock(0x8d);/年 conversion(0,yy,mo,dd);/调用公历转农历子函数 /调用函数后,原有数据不变,读 c_moon 农历世纪,year_moon 农历年,month_moon,day_moon 得出阴历 bcd 数据 lcm_w_test(0,0x98);/在屏幕第四行显示节日(下面的注释行用坐标尺,不要改动) /农历节日: / -|-|标尺,汉 字不要对在空隙上 if ( richeng = 1 ) lcm_w_word(“今天有重要事件!“); if ( richeng = 2 ) lcm_w_word(“有会议,别忘!“); if ( richeng = 3 ) lcm_w_word(“有约会,重要!“); if ( richeng = 4 ) lcm_w_word(“回电话,记得!“); if ( richeng = 5 ) lcm_w_word(“纪念日,庆祝!“); if(richeng = 0) if ( month_moon = 0x12 if ( month_moon = 0x12 if ( month_moon = 0x01 if ( month_moon = 0x01 if ( month_moon = 0x01 if ( month_moon = 0x05 if ( month_moon = 0x05 / if ( month_moon = 0x07 if ( month_moon = 0x07 if ( month_moon = 0x08 if ( month_moon = 0x08 if ( month_moon = 0x09 if ( month_moon = 0x09 if ( month_moon = 0x12 if ( month_moon = 0x12 if ( month_moon = 0x12 if ( month_moon = 0x12 /农历生日: 20 if ( month_moon = 0x07 if ( month_moon = 0x07 if ( month_moon = 0x02 if ( month_moon = 0x02 void jie_gl(void) / dd = read_clock(0x87);/日 mo = read_clock(0x89);/月 yy = read_clock(0x8d);/年 /conversion(0,yy,mo,dd);/调用公历转农历子函数 /调用函数后,原有数据不变,读 c_moon 农历世纪,year_moon 农历年,month_moon,day_moon 得出阴历 bcd 数据 lcm_w_test(0,0x98);/在屏幕第四行显示节日(下面的注释行用坐标尺,不要改动) /下面是公历的,有些没意思的,就不显示了 if ( richeng = 1 ) lcm_w_word(“今天有重要事件!“); if(richeng = 0) if ( mo = 0x01 / ( mo = 0x01 /2010-01-22 是农历腊八节,用 于实验轮流显示 if ( mo = 0x02 if ( mo = 0x02 if ( mo = 0x03 if ( mo = 0x03 if ( mo = 0x03 if ( mo = 0x03 if ( mo = 0x03 if ( mo = 0x04 /if ( mo = 0x04 if ( mo = 0x04 /if ( mo = 0x04 if ( mo = 0x05 /5 if ( mo = 0x05 if ( mo = 0x05 if ( mo = 0x05 if ( mo = 0x05 if ( mo = 0x05 /if ( mo = 0x05 if ( mo = 0x05 if ( mo = 0x06 /6 if ( mo = 0x06 /if ( mo = 0x06 /if ( mo = 0x06 21 if ( mo = 0x06 if ( mo = 0x06 if ( mo = 0x07 /7 /if ( mo = 0x07 /if ( mo = 0x07 if ( mo = 0x08 /8 / if ( mo = 0x08 if ( mo = 0x08 if ( mo = 0x09 if ( mo = 0x09 /9 if ( mo = 0x09 if ( mo = 0x09 if ( mo = 0x09 if ( mo = 0x10 /10 /if ( mo = 0x10 if ( mo = 0x10 /if ( mo = 0x10 /if ( mo = 0x10 /if ( mo = 0x11 /11 / if ( mo = 0x11 / if ( mo = 0x12 /12 if ( mo = 0x12 if ( mo = 0x12 if ( mo = 0x12 if ( mo = 0x12 else/非节日时显示时晨信息,判断小时数据范围,调取显示 if ( hh = 0x04 /查看数值是否在有效范围之内 if(itemmax) calam=mini;/查看数值是否在有效范围之内 if(calammax) dalam=mini;/查看数值是否在有效范围之内 if(dalam /* 公历年对应的农历数据,每年三字节, 格式第一字节 bit7-4 位表示闰月月份,值为 0 为无闰月,bit3-0 对应农历第 1-4 月的大小 第二字节 bit7-0 对应农历第 5-12 月大小,第三字节 bit7 表示农历第 13 个月大小 月份对应的位为 1 表示本农历月大(30 天),为 0 表示小(29 天) 第三字节 bit6-5 表示春节的公历月份,bit4-0 表示春节的公历日期 */ code uchar year_code597 = 0x04,0xae,0x53, /1901 0x0a,0x57,0x48, /1902 0x55,0x26,0xbd, /1903 0x0d,0x26,0x50, /1904 0x0d,0x95,0x44, /1905 0x46,0xaa,0xb9, /1906 0x05,0x6a,0x4d, /1907 0x09,0xad,0x42, /1908 0x24,0xae,0xb6, /1909 0x04,0xae,0x4a, /1910 0x6a,0x4d,0xbe, /1911 0x0a,0x4d,0x52, /1912 0x0d,0x25,0x46, /1913 0x5d,0x52,0xba, /1914 0x0b,0x54,0x4e, /1915 0x0d,0x6a,0x43, /1916 0x29,0x6d,0x37, /1917 0x09,0x5b,0x4b, /1918 0x74,0x9b,0xc1, /1919 0x04,0x97,0x54, /1920 0x0a,0x4b,0x48, /1921 0x5b,0x25,0xbc, /1922 0x06,0xa5,0x50, /1923 0x06,0xd4,0x45, /1924 0x4a,0xda,0xb8, /1925 0x02,0xb6,0x4d, /1926 0x09,0x57,0x42, /1927 0x24,0x97,0xb7, /1928 31 0x04,0x97,0x4a, /1929 0x66,0x4b,0x3e, /1930 0x0d,0x4a,0x51, /1931 0x0e,0xa5,0x46, /1932 0x56,0xd4,0xba, /1933 0x05,0xad,0x4e, /1934 0x02,0xb6,0x44, /1935 0x39,0x37,0x38, /1936 0x09,0x2e,0x4b, /1937 0x7c,0x96,0xbf, /1938 0x0c,0x95,0x53, /1939 0x0d,0x4a,0x48, /1940 0x6d,0xa5,0x3b, /1941 0x0b,0x55,0x4f, /1942 0x05,0x6a,0x45, /1943 0x4a,0xad,0xb9, /1944 0x02,0x5d,0x4d, /1945 0x09,0x2d,0x42, /1946 0x2c,0x95,0xb6, /1947 0x0a,0x95,0x4a, /1948 0x7b,0x4a,0xbd, /1949 0x06,0xca,0x51, /1950 0x0b,0x55,0x46, /1951 0x55,0x5a,0xbb, /1952 0x04,0xda,0x4e, /1953 0x0a,0x5b,0x43, /1954 0x35,0x2b,0xb8, /1955 0x05,0x2b,0x4c, /1956 0x8a,0x95,0x3f, /1957 0x0e,0x95,0x52, /1958 0x06,0xaa,0x48, /1959 0x7a,0xd5,0x3c, /1960 0x0a,0xb5,0x4f, /1961 0x04,0xb6,0x45, /1962 0x4a,0x57,0x39, /1963 0x0a,0x57,0x4d, /1964 0x05,0x26,0x42, /1965 0x3e,0x93,0x35, /1966 0x0d,0x95,0x49, /1967 0x75,0xaa,0xbe, /1968 0x05,0x6a,0x51, /1969 0x09,0x6d,0x46, /1970 0x54,0xae,0xbb, /1971 0x04,0xad,0x4f, /1972 32 0x0a,0x4d,0x43, /1973 0x4d,0x26,0xb7, /1974 0x0d,0x25,0x4b, /1975 0x8d,0x52,0xbf, /1976 0x0b,0x54,0x52, /1977 0x0b,0x6a,0x47, /1978 0x69,0x6d,0x3c, /1979 0x09,0x5b,0x50, /198

温馨提示

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

评论

0/150

提交评论