首页 > 其他分享 >【IoT】电子时钟设计

【IoT】电子时钟设计

时间:2023-02-28 13:31:46浏览次数:42  
标签:dispString IoT 0x00 电子 lcdWriteData 0x78 0x87 0xFF 时钟

摘要​

随着电子技术的迅速发展特别是大规模集成电路的出现,人类生活发生了根本性的变化,以单片机技术为核心的产品已走入了千家万户,数字万年历的出现更是给人们的生活带来诸多便利。本作品就实现了基于stc89c58单片机的多功能数字万年历的设计。​

本设计以stc89c58单片机技术为核心,以各种硬件电路为基础,软件采用51c进行编写,简洁明了,系统升级更加简单方便。​

本作品采用12864液晶作为显示屏,具有人性化的操作界面和美观的页面效果。​

可以显示公历日期,时间,农历日期,星期,温度,并有闹铃功能。用户可以通过按键调节系统时间,设定闹铃时间,最后完成了组装与调试。​

关键词:stc89c58单片机 数字万年历 12864液晶模块​



目录​

1.引言​

1.1本课题所做的工作 第4页​

2.万年历的硬件设计 第5页​

3.万年历的软件设计 第5页​

4.总结 第7页​

5.附录一系统原理总图 第9页​

6.附录二系统程序 第10页​



1.1本课题所做的工作​

首先对本系统的主要功能进行分析,确定下来本系统的主要功能是:阴历阳历显示,时间显示,闹钟功能,自定义时间,还有显示外界温度。​

其次对电路图的电源设计,本系统采用了3节干电池的电池盒供电,并没有使用一些变压器,和全桥整流芯片。5v左右的电池盒也实现了单片机的5v左右的供电需求,简单实用。​

温度传感器采用的是ds18b20,其为总单线温度传感器连线比较简单。​

时钟芯片采用的是常用的ds1302.由于其没有内部电源,所以需要外连3v的电源进行掉电保护。​

显示器采用点阵带字库型12864液晶模块,需要了解此液晶的初始化定义。


2.万年历的硬件设计​

<一>电源设计​

本系统采用电池盒进行供电,基本满足58单片机所需的5v电压,简单实用。​

<二>微控制器选择​

因本程序比较大所以采用的是stc89c58单片机,其内部有32k的程序存储空间​

<三>温度测量环节设计​

本系统使用的温度传感器是ds18b20。其为一款总线接口的温度传感器,一线总线具有独特而经济的特点,性价比十分出色​

<四>时钟芯片环节​

Ds1302是一种高性能低功耗,带ram的实时时钟电路。由于ds1302内部无电池,所以需要外接电源实现掉电保护。​

<五>显示电路设计​

本系统的显示电路是由12864液晶模块实现。​

<六>定时闹钟,按键电路设计​

该系统具有定时闹铃功能,蜂鸣器采用5v供电​

其有四个独立按键,分别为设定,选择,调节,确定。​

3.万年历的软件设计​

系统软件流程为:上电显示开机界面,送开始转换温度指令,读取温度值到缓冲区,读取全部时钟日历数据到缓冲区,显示阳历日期和时间阳历农历转换,显示农历日期,显示温度,定时判断,判断是否有按键被按下,返回到开始。​

本系统采用四个独立按键和微处理器对话,可以修改时间,设定时间。微处理器采用查询方式扫描按键状态。


4.总结​

<一>硬件:​


电路板焊接

【IoT】电子时钟设计_智能硬件




1.画布线图​

根据各模块元件的多少,各模块之间的连线的复杂程度,确定各模块,各元件的相对位置,尽量做到电路连线不相交,尽量使正、负极相对集中,或在电路板外围。​

2.实际布件​

实际布件与布线图可能略有不同,或不合适的地方,以实际布件为准调整布线图。​

3.实际焊接​

实际焊接尽量使导线水平竖直。焊接点尽量呈光滑球形,避免虚焊。尽量用多色线,把正、负极用线与普通连线区分开来,方便电路的复查。​

4.实际操作与调试​

实际操作时,避免不了会出现种种问题,根据与理想效果不同的地方,检修电路,反复调试,反复更改。​

存在的问题及反思

  1. 布线以及实际布件时未仔细观察12864引脚,致使12864的插向相反。以后要先观察好各个元件的引脚排布。​
  2. 焊接过程不小心将温度传感器引脚折断。以后要尽量避免过多的掰折引脚。​
  3. 多色导线准备不充分。以后平时多备多色导线。​

<二>软件:​

在调试温度传感器的时候出现了很多问题,以后还要学习如何调试。​

在编程的时候出现了很多算法看不懂的问题。农历和阳历的换算出现了很多盲区,由于对农历的了解远远不够,所以在编程的时候经常被农历还有阳历的一些换算还有时间日期的调用所困扰。​

由此可见想要编程成功不仅是需要对硬件的底层协议十分了解,更重要的是要对所操作所分析的功能有较为详细的了解,一如本系统中的农历的基本知识。​






【IoT】电子时钟设计_电子时钟_02

附录一:系统原理图​




附录二:系统程序​

//头文件​

#include <AT89X52.h>​

#include <string.h>​

#include <intrins.h>​

#include "SoundPlay.h"//音乐文件​

#define uchar unsigned char ​

#define uint unsigned int​

/*****************************************************************************/​

//扬声器定义​

sbit beep = P3^7;//扬声器​

/*****************************************************************************/​

//液晶背景灯定义​

sbit BACKLIGHT = P1^1;//液晶背景灯控制​

/*****************************************************************************/​

//温度传感器定义​

sbit DQ = P2 ^ 0;//ds18B20​

uint tvalue;//温度值​

uchar tflag,flagdat,t,hh1;//温度正负标志​

/*****************************************************************************/​

//键盘引脚定义​

//sbit KEY_1 = P2^7; //左上,在音乐文件SoundPlay.h中已定义​

sbit KEY_2 = P2^6; 左下​

sbit KEY_3 = P2^5; 右上​

sbit KEY_4 = P2^4; 右下​

/****************************************************************************/​

//定义DS1302时钟接口​

sbit clock_clk = P2 ^ 1;//ds1302_clk(时钟线)​

sbit clock_dat = P2 ^ 2;//ds1302_dat(数据线)​

sbit clock_Rst = P2 ^ 3;//ds1302_Rst(复位线)​

//定义累加器A中的各位​

sbit a0 = ACC ^ 0;​

sbit a1 = ACC ^ 1;​

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,year,year1;//定义时间映射全局变量(专用寄存器)​

unsigned char shi,ge,sec_temp,min_temp,hour_temp,secl,selx,e=0,hh1,mm1,k,mm,ss,n;​

char n1,n2;​

bit w = 0; //调时标志位​

static unsigned char menu = 0;//定义静态小时更新用数据变量​

static unsigned char keys = 0;//定义静态小时更新用数据变量​

static unsigned char timecount = 0;//定义静态软件计数器变量​

/****************************************************************************/​

//-----------------------------------------------​

//TS12864并口相关设定//​

#define BUSY_FLAG P0_7 //液晶模块忙标志​

#define MPU_RS_CH P1_5 //寄存器选择输入​

#define MPU_RW_CH P1_6 //读写控制​

#define MPU_ENABLE P1_7 //使能控制​

#define LCD_DATA P0 //液晶数据口​

//-----------------------------------------------​

#define LOW 0 //低电平​

#define HIGH 1 //高电平​

#define OFF 0 //逻辑关​

#define ON 1 //逻辑开​

//-----------------------------------------------​

//液晶模块指令集定义​

#define cClearDisplay 0x01 //清显示指令​

#define cEntryModeSet 0x06 //设置输入模式​

#define cDisplayOnCtrl 0x0c //设置开显控制​

#define cFunctionSetB 0x30 //功能设定(基本指令)​

#define cFunctionSetE 0x34 //功能设定(扩充指令)​

#define cFuncDrawOn 0x36 //设置绘图功能​

//-----------------------------------------------​

uchar xdata lcdPosX, lcdPosY; //X,Y坐标​

uchar xdata halfScr, halfLineCnt, basicBlock; //半屏,半屏行数,N*8块​

//-----------------------------------------------​

//子程序声明和用法​

bit scanKey1 (void);​

//按键1检测​

void procKey (void);​

//按键处理子程序​

void lcdInit (void);​

//初始化LCD子程序​

void lcdClear (void);​

//清除LCD文本屏幕子程序​

void lcdWriteCommand (uchar Command); ​

//写入控制命令到LCD子程序​

//输入参数:LCD控制指令​

void lcdWriteData (uchar Data); ​

//写入显示数据到LCD子程序​

//输入参数:显示数据​

void checkLcdBusy (void); ​

//检测LCD忙碌子程序​

void displayPhoto (uchar *bmp, uchar bmpCls); ​

//全屏显示图形子程序​

//输入参数:*bmp=图形数据 ​

//bmpCls=清除图形屏幕选项(OFF为不清屏,即显示图形,ON为清屏)​

void convertChar (uchar CX, CY, width); ​

//字符反白显示​

//输入参数:CX=要反白字符的行(0-3)​

//CY=要反白字符的列(0-7)​

//width=要反白字符的长度(1-16)​

void wrPosition (void); ​

//坐标写入子程序​

void dispString (uchar X, Y, speed, uchar *msg); ​

//显示字符串子程序​

//输入参数:X=行(0-3), Y=列(0-7), speed=显示速度(毫秒), msg=字符数据​

void beepBl (void);​

//蜂鸣器响一声子程序​

void delayMs (uchar ms); ​

//延时(毫秒)子程序​

//输入参数:毫秒数​

void delaySec (uchar sec); ​

//延时(秒)子程序​

//输入参数:秒数​

void init_dz();​

void clear_img();​

//===============================================​

//===============================================​

void lcdInit (void)​

{​

lcdWriteCommand(cFunctionSetE);​

lcdWriteCommand(cFunctionSetB);​

lcdClear();​

lcdWriteCommand(cEntryModeSet);​

lcdWriteCommand(cDisplayOnCtrl);​

if(k==1){clear_img();lcdClear();​

}​

if(k==0){lcdClear(); clear_img();init_dz();​

}​

}​

//===============================================​

void lcdClear (void) ​

{​

lcdWriteCommand(cClearDisplay);​

}​

//===============================================​

void lcdWriteCommand (uchar Command) ​

{​

checkLcdBusy();​

// delayMs(1);​

MPU_RS_CH = LOW;​

MPU_RW_CH = LOW;​

LCD_DATA = Command;​

MPU_ENABLE = HIGH;​

delayMs(1);​

MPU_ENABLE = LOW;​

}​


//===============================================​

void lcdWriteData (uchar Data) ​

{​

checkLcdBusy();​

// delayMs(1);​

MPU_RS_CH = HIGH;​

MPU_RW_CH = LOW;​

LCD_DATA = Data;​

MPU_ENABLE = HIGH;​

delayMs(1);​

MPU_ENABLE = LOW;​

}​

//===============================================​

void checkLcdBusy (void) ​

{​

// delayMs(2);​

LCD_DATA = 0xff; ​

MPU_RS_CH = LOW;​

MPU_RW_CH = HIGH;​


MPU_ENABLE = HIGH;​

while (BUSY_FLAG);​

MPU_ENABLE = LOW;​

}​

//===============================================​

void displayPhoto (uchar *bmp, uchar bmpCls) ​

{​

lcdPosX = 0x80;​

halfScr = 2;​


for (;halfScr != 0; halfScr--)​

{​

lcdPosY = 0x80;​

halfLineCnt = 32;​


for (;halfLineCnt != 0; halfLineCnt--)​

{​

basicBlock = 16;​

wrPosition ();​


for (; basicBlock != 0; basicBlock--)​

{​

if (bmpCls == OFF)​

{​

lcdWriteData (*bmp++);​

}​

else if (bmpCls == ON)​

{​

lcdWriteData (0x00);​

}​

}​

lcdPosY++;​

}​

lcdPosX = 0x88;​

}​

lcdWriteCommand(cFuncDrawOn);​

lcdWriteCommand(cFunctionSetB);​

}​

//===============================================​

void convertChar (uchar CX, CY, width) ​

{​

displayPhoto(OFF,ON);​

lcdPosY = 0x80;​


if (CX == 0)​

{​

CX = 0x80;​

halfLineCnt = 16;​

}​

else if (CX == 1)​

{​

CX = 0x80;​

halfLineCnt = 32;​

}​

else if (CX == 2)​

{​

CX = 0x88;​

halfLineCnt = 16;​

}​

else if (CX == 3)​

{​

CX = 0x88;​

halfLineCnt = 32;​

}​

lcdPosX = CX + CY;​


for (; halfLineCnt != 0; halfLineCnt--)​

{​

basicBlock = width;​

wrPosition();​


for (;basicBlock != 0; basicBlock--)​

{​

if (halfLineCnt > 16)​

{​

lcdWriteData(0x00);​

}​

else​

{​

lcdWriteData (0xff);​

}​

}​

lcdPosY++;​

}​


lcdWriteCommand(cFuncDrawOn);​

lcdWriteCommand(cFunctionSetB);​

}​

//===============================================​

void wrPosition (void) ​

{​

lcdWriteCommand(cFunctionSetE);​

lcdWriteCommand(lcdPosY);​

lcdWriteCommand(lcdPosX);​

lcdWriteCommand(cFunctionSetB);​

}​

//===============================================​

void dispString (uchar X, Y, speed, uchar *msg) ​

{​

if (X == 0)​

{​

X = 0x80;​

}​

else if (X == 1)​

{​

X = 0x90;​

}​

else if (X == 2)​

{​

X = 0x88;​

}​

else if (X == 3)​

{​

X = 0x98;​

}​

Y = X + Y;​

lcdWriteCommand(Y);​

while (*msg)​

{​

lcdWriteData(*msg++);​

delayMs(speed);​

}​

}​

//===============================================​

void delayMs (uchar ms) ​

{​

uchar i;​

while (--ms)​

{​

for (i = 0; i < 125; i++);​

}​

}​

/********************************************************************************************************​

清理图片缓冲区​

********************************************************************************************************/​

void clear_img()​

{​

uchar i,j;​

for(i=0;i<32;i++) ​

{​

lcdWriteCommand(0x80+i);​

lcdWriteCommand(0x80); ​

for(j=0;j<16;j++)​

{​

lcdWriteData(0x00);​

} ​

}​

for(i=0;i<32;i++)​

{​

lcdWriteCommand(0x80+i);​

lcdWriteCommand(0x88);​

for(j=0;j<16;j++)​

{​

lcdWriteData(0x00);​

} ​

}​

}​

/******************************************************************************/​

uchar code powerOnPhoto []={ ​

/*-- 一幅图像 KISS- 正向取模,字节正序*/ ​

/*-- 宽度x高度=128x64 --*/ ​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ​

0xFF,0xFF,0xFF,0x9F,0x00,0x00,0x0F,0x0E,0x00,0x00,0x00,0x00,0x19,0xFF,0xFF,0xFF, ​

0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xBF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ​

0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFD,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ​

0xFF,0xFF,0xF3,0xE0,0x00,0x00,0x1F,0xFD,0x80,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF, ​

0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFA,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00, ​

0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ​

0xFF,0xFF,0xF0,0x00,0x00,0x00,0x03,0xF8,0x01,0xFF,0xFF,0xE0,0x00,0x07,0xFF,0xFF, ​

0x00,0x00,0x00,0x0F,0xFF,0xFC,0x00,0xF0,0x3F,0xFF,0xFF,0xFE,0x00,0x30,0x00,0x00, ​

0x00,0x00,0x00,0x7F,0xFF,0xFF,0x80,0x41,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00, ​

0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xF0,0x02,0x7F,0xFF,0xFF,0xFF,0xE0,0x03,0xFF,0xFF, ​

0x00,0x00,0x03,0xFF,0xFF,0xFF,0xF8,0x04,0x3F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00, ​

0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFC,0x08,0x73,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00, ​

0xFF,0xE4,0x3F,0x7F,0xFF,0xFF,0xFF,0x30,0x2F,0xFF,0xFF,0xFF,0xFE,0x00,0x7F,0xFF, ​

0x00,0x00,0xFE,0x9F,0xFF,0xFF,0xFF,0xB0,0x1D,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00, ​

0x00,0x00,0xFF,0x7F,0xFF,0xFF,0xFF,0xC2,0x23,0x3F,0xFF,0xFE,0x1F,0x80,0x00,0x00,​


0xFF,0xE1,0xFF,0xFF,0xFF,0xFF,0xFC,0xC5,0x92,0xFF,0xB7,0xB8,0xC9,0x80,0x7F,0xFF, ​

0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFC,0x4F,0xEF,0x3F,0xC8,0x1A,0x20,0xC0,0x00,0x00, ​

0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0x75,0x86,0xF6,0xC0,0x00,0x00, ​

0xFF,0x03,0xEF,0x9F,0xFB,0xFF,0xF8,0x7F,0xFF,0xFF,0xFB,0xDF,0xFE,0xC0,0x7F,0xFF, ​

0x00,0x07,0xDE,0x7F,0xC7,0xFF,0xF0,0x7E,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00, ​

0x00,0x07,0x1C,0xF7,0x9F,0xDF,0xF0,0x7E,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00, ​

0xFC,0x07,0x00,0x8C,0x1F,0xBF,0xE7,0x3C,0x3F,0xFF,0xFF,0xFF,0xFF,0xC0,0x7F,0xFF, ​

0x00,0x07,0x00,0x08,0x1C,0x3F,0x88,0x3C,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00, ​

0x00,0x06,0x0C,0x08,0x98,0x7F,0x80,0x0D,0x9F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00, ​

0xFC,0x06,0x1C,0xE3,0x99,0xFF,0x00,0x0C,0x0F,0xFF,0xFF,0xFF,0xFF,0xC0,0x5F,0xFF, ​

0x00,0x06,0xF1,0xE3,0x83,0xFE,0x00,0x08,0x03,0xDF,0xFF,0xFF,0xFF,0xC0,0x00,0x00, ​

0x00,0x06,0xF1,0xF7,0xC7,0xFE,0x00,0x08,0x01,0xCF,0xFF,0xFF,0xFF,0xC0,0x00,0x00, ​

0xFC,0x06,0xF3,0xF7,0xC7,0xFC,0x03,0x08,0x00,0x01,0xFF,0xFF,0xFF,0xC0,0xBF,0xFF, ​

0x00,0x07,0xF3,0xFF,0xE7,0xF0,0x03,0x09,0x80,0x00,0xFF,0xFF,0xFF,0xC0,0x00,0x00, ​

0x00,0x07,0xFF,0xFF,0xFF,0xE0,0x03,0x09,0x80,0x00,0x3F,0xFF,0xFF,0x80,0x00,0x00, ​

0xFC,0x07,0xFF,0xFF,0xFF,0xC0,0x03,0x09,0x80,0x00,0x0F,0xFF,0xFF,0x83,0xFF,0xFF,​


0x00,0x07,0xFF,0xE0,0xFE,0x00,0x03,0x09,0x80,0x00,0x07,0xFF,0xFF,0x80,0x00,0x00, ​

0x00,0x07,0xFF,0x80,0x7C,0x00,0x07,0xB1,0x80,0x00,0x07,0x83,0xFF,0x00,0x00,0x00, ​

0xFF,0x07,0xFF,0x0C,0x00,0x00,0x7F,0xB3,0xC0,0x00,0x06,0x01,0xFE,0x03,0xFF,0xFF, ​

0x00,0x07,0xFF,0x03,0x00,0x00,0x1F,0x43,0xFC,0x00,0x06,0x38,0xFE,0x00,0x00,0x00, ​

0x00,0x07,0xFF,0x03,0x00,0x00,0x00,0x81,0xF0,0x00,0x04,0x40,0xF8,0x00,0x00,0x00, ​

0xFC,0x87,0xFF,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x04,0x40,0xF0,0x07,0xFF,0xFF, ​

0x00,0x07,0xFF,0x80,0x00,0x2C,0x00,0x80,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00, ​

0x00,0x07,0xFF,0x80,0x00,0x52,0x00,0x40,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00, ​

0xFF,0x83,0xFF,0xF0,0x80,0x2C,0x00,0x40,0x00,0x00,0x00,0x01,0xC0,0x7F,0xFF,0xFF, ​

0x00,0x03,0xFF,0xFF,0x80,0x00,0x00,0x30,0x00,0x00,0x01,0x86,0x00,0x00,0x00,0x00, ​

0x00,0x03,0xFF,0xFF,0x80,0x00,0x00,0x38,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x00, ​

0xFF,0xA3,0xFF,0xFF,0x80,0x00,0x00,0x44,0x00,0x00,0x01,0xFF,0x00,0x7F,0xFF,0xFF, ​

0x00,0x03,0xFF,0xFF,0x80,0x00,0x03,0x82,0x00,0x00,0x01,0xC0,0xC0,0x00,0x00,0x00, ​

0x00,0x03,0xFF,0xFF,0x80,0x00,0x1C,0x01,0xC0,0x00,0x00,0x78,0xC0,0x00,0x00,0x00, ​

0xFF,0x81,0xFF,0xFF,0xC0,0x3F,0xE0,0x00,0x3C,0x00,0x07,0x80,0x20,0x7F,0xFF,0xFF, ​

0x00,0x01,0xFF,0xFF,0xE0,0x40,0x00,0x00,0x03,0xFE,0x78,0x00,0x20,0x00,0x00,0x00,​


0x00,0x01,0xFF,0xFF,0xF8,0x40,0x00,0x00,0x00,0x21,0x80,0x00,0x10,0x00,0x00,0x00, ​

0xFF,0xC1,0xFF,0xFF,0xFC,0x40,0x00,0x00,0x00,0x2E,0x00,0x00,0x10,0x4F,0xFF,0xFF, ​

0x00,0x01,0xFF,0xFF,0xFE,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00, ​

0x00,0x00,0xFF,0xFF,0xFF,0xA0,0x00,0x00,0x00,0xC0,0x00,0x01,0xF8,0x00,0x00,0x00, ​

0xFF,0xE0,0xFF,0xFF,0xFB,0xE0,0x00,0x00,0x00,0xC0,0x00,0x03,0xFE,0x07,0xFF,0xFF, ​

0x00,0x00,0xFF,0xFF,0xFD,0xE0,0x00,0x00,0x00,0xC0,0x00,0x1F,0xFF,0x00,0x00,0x00, ​

0x00,0x00,0xFF,0xFF,0xFE,0x70,0x00,0x00,0x01,0xE0,0x00,0x3F,0xFF,0x80,0x00,0x00, ​

0xFF,0xC0,0xFF,0xFF,0xFF,0xB0,0x00,0x00,0x01,0xE0,0x00,0x7F,0xFF,0xC0,0x3F,0xFF, ​

0x00,0x00,0xFF,0xFF,0xFF,0xDC,0x00,0x00,0x03,0xF7,0x81,0xFF,0xFF,0xF0,0x00,0x00, ​

0x00,0x01,0xFF,0x80,0x7F,0xDC,0x00,0x00,0x0F,0xFF,0xC3,0xFF,0xFF,0xF8,0x00,0x00, ​

0xFF,0x01,0xFF,0x00,0x1F,0xEE,0x00,0x00,0x13,0xFF,0xF7,0xFF,0xFF,0xFC,0x07,0xFF, ​

0x00,0x01,0xFE,0x00,0x07,0xEF,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, ​

0x00,0x01,0xFC,0x00,0x03,0xF3,0x00,0x00,0x13,0xFF,0xBF,0xFF,0xFF,0xFF,0x80,0x00, ​

0xFF,0x01,0xFC,0x00,0x01,0xF3,0x80,0x00,0x1F,0xFF,0xBF,0xFF,0xFF,0xFF,0x83,0xFF, ​

0x00,0x01,0xF0,0x00,0x01,0xFD,0x80,0x00,0x0F,0xFF,0x7F,0xFF,0xFF,0xFF,0xC0,0x00, ​

0x00,0x03,0xF0,0x00,0x00,0x72,0xE0,0x00,0x03,0xFE,0xFF,0xFF,0xFF,0xFF,0xC0,0x00 ​

}; ​

uchar code powerOnPhoto1[]={​


0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x0C,0x43,0x01,0x80,0x00,0x7F,0xFF,0xF0,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x19,0xFF,0x07,0x00,0x07,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x01,0x3F,0xFC,0x1E,0x00,0x1F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,​

0x00,0x00,0x00,0x01,0xBF,0xFF,0xFC,0x00,0x7F,0xFC,0x00,0x7F,0xC0,0x00,0x00,0x00,​

0x00,0x00,0x00,0x01,0xFF,0xFF,0xF0,0x00,0xFF,0xC0,0x00,0x0F,0xE0,0x00,0x00,0x00,​

0x00,0x00,0x00,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x00,0x00,​

0x00,0x00,0x00,0x01,0xDF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0x80,0xF0,0x00,0x00,0x00,​

0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0xFF,0xE0,0x38,0x00,0x00,0x00,​

0x00,0x00,0x00,0x07,0xFF,0xF8,0x00,0x1F,0xFF,0xF0,0x03,0xF8,0x38,0x00,0x00,0x00,​

0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,0x3F,0xFF,0xFF,0xC0,0x7C,0x18,0x00,0x00,0x00,​

0x00,0x00,0x00,0x04,0x7F,0xF0,0x00,0x3F,0xFF,0xFF,0xF8,0x1E,0x08,0x00,0x00,0x00,​

0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x7F,0xFF,0xFF,0xFE,0x0F,0x08,0x00,0x00,0x00,​

0x00,0x00,0x00,0x0F,0xFF,0xFC,0x00,0xFF,0xFF,0xFF,0xFF,0x87,0x08,0x00,0x00,0x00,​

0x00,0x00,0x00,0x1F,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0x83,0x88,0x00,0x00,0x00,​

0x00,0x00,0x00,0x3F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xC3,0x88,0x00,0x00,0x00,​

0x00,0x00,0x00,0x7F,0xFF,0xFE,0x01,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00,0x00,0x00,​

0x00,0x00,0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xE1,0x88,0x00,0x00,0x00,​

0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF1,0x88,0x00,0x00,0x00,​

0x00,0x00,0x01,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,0xF3,0x08,0x00,0x00,0x00,​

0x00,0x00,0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xF2,0x10,0x00,0x00,0x00,​

0x00,0x00,0x01,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xFF,0xF0,0x20,0x00,0x00,0x00,​

0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,​

0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x70,0x00,0x00,0x00,0x00,​

0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00,0x00,0x00,​

0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x70,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0x7F,0x20,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x7F,0x20,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x7E,0x20,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0x3E,0x40,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFF,0x3C,0x40,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xCF,0xFE,0x38,0x40,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x38,0x40,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x8F,0xFE,0x30,0x40,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x7C,0x20,0x40,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x1E,0x78,0x00,0x40,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFE,0x1E,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xDA,0x3C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF2,0x30,0x80,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF1,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x7C,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x78,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x72,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x01,0x40,0x04,0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x02,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x02,0x40,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x0C,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x38,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x0F,0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00​

};​

uchar code tab[12][64]={​

{// 图片数字0​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x0E,0x70,​

0x1C,0x38,0x3C,0x3C,0x38,0x1C,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,​

0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1C,0x38,0x1C,0x3C,0x3C,​

0x1C,0x38,0x0E,0x70,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片数字1​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xC0,​

0x1F,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,​

0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,​

0x03,0xC0,0x03,0xC0,0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片数字2​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x1C,0x78,​

0x38,0x3C,0x78,0x3C,0x78,0x1C,0x7C,0x1C,0x38,0x1C,0x00,0x3C,0x00,0x3C,0x00,0x78,​

0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x0E,0x1C,0x0E,0x38,0x0C,​

0x70,0x1C,0x7F,0xFC,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片数字3​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0xF0,​

0x38,0x78,0x38,0x3C,0x38,0x3C,0x38,0x3C,0x00,0x3C,0x00,0x78,0x00,0xF0,0x07,0xE0,​

0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x1E,0x00,0x1E,0x38,0x1E,0x78,0x1E,0x78,0x1C,​

0x38,0x3C,0x3C,0x78,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片数字4​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xF0,​

0x00,0xF0,0x01,0xF0,0x01,0xF0,0x03,0xF0,0x07,0x70,0x06,0x70,0x0E,0x70,0x1C,0x70,​

0x18,0x70,0x38,0x70,0x30,0x70,0x60,0x70,0xFF,0xFF,0x00,0x70,0x00,0x70,0x00,0x70,​

0x00,0x70,0x00,0x70,0x00,0xF8,0x07,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片数字5​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x1F,0xFC,​

0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x3F,0xF0,0x3E,0x78,0x38,0x3C,​

0x38,0x1C,0x00,0x1E,0x00,0x1E,0x00,0x1E,0x00,0x1E,0x38,0x1E,0x78,0x1C,0x78,0x3C,​

0x38,0x3C,0x1C,0x78,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片数字6​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x0F,0x38,​

0x1C,0x3C,0x3C,0x3C,0x38,0x00,0x38,0x00,0x78,0x00,0x78,0x00,0x7B,0xF0,0x7E,0x78,​

0x7C,0x3C,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x78,0x1E,0x38,0x1C,​

0x3C,0x3C,0x1E,0x78,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片数字7​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFE,0x3F,0xFC,​

0x38,0x1C,0x30,0x18,0x70,0x38,0x70,0x30,0x00,0x70,0x00,0x60,0x00,0xE0,0x00,0xC0,​

0x01,0xC0,0x01,0xC0,0x03,0xC0,0x03,0x80,0x03,0x80,0x07,0x80,0x07,0x80,0x07,0x80,​

0x07,0x80,0x07,0x80,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片数字8​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x78,​

0x38,0x1C,0x78,0x1C,0x70,0x1E,0x78,0x1E,0x78,0x1C,0x3C,0x1C,0x1F,0x38,0x0F,0xE0,​

0x0F,0xF0,0x3C,0xF8,0x38,0x3C,0x70,0x1C,0x70,0x1E,0x70,0x1E,0x70,0x1E,0x70,0x1E,​

0x38,0x1C,0x1C,0x38,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片数字9​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,​

0x38,0x38,0x78,0x1C,0x78,0x1C,0x70,0x1E,0x70,0x1E,0x70,0x1E,0x78,0x1E,0x78,0x3E,​

0x78,0x3E,0x3C,0x7E,0x0F,0xDE,0x00,0x1E,0x00,0x1C,0x00,0x3C,0x00,0x3C,0x3C,0x38,​

0x3C,0x70,0x3C,0xE0,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},​


{// 图片":"​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},​

图片" "​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,​

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},​

}; ​


/******************************************************************************/​

/* ​

公历年对应的农历数据,每年三字节, ​

格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小 ​

第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小 ​

月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天) ​

第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期 ​

*/ ​

code uchar year_code[] = { ​

0x0C,0x96,0x45, //2000 ​

0x4d,0x4A,0xB8, //2001 ​

0x0d,0x4A,0x4C, //2002 ​

0x0d,0xA5,0x41, //2003 ​

0x25,0xAA,0xB6, //2004 ​

0x05,0x6A,0x49, //2005 ​

0x7A,0xAd,0xBd, //2006 ​

0x02,0x5d,0x52, //2007 ​

0x09,0x2d,0x47, //2008 ​

0x5C,0x95,0xBA, //2009 ​

0x0A,0x95,0x4e, //2010 ​

0x0B,0x4A,0x43, //2011 ​

0x4B,0x55,0x37, //2012 ​

0x0A,0xd5,0x4A, //2013 ​

0x95,0x5A,0xBf, //2014 ​

0x04,0xBA,0x53, //2015 ​

0x0A,0x5B,0x48, //2016 ​

0x65,0x2B,0xBC, //2017 ​

0x05,0x2B,0x50, //2018 ​

0x0A,0x93,0x45, //2019 ​

0x47,0x4A,0xB9, //2020 ​

0x06,0xAA,0x4C, //2021 ​

0x0A,0xd5,0x41, //2022 ​

0x24,0xdA,0xB6, //2023 ​

0x04,0xB6,0x4A, //2024 ​

0x69,0x57,0x3d, //2025 ​

0x0A,0x4e,0x51, //2026 ​

0x0d,0x26,0x46, //2027 ​

0x5e,0x93,0x3A, //2028 ​

0x0d,0x53,0x4d, //2029 ​

0x05,0xAA,0x43, //2030 ​

0x36,0xB5,0x37, //2031 ​

0x09,0x6d,0x4B, //2032 ​

0xB4,0xAe,0xBf, //2033 ​

0x04,0xAd,0x53, //2034 ​

0x0A,0x4d,0x48, //2035 ​

0x6d,0x25,0xBC, //2036 ​

0x0d,0x25,0x4f, //2037 ​

0x0d,0x52,0x44, //2038 ​

0x5d,0xAA,0x38, //2039 ​

0x0B,0x5A,0x4C, //2040 ​

0x05,0x6d,0x41, //2041 ​

0x24,0xAd,0xB6, //2042 ​

0x04,0x9B,0x4A, //2043 ​

0x7A,0x4B,0xBe, //2044 ​

0x0A,0x4B,0x51, //2045 ​

0x0A,0xA5,0x46, //2046 ​

0x5B,0x52,0xBA, //2047 ​

0x06,0xd2,0x4e, //2048 ​

0x0A,0xdA,0x42, //2049 ​

0x35,0x5B,0x37, //2050 ​

0x09,0x37,0x4B, //2051 ​

0x84,0x97,0xC1, //2052 ​

0x04,0x97,0x53, //2053 ​

0x06,0x4B,0x48, //2054 ​

0x66,0xA5,0x3C, //2055 ​

0x0e,0xA5,0x4f, //2056 ​

0x06,0xB2,0x44, //2057 ​

0x4A,0xB6,0x38, //2058 ​

0x0A,0xAe,0x4C, //2059 ​

0x09,0x2e,0x42, //2060 ​

0x3C,0x97,0x35, //2061 ​

0x0C,0x96,0x49, //2062 ​

0x7d,0x4A,0xBd, //2063 ​

0x0d,0x4A,0x51, //2064 ​

0x0d,0xA5,0x45, //2065 ​

0x55,0xAA,0xBA, //2066 ​

0x05,0x6A,0x4e, //2067 ​

0x0A,0x6d,0x43, //2068 ​

0x45,0x2e,0xB7, //2069 ​

0x05,0x2d,0x4B, //2070 ​

0x8A,0x95,0xBf, //2071 ​

0x0A,0x95,0x53, //2072 ​

0x0B,0x4A,0x47, //2073 ​

0x6B,0x55,0x3B, //2074 ​

0x0A,0xd5,0x4f, //2075 ​

0x05,0x5A,0x45, //2076 ​

0x4A,0x5d,0x38, //2077 ​

0x0A,0x5B,0x4C, //2078 ​

0x05,0x2B,0x42, //2079 ​

0x3A,0x93,0xB6, //2080 ​

0x06,0x93,0x49, //2081 ​

0x77,0x29,0xBd, //2082 ​

0x06,0xAA,0x51, //2083 ​

0x0A,0xd5,0x46, //2084 ​

0x54,0xdA,0xBA, //2085 ​

0x04,0xB6,0x4e, //2086 ​

0x0A,0x57,0x43, //2087 ​

0x45,0x27,0x38, //2088 ​

0x0d,0x26,0x4A, //2089 ​

0x8e,0x93,0x3e, //2090 ​

0x0d,0x52,0x52, //2091 ​

0x0d,0xAA,0x47, //2092 ​

0x66,0xB5,0x3B, //2093 ​

0x05,0x6d,0x4f, //2094 ​

0x04,0xAe,0x45, //2095 ​

0x4A,0x4e,0xB9, //2096 ​

0x0A,0x4d,0x4C, //2097 ​

0x0d,0x15,0x41, //2098 ​

0x2d,0x92,0xB5, //2099 ​

}; ​

///月份数据表 ​

code uchar day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3}; ​

code uint day_code2[3]={0x111,0x130,0x14e}; ​

/* ​

函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年) ​

调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun) ​

如:计算2004年10月16日Conversion(0,0x4,0x10,0x16); ​

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世 ​

纪,c_sun=1为19世纪 ​

调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据 ​

*/ ​

bit c_moon; ​

data uchar year_moon,month_moon,day_moon,week; ​

/*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0*/ ​

bit get_moon_day(uchar month_p,uint table_addr) ​

{ ​

uchar temp; ​

switch (month_p) ​

{ ​

case 1:{temp=year_code[table_addr]&0x08; ​

if (temp==0)return(0);else return(1);} ​

case 2:{temp=year_code[table_addr]&0x04; ​

if (temp==0)return(0);else return(1);} ​

case 3:{temp=year_code[table_addr]&0x02; ​

if (temp==0)return(0);else return(1);} ​

case 4:{temp=year_code[table_addr]&0x01; ​

if (temp==0)return(0);else return(1);} ​

case 5:{temp=year_code[table_addr+1]&0x80; ​

if (temp==0) return(0);else return(1);} ​

case 6:{temp=year_code[table_addr+1]&0x40; ​

if (temp==0)return(0);else return(1);} ​

case 7:{temp=year_code[table_addr+1]&0x20; ​

if (temp==0)return(0);else return(1);} ​

case 8:{temp=year_code[table_addr+1]&0x10; ​

if (temp==0)return(0);else return(1);} ​

case 9:{temp=year_code[table_addr+1]&0x08; ​

if (temp==0)return(0);else return(1);} ​

case 10:{temp=year_code[table_addr+1]&0x04; ​

if (temp==0)return(0);else return(1);} ​

case 11:{temp=year_code[table_addr+1]&0x02; ​

if (temp==0)return(0);else return(1);} ​

case 12:{temp=year_code[table_addr+1]&0x01; ​

if (temp==0)return(0);else return(1);} ​

case 13:{temp=year_code[table_addr+2]&0x80; ​

if (temp==0)return(0);else return(1);} ​

} ​

} ​

/* ​

函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年) ​

调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun) ​

如:计算2004年10月16日Conversion(0,0x4,0x10,0x16); ​

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世 ​

纪,c_sun=1为19世纪 ​

调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据 ​

*/ ​

void Conversion(bit c,uchar year,uchar month,uchar day) ​

{ //c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据 ​

uchar temp1,temp2,temp3,month_p; ​

uint temp4,table_addr; ​

bit flag2,flag_y; ​

temp1=year/16; //BCD->hex 先把数据转换为十六进制 ​

temp2=year%16; ​

year=temp1*10+temp2; ​

temp1=month/16; ​

temp2=month%16; ​

mnotallow=temp1*10+temp2; ​

temp1=day/16; ​

temp2=day%16; ​

day=temp1*10+temp2; ​

//定位数据表地址 ​

if(c==0) ​

{ ​

table_addr=(year)*0x3; ​

} ​

//else ​

//{ ​

//table_addr=(year-1)*0x3; ​

//} ​

//定位数据表地址完成 ​

//取当年春节所在的公历月份 ​

temp1=year_code[table_addr+2]&0x60; ​

temp1=_cror_(temp1,5); ​

//取当年春节所在的公历月份完成 ​

//取当年春节所在的公历日 ​

temp2=year_code[table_addr+2]&0x1f; ​

//取当年春节所在的公历日完成 ​

// 计算当年春年离当年元旦的天数,春节只会在公历1月或2月 ​

if(temp1==0x1) ​

{ ​

temp3=temp2-1; ​

} ​

else ​

{ ​

temp3=temp2+0x1f-1; ​

} ​

// 计算当年春年离当年元旦的天数完成 ​

//计算公历日离当年元旦的天数,为了减少运算,用了两个表 ​

//day_code1[9],day_code2[3] ​

//如果公历月在九月或前,天数会少于0xff,用表day_code1[9], ​

//在九月后,天数大于0xff,用表day_code2[3] ​

//如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1 ​

//如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1 ​

if (month<10) ​

{ ​

temp4=day_code1[month-1]+day-1; ​

} ​

else ​

{ ​

temp4=day_code2[month-10]+day-1; ​

} ​

if ((month>0x2)&&(year%0x4==0)) ​

{ //如果公历月大于2月并且该年的2月为闰月,天数加1 ​

temp4+=1; ​

} ​

//计算公历日离当年元旦的天数完成 ​

//判断公历日在春节前还是春节后 ​

if (temp4>=temp3) ​

{ //公历日在春节后或就是春节当日使用下面代码进行运算 ​

temp4-=temp3; ​

mnotallow=0x1; ​

month_p=0x1; //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月 ​

flag2=get_moon_day(month_p,table_addr); ​

//检查该农历月为大小还是小月,大月返回1,小月返回0 ​

flag_y=0; ​

if(flag2==0)temp1=0x1d; //小月29天 ​

else temp1=0x1e; //大小30天 ​

temp2=year_code[table_addr]&0xf0; ​

temp2=_cror_(temp2,4); //从数据表中取该年的闰月月份,如为0则该年无闰月 ​

while(temp4>=temp1) ​

{ ​

temp4-=temp1; ​

month_p+=1; ​

if(mnotallow==temp2) ​

{ ​

flag_y=~flag_y; ​

if(flag_y==0) ​

month+=1; ​

} ​

else month+=1; ​

flag2=get_moon_day(month_p,table_addr); ​

if(flag2==0)temp1=0x1d; ​

else temp1=0x1e; ​

} ​

day=temp4+1; ​

} ​

else ​

{ //公历日在春节前使用下面代码进行运算 ​

temp3-=temp4; ​

if (year==0x0) ​

{ ​

year=0x63;c=1; ​

} ​

else year-=1; ​

table_addr-=0x3; ​

mnotallow=0xc; ​

temp2=year_code[table_addr]&0xf0; ​

temp2=_cror_(temp2,4); ​

if (temp2==0) ​

month_p=0xc; ​

else ​

month_p=0xd; // ​

/*month_p为月份指向,如果当年有闰月,一年有十三个月,月指向13,无闰月指向12*/ ​

flag_y=0; ​

flag2=get_moon_day(month_p,table_addr); ​

if(flag2==0)temp1=0x1d; ​

else temp1=0x1e; ​

while(temp3>temp1) ​

{ ​

temp3-=temp1; ​

month_p-=1; ​

if(flag_y==0)month-=1; ​

if(mnotallow==temp2)flag_y=~flag_y; ​

flag2=get_moon_day(month_p,table_addr); ​

if(flag2==0)temp1=0x1d; ​

else temp1=0x1e; ​

} ​

day=temp1-temp3+1; ​

} ​

c_monotallow=c; //HEX->BCD ,运算结束后,把数据转换为BCD数据 ​

temp1=year/10; ​

temp1=_crol_(temp1,4); ​

temp2=year%10; ​

year_monotallow=temp1|temp2; ​

temp1=month/10; ​

temp1=_crol_(temp1,4); ​

temp2=month%10; ​

month_monotallow=temp1|temp2; ​

temp1=day/10; ​

temp1=_crol_(temp1,4); ​

temp2=day%10; ​

day_monotallow=temp1|temp2; ​

} ​

/*函数功能:输入BCD阳历数据,输出BCD星期数据(只允许1901-2099年) ​

调用函数示例:Conver_week(c_sun,year_sun,month_sun,day_sun) ​

如:计算2004年10月16日Conversion(0,0x4,0x10,0x16); ​

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世 ​

纪,c_sun=1为19世纪 ​

调用函数后,原有数据不变,读week得出阴历BCD数据 ​

*/ ​

code uchar table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正数据表 ​

/* ​

算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期但如果是在 ​

闰年又不到3 月份上述之和要减一天再除7 ​

星期数为0 ​

*/ ​

void Conver_week(bit c,uchar year,uchar month,uchar day) ​

{//c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据 ​

uchar temp1,temp2; ​

temp1=year/16; //BCD->hex 先把数据转换为十六进制 ​

temp2=year%16; ​

year=temp1*10+temp2; ​

temp1=month/16; ​

temp2=month%16; ​

mnotallow=temp1*10+temp2; ​

temp1=day/16; ​

temp2=day%16; ​

day=temp1*10+temp2; ​

if (c==0){year+=0x64;} //如果为21世纪,年份数加100 ​

temp1=year/0x4; //所过闰年数只算1900年之后的 ​

temp2=year+temp1; ​

temp2=temp2%0x7; //为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据 ​

temp2=temp2+day+table_week[month-1]; ​

if (year%0x4==0&&month<3)temp2-=1; ​

week=(temp2-1)%0x7; ​

}​

//test ​

uchar c_sun,year_sun,month_sun,day_sun; ​

/****************************************************************************************************************************​

函数功能:二十四节气数据库​

入口参数: unsigned char(yy,mo,dd) 对应 年月日​

出口参数: unsigned char(0-24) 1-24对应二十四节气​

作者 :​

二十四节气数据库(1901--2050) ​

数据格式说明: ​

如1901年的节气为 ​

月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 ​

[ 6,21][ 4,19][ 6,21][ 5,21][ 6,22][ 6,22][ 8,23][ 8,24][ 8,24][ 8,24][ 8,23][ 8,22] ​

[ 9, 6][11, 4][ 9, 6][10, 6][ 9, 7][ 9, 7][ 7, 8][ 7, 9][ 7, 9][ 7, 9][ 7, 8][ 7,15] ​

上面第一行数据为每月节气对应公历日期,15减去每月第一个节气,每月第二个节气减去15得第二​

行,这样每月两个节气对应数据都小于16,每月用一个字节存放,高位存放第一个节气数据,低位存​

放第二个节气的数据,可得下表 ​

****************************************************************************************************************************/​

uchar code jieqi_code[]=​

{ ​

0x96,0xB4,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x88,0x78,0x87,0x86, //2000 ​

0xA5,0xB3,0xA5,0xA5,0xA6,0xA6,0x88,0x88,0x88,0x78,0x87,0x87, //2001 ​

0xA5,0xB4,0x96,0xA5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //2002 ​

0x95,0xB4,0x96,0xA5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //2003 ​

0x96,0xB4,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x88,0x78,0x87,0x86, //2004 ​

0xA5,0xB3,0xA5,0xA5,0xA6,0xA6,0x88,0x88,0x88,0x78,0x87,0x87, //2005 ​

0xA5,0xB4,0x96,0xA5,0xA6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2006 ​

0x95,0xB4,0x96,0xA5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //2007 ​

0x96,0xB4,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x87,0x78,0x87,0x86, //2008 ​

0xA5,0xB3,0xA5,0xB5,0xA6,0xA6,0x88,0x88,0x88,0x78,0x87,0x87, //2009 ​

0xA5,0xB4,0x96,0xA5,0xA6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2010 ​

0x95,0xB4,0x96,0xA5,0x96,0x97,0x88,0x78,0x78,0x79,0x78,0x87, //2011 ​

0x96,0xB4,0xA5,0xB5,0xA5,0xA6,0x87,0x88,0x87,0x78,0x87,0x86, //2012 ​

0xA5,0xB3,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x88,0x78,0x87,0x87, //2013 ​

0xA5,0xB4,0x96,0xA5,0xA6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2014 ​

0x95,0xB4,0x96,0xA5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //2015 ​

0x95,0xB4,0xA5,0xB4,0xA5,0xA6,0x87,0x88,0x87,0x78,0x87,0x86, //2016 ​

0xA5,0xC3,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x88,0x78,0x87,0x87, //2017 ​

0xA5,0xB4,0xA6,0xA5,0xA6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2018 ​

0xA5,0xB4,0x96,0xA5,0x96,0x96,0x88,0x78,0x78,0x79,0x77,0x87, //2019 ​

0x95,0xB4,0xA5,0xB4,0xA5,0xA6,0x97,0x87,0x87,0x78,0x87,0x86, //2020 ​

0xA5,0xC3,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x88,0x78,0x87,0x86, //2021 ​

0xA5,0xB4,0xA5,0xA5,0xA6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //2022 ​

0xA5,0xB4,0x96,0xA5,0x96,0x96,0x88,0x78,0x78,0x79,0x77,0x87, //2023 ​

0x95,0xB4,0xA5,0xB4,0xA5,0xA6,0x97,0x87,0x87,0x78,0x87,0x96, //2024 ​

0xA5,0xC3,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x88,0x78,0x87,0x86, //2025 ​

0xA5,0xB3,0xA5,0xA5,0xA6,0xA6,0x88,0x88,0x88,0x78,0x87,0x87, //2026 ​

0xA5,0xB4,0x96,0xA5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //2027 ​

0x95,0xB4,0xA5,0xB4,0xA5,0xA6,0x97,0x87,0x87,0x78,0x87,0x96, //2028 ​

0xA5,0xC3,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x88,0x78,0x87,0x86, //2029 ​

0xA5,0xB3,0xA5,0xA5,0xA6,0xA6,0x88,0x88,0x88,0x78,0x87,0x87, //2030 ​

0xA5,0xB4,0x96,0xA5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //2031 ​

0x95,0xB4,0xA5,0xB4,0xA5,0xA6,0x97,0x87,0x87,0x78,0x87,0x96, //2032 ​

0xA5,0xC3,0xA5,0xB5,0xA6,0xA6,0x88,0x88,0x88,0x78,0x87,0x86, //2033 ​

0xA5,0xB3,0xA5,0xA5,0xA6,0xA6,0x88,0x78,0x88,0x78,0x87,0x87, //2034 ​

0xA5,0xB4,0x96,0xA5,0xA6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2035 ​

0x95,0xB4,0xA5,0xB4,0xA5,0xA6,0x97,0x87,0x87,0x78,0x87,0x96, //2036 ​

0xA5,0xC3,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x88,0x78,0x87,0x86, //2037 ​

0xA5,0xB3,0xA5,0xA5,0xA6,0xA6,0x88,0x88,0x88,0x78,0x87,0x87, //2038 ​

0xA5,0xB4,0x96,0xA5,0xA6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2039 ​

0x95,0xB4,0xA5,0xB4,0xA5,0xA6,0x97,0x87,0x87,0x78,0x87,0x96, //2040 ​

0xA5,0xC3,0xA5,0xB5,0xA5,0xA6,0x87,0x88,0x87,0x78,0x87,0x86, //2041 ​

0xA5,0xB3,0xA5,0xB5,0xA6,0xA6,0x88,0x88,0x88,0x78,0x87,0x87, //2042 ​

0xA5,0xB4,0x96,0xA5,0xA6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2043 ​

0x95,0xB4,0xA5,0xB4,0xA5,0xA6,0x97,0x87,0x87,0x88,0x87,0x96, //2044 ​

0xA5,0xC3,0xA5,0xB4,0xA5,0xA6,0x87,0x88,0x87,0x78,0x87,0x86, //2045 ​

0xA5,0xB3,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x88,0x78,0x87,0x87, //2046 ​

0xA5,0xB4,0x96,0xA5,0xA6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2047 ​

0x95,0xB4,0xA5,0xB4,0xA5,0xA5,0x97,0x87,0x87,0x88,0x86,0x96, //2048 ​

0xA4,0xC3,0xA5,0xA5,0xA5,0xA6,0x97,0x87,0x87,0x78,0x87,0x86, //2049 ​

0xA5,0xC3,0xA5,0xB5,0xA6,0xA6,0x87,0x88,0x78,0x78,0x87,0x87, //2050​

};​

uchar jieqi (uchar y2,m2,d2)​

{​

uchar temp,d,y,y1,m;​

uint addr;​

d=d2/16*10+d2%16;​

m=m2/16*10+m2%16; ​

y1=y2/16*10+y2%16+2000;​

y=y1-2000;​

addr=y*12+m-1;​

if(d<15)​

{​

temp=15-d;​

if((jieqi_code[addr]>>4)==temp) return (m*2-1);​

else return (0);​

}​

if(d==15) return (0);​

if(d>15)​

{​

temp=d-15;​

if((jieqi_code[addr]&0x0f)==temp) return (m*2);​

else return (0);​

}​

}​


/******************************************************************************/​

//公历节日数据库表​

/******************************************************************************/​

void days () //公历节日数据库​

{ ​

uchar j;​

j=jieqi(yy,mo,dd);​

if(t/4%4==0)//设置变化的时间,默认是2秒 显示包括节气,座右铭,生日,等,8秒循环一次​

{ //以下自己添加生日、节日信息​

/* if ( month_monotallow== 0x07 && day_monotallow== 0x13 ){dispString(3, 0, 1, "后天我的阴历生日");}​

if ( month_monotallow== 0x07 && day_monotallow== 0x14 ){dispString(3, 0, 1, "明天我的阴历生日");}​

if ( month_monotallow== 0x07 && day_monotallow== 0x15 ){dispString(3, 0, 1, "今天我的阴历生日");}​

if ( month_monotallow== 0x08 && day_monotallow== 0x26 ){dispString(3, 0, 1, "后天飞的阴历生日");}​

if ( month_monotallow== 0x08 && day_monotallow== 0x27 ){dispString(3, 0, 1, "明天飞的阴历生日");}​

if ( month_monotallow== 0x08 && day_monotallow== 0x28 ){dispString(3, 0, 1, "今天飞的阴历生日");}​

if ( mo == 0x08 && dd == 0x18 ){dispString(3, 0, 1, "后天我的阳历生日");}​

if ( mo == 0x08 && dd == 0x19 ){dispString(3, 0, 1, "明天我的阳历生日");}​

if ( mo == 0x08 && dd == 0x20 ){dispString(3, 0, 1, "今天我的阳历生日");}*/​

if ( mo == 0x09 && dd == 0x29 ){dispString(3, 0, 1, "后天我的阳历生日");}​

if ( mo == 0x09 && dd == 0x30 ){dispString(3, 0, 1, "明天我的阳历生日");}​

if ( mo == 0x10 && dd == 0x01 ){dispString(3, 0, 1, "今天我的阳历生日");}​

//if ( month_monotallow== 0x08 && day_monotallow== 0x01 ){dispString(3, 0, 1, "后天是 的生日");}​

//if ( month_monotallow== 0x08 && day_monotallow== 0x02 ){dispString(3, 0, 1, "后天是 生日!");}​

//if ( month_monotallow== 0x08 && day_monotallow== 0x03 ){dispString(3, 0, 1, "今天是 生日!");}​

}​

else if(t/4%4==1)​

{ //正常节日显示​

//农历节日​

// else​

明天大年三十 ");}​

if ( month_monotallow== 0x12 && day_monotallow== 0x30 ){dispString(3, 0, 1, " 大年三十 ");}​

if ( month_monotallow== 0x05 && day_monotallow== 0x05 ){dispString(3, 0, 1, " 今天是端午节 ");}​

if ( month_monotallow== 0x08 && day_monotallow== 0x15 ){dispString(3, 0, 1, " 今天是中秋节 ");}​

if ( month_monotallow== 0x01 && day_monotallow== 0x15 ){dispString(3, 0, 1, " 今天是元宵节 ");}​

if ( month_monotallow== 0x02 && day_monotallow== 0x02 ){dispString(3, 0, 1, " 今天是龙抬头 ");}​

if ( month_monotallow== 0x07 && day_monotallow== 0x07 ){dispString(3, 0, 1, " 今天是七夕! ");}​

if ( month_monotallow== 0x07 && day_monotallow== 0x15 ){dispString(3, 0, 1, " 今天是鬼节! ");}​

if ( month_monotallow== 0x09 && day_monotallow== 0x09 ){dispString(3, 0, 1, " 今天是重阳节 ");}​

if ( month_monotallow== 0x12 && day_monotallow== 0x08 ){dispString(3, 0, 1, " 今天是腊八节 ");}​

//二十四节气​

if (j==1){dispString(3, 0, 1, " 今天小寒 ");}​

今天大寒 ");}​

今天立春 ");}​

今天雨水 ");}​

今天惊蛰 ");}​

今天春分 ");}​

今天清明 ");}​

今天谷雨 ");}​

今天立夏 ");}​

今天小满 ");}​

今天芒种 ");}​

今天夏至 ");}​

今天小暑 ");}​

今天大暑 ");}​

今天立秋 ");}​

今天处暑 ");}​

今天白露 ");}​

今天秋分 ");}​

今天寒露 ");}​

今天霜降 ");}​

今天立冬 ");}​

今天小雪 ");}​

今天大雪 ");}​

今天冬至 ");}​

//国立节日 ​

if ( mo == 0x01 && dd == 0x01 ){dispString(3, 0, 1, " 元旦快乐 ");}//1月​

if ( mo == 0x01 && dd == 0x28 ){dispString(3, 0, 1, "今天是世界麻风日");}​


if ( mo == 0x02 && dd == 0x02 ){dispString(3, 0, 1, "今天是世界湿地日");}//2月​

if ( mo == 0x02 && dd == 0x13 ){dispString(3, 0, 1, " 明天情人节了 ");} ​

if ( mo == 0x02 && dd == 0x14 ){dispString(3, 0, 1, " 今天是情人节 ");}​


if ( mo == 0x03 && dd == 0x01 ){dispString(3, 0, 1, "今天是国际海豹日");}//3月 ​

if ( mo == 0x03 && dd == 0x03 ){dispString(3, 0, 1, "今天是全国爱耳日");} ​

if ( mo == 0x03 && dd == 0x08 ){dispString(3, 0, 1, "今天是3.8 妇女节");} ​

if ( mo == 0x03 && dd == 0x12 ){dispString(3, 0, 1, " 今天是植树节 ");} ​

if ( mo == 0x03 && dd == 0x14 ){dispString(3, 0, 1, "今天是国际警察日");} ​

if ( mo == 0x03 && dd == 0x15 ){dispString(3, 0, 1, "今天消费者权益日");} ​

if ( mo == 0x03 && dd == 0x17 ){dispString(3, 0, 1, "今天是国际航海日");} ​

if ( mo == 0x03 && dd == 0x21 ){dispString(3, 0, 1, "今天是世界森林日");} ​

if ( mo == 0x03 && dd == 0x22 ){dispString(3, 0, 1, "今天是世界水日!");} ​

if ( mo == 0x03 && dd == 0x23 ){dispString(3, 0, 1, "今天是世界气象日");} ​

if ( mo == 0x03 && dd == 0x24 ){dispString(3, 0, 1, "世界防治结核病日");}​


if ( mo == 0x04 && dd == 0x01 ){dispString(3, 0, 1, "愚人节,小心上当");}//4 ​

if ( mo == 0x04 && dd == 0x07 ){dispString(3, 0, 1, "今天是世界卫生日");} ​

if ( mo == 0x04 && dd == 0x08 ){dispString(3, 0, 1, " 今天复活节! ");} ​

if ( mo == 0x04 && dd == 0x13 ){dispString(3, 0, 1, " 黑色星期五! ");}​


if ( mo == 0x05 && dd == 0x01 ){dispString(3, 0, 1, " 今天是劳动节 ");}//5 ​

if ( mo == 0x05 && dd == 0x04 ){dispString(3, 0, 1, "今天是五四青年节");} ​

if ( mo == 0x05 && dd == 0x08 ){dispString(3, 0, 1, "今天世界红十字日");} ​

if ( mo == 0x05 && dd == 0x12 ){dispString(3, 0, 1, "今天是国际护士节");} ​

if ( mo == 0x05 && dd == 0x05 ){dispString(3, 0, 1, "近日注意母亲节! ");} ​

if ( mo == 0x05 && dd == 0x15 ){dispString(3, 0, 1, "今天是国际家庭日");}​

if ( mo == 0x05 && dd == 0x31 ){dispString(3, 0, 1, "今天是世界无烟日");} ​


if ( mo == 0x06 && dd == 0x01 ){dispString(3, 0, 1, "今天是国际儿童节");}//6​

if ( mo == 0x06 && dd == 0x05 ){dispString(3, 0, 1, "今天是世界环境日");} ​

if ( mo == 0x06 && dd == 0x26 ){dispString(3, 0, 1, "今天是国际禁毒日");} ​

if ( mo == 0x06 && dd == 0x06 ){dispString(3, 0, 1, "今天是全国爱眼日");} ​

if ( mo == 0x06 && dd == 0x13 ){dispString(3, 0, 1, "近日注意父亲节! ");}​

if ( mo == 0x06 && dd == 0x15 ){dispString(3, 0, 1, "近日注意父亲节! ");}​


if ( mo == 0x07 && dd == 0x01 ){dispString(3, 0, 1, "香港回归记念日! ");}//7​

if ( mo == 0x07 && dd == 0x07 ){dispString(3, 0, 1, "抗日战争记念日! ");}​

if ( mo == 0x07 && dd == 0x11 ){dispString(3, 0, 1, "今天是世界人口日");}​


if ( mo == 0x08 && dd == 0x01 ){dispString(3, 0, 1, "今天是八一建军节");}//8​

if ( mo == 0x08 && dd == 0x08 ){dispString(3, 0, 1, "今天是中国男子节");}​

if ( mo == 0x08 && dd == 0x15 ){dispString(3, 0, 1, "抗战胜利记念日!");}​



if ( mo == 0x09 && dd == 0x10 ){dispString(3, 0, 1, " 今天是教师节 ");}//9​

if ( mo == 0x09 && dd == 0x18 ){dispString(3, 0, 1, "九·一八事变记念");}​

if ( mo == 0x09 && dd == 0x20 ){dispString(3, 0, 1, "今天是国际爱牙日");}​

if ( mo == 0x09 && dd == 0x27 ){dispString(3, 0, 1, "今天是世界旅游日");}​


if ( mo == 0x10 && dd == 0x01 ){dispString(3, 0, 1, " 今天是国庆节 ");}//10​

if ( mo == 0x10 && dd == 0x04 ){dispString(3, 0, 1, "今天是世界动物日");}​

if ( mo == 0x10 && dd == 0x24 ){dispString(3, 0, 1, "今天是联合国日! ");}​

if ( mo == 0x10 && dd == 0x12 ){dispString(3, 0, 1, "明天国际教师节! ");}​

if ( mo == 0x10 && dd == 0x13 ){dispString(3, 0, 1, "今天是国际教师节");}​


if ( mo == 0x11 && dd == 0x10 ){dispString(3, 0, 1, "今天是世界青年节");}//11​

if ( mo == 0x11 && dd == 0x17 ){dispString(3, 0, 1, "今天是世界学生节");}​


if ( mo == 0x12 && dd == 0x01 ){dispString(3, 0, 1, "今天世界艾滋病日");}//12​

if ( mo == 0x12 && dd == 0x23 ){dispString(3, 0, 1, " 明晚平安夜! ");}​

if ( mo == 0x12 && dd == 0x24 ){dispString(3, 0, 1, " 今晚平安夜! ");}​

if ( mo == 0x12 && dd == 0x25 ){dispString(3, 0, 1, " 圣诞快乐 ");}​

if ( mo == 0x12 && dd == 0x31 ){dispString(3, 0, 1, " 明日元旦 ");}​

}​

else if(t/4%4==2)​

{dispString(3, 0, 1, "座右铭→天天向上");}​


else if(t/4%4==3){//非节日时显示时晨信息 ​


凌晨 点 分 "); ​

lcdWriteCommand(0x9b);​

if(hh1/10 != 0){lcdWriteData((hh1/10)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(hh1%10+0x30);​

lcdWriteCommand(0x9d); //":"​

if(mm/16 != 0){lcdWriteData((mm/16)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(mm%16+0x30); }​

if ( hh >= 0x06 && hh < 0x08 ){dispString(3, 0, 1, " 早晨 点 分 ");​

lcdWriteCommand(0x9b);​

if(hh1/10 != 0){lcdWriteData((hh1/10)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(hh1%10+0x30);​

lcdWriteCommand(0x9d); //":"​

if(mm/16 != 0){lcdWriteData((mm/16)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(mm%16+0x30); }​

if ( hh >= 0x08 && hh < 0x12 ){dispString(3, 0, 1, " 上午 点 分 "); ​

lcdWriteCommand(0x9b);​

if(hh1/10 != 0){lcdWriteData((hh1/10)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(hh1%10+0x30);​

lcdWriteCommand(0x9d); //":"​

if(mm/16 != 0){lcdWriteData((mm/16)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(mm%16+0x30); }​

if ( hh == 0x12) {dispString(3, 0, 1, " 中午 点 分 "); ​

lcdWriteCommand(0x9b);​

if(hh1/10 != 0){lcdWriteData((hh1/10)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(hh1%10+0x30);​

lcdWriteCommand(0x9d); //":"​

if(mm/16 != 0){lcdWriteData((mm/16)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(mm%16+0x30); }​

if ( hh >= 0x13 && hh < 0x18 ){dispString(3, 0, 1, " 下午 点 分 ");​

lcdWriteCommand(0x9b);​

if(hh1/10 != 0){lcdWriteData((hh1/10)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(hh1%10+0x30);​

lcdWriteCommand(0x9d); //":"​

if(mm/16 != 0){lcdWriteData((mm/16)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(mm%16+0x30); }​

if ( hh >= 0x18 && hh < 0x22 ){dispString(3, 0, 1, " 晚上 点 分 ");​

lcdWriteCommand(0x9b);​

if(hh1/10 != 0){lcdWriteData((hh1/10)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(hh1%10+0x30);​

lcdWriteCommand(0x9d); //":"​

if(mm/16 != 0){lcdWriteData((mm/16)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(mm%16+0x30); }​

if ( hh >= 0x22 && hh <= 0x23 ){dispString(3, 0, 1, " 夜里 点 分 "); ​

lcdWriteCommand(0x9b);​

if(hh1/10 != 0){lcdWriteData((hh1/10)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(hh1%10+0x30);​

lcdWriteCommand(0x9d); //":"​

if(mm/16 != 0){lcdWriteData((mm/16)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(mm%16+0x30); }​

if ( hh >= 0x00 && hh < 0x04 ){dispString(3, 0, 1, " 深夜 点 分 ");​

lcdWriteCommand(0x9b);​

if(hh1/10 != 0){lcdWriteData((hh1/10)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(hh1%10+0x30);​

lcdWriteCommand(0x9d); //":"​

if(mm/16 != 0){lcdWriteData((mm/16)+0x30);} //十位消隐​

else{lcdWriteData(0x20);}//同上 ​

lcdWriteData(mm%16+0x30); }​


}​

}​

/******************************ds1820程序***************************************/​

void delay_18B20(unsigned int i)//延时1微秒​

{​

while(i--);​

}​

void ds1820rst()//ds1820复位*​

{ unsigned char x=0;​

DQ = 1; //DQ复位​

delay_18B20(4); //延时​

DQ = 0; //DQ拉低​

delay_18B20(100); //精确延时大于480us​

DQ = 1; //拉高​

delay_18B20(40); ​

} ​


读数据​

{ unsigned char i=0;​

unsigned char dat = 0;​

for (i=8;i>0;i--)​

{ DQ = 0; //给脉冲信号​

dat>>=1;​

给脉冲信号​

if(DQ)​

dat|=0x80;​

delay_18B20(10);​

}​

return(dat);​

}​

void ds1820wr(uchar wdata)//写数据​

{unsigned char i=0;​

for (i=8; i>0; i--)​

{ DQ = 0;​

DQ = wdata&0x01;​

delay_18B20(10);​

DQ = 1;​

wdata>>=1;​

}​

}​

read_temp()//读取温度值并转换​

{uchar a,b;​

ds1820rst(); ​

ds1820wr(0xcc);//跳过读序列号​

ds1820wr(0x44);//启动温度转换​

ds1820rst(); ​

ds1820wr(0xcc);//跳过读序列号​

ds1820wr(0xbe);//读取温度​

a=ds1820rd();​

b=ds1820rd();​

tvalue=b;​

tvalue<<=8;​

tvalue=tvalue|a;​

if(tvalue<0x0fff)​

tflag=0;​

else​

{tvalue=~tvalue+1;​

tflag=1;​

}​

tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数​

return(tvalue);​

}​

/*****************************************************************************/​

//声明(当各函数的排列适当时可不用声明)​

void lcm_w_ss(void);void lcm_w_mm(void);​

void lcm_w_hh(void);void lcm_w_dd(void);​

void lcm_w_mo(void);void lcm_w_yy(void);​

void lcm_w_xq(void);​

unsigned char clock_in(void);​

void clock_out(unsigned char dd);​

void Init_1302(void);​

unsigned char read_clock(unsigned char ord);​

void read_clockS(void);​

void Set_time(unsigned char sel);​

void write_clock(unsigned char ord, unsigned char dd);​

void updata (void);​

void lcmnongli();​

void lcmjieqi();​

void lcmshengxiao();​

/*****************************************************************************/ ​

//农历显示​

/******************************************************************************/​

void lcmnongli()​

{​

uchar yue,ri;​

year_sun=yy; ​

month_sun=mo; ​

day_sun=dd; ​

Conversion(c_sun,year_sun,month_sun,day_sun);​

Conver_week(c_sun,year_sun,month_sun,day_sun);​

selx = week+1; //字节低4位的BCD码放入selx​

write_clock(0x8a,selx);//星期​

if(selx==7) {dispString(1, 7, 1, "日");} //​

if(selx==6) {dispString(1, 7, 1, "六");} //​

if(selx==5) {dispString(1, 7, 1, "五");} //​

if(selx==4) {dispString(1, 7, 1, "四");} //​

if(selx==3) {dispString(1, 7, 1, "三");} //​

if(selx==2) {dispString(1, 7, 1, "二");} //​

if(selx==1) {dispString(1, 7, 1, "一");} //星期一​

dispString(1, 5, 1, "星期");​



yue=(month_moon/16)*10+month_moon%16;​

year1=yue;​

ri=(day_moon/16)*10+day_moon%16; //显示农历月​


正"); }​

二"); }​

三"); }​

四"); }​

五"); }​

六"); }​

七"); }​

八"); }​

九"); }​

十"); }​

冬"); }​

腊"); }​

月");​

if(ri<=10)​

{​

初一"); }​

初二"); }​

初三"); }​

初四");}​

初五"); }​

初六"); }​

初七"); }​

初八"); }​

初九"); }​

初十"); }​

}​

else​

{​

十一");}​

十二");}​

十三"); }​

十四"); }​

十五"); }​

十六"); }​

十七"); }​

十八"); }​

十九"); }​

二十");}​

廿一"); }​

廿二");}​

廿三"); }​

廿四"); }​

廿五"); }​

廿六");}​

廿七"); }​

廿八"); }​

廿九");}​

三十"); }​

}​

}​

/******************************************************************************/​

//十二生肖显示​

/******************************************************************************/​

void lcmshengxiao()​

{​

uint y3;​

y3=(yy/16*10+yy%16+2000-1900)%12;​

if(year<6 & year1>6) y3--;​

switch(y3)​

{​

子鼠");​

break;​

丑牛");​

break;​

寅虎");​

break;​

卯兔");​

break;​

辰龙");​

break;​

巳蛇"); ​

break;​

午马");​

break;​

未羊");​

break;​

申猴");​

break;​

酉鸡");​

break;​

戌狗");​

break;​

亥猪"); ​

break;​

}​

}​


/******************************************************************************/​

/*****************************************************************************/​

//调时用加1程序​

void Set_time(unsigned char sel)//根据选择调整的相应项目加1并写入DS1302​

{ ​

signed char address,item;​

signed char max,mini;​

设置"); ​

秒钟");address=0x80; max=59;mini=0;} //秒7​

分钟");address=0x82; max=59;mini=0;} //分钟6​

小时");address=0x84; max=23;mini=0;} //小时5​

// if(sel==3) {dispString(3, 4, 1, "星期");address=0x8a; max=7;mini=1;} //星期4 ​

日期");address=0x86; max=31;mini=1;} //日3​

月份");address=0x88; max=12;mini=1;} //月2​

年份");address=0x8c; max=99; mini=0;} //年1​

switch(sel)​

{​

case 0: convertChar(0, 1, 2);​

break;​

case 1: convertChar(0, 2, 3);​

break;​

case 2: convertChar(0, 4, 2);​

break;​

// case 3: convertChar(1, 7, 2);​

// break;​

case 3: convertChar(2, 0, 2);​

break;​

case 4: convertChar(2, 1, 3);​

break;​

case 5: convertChar(2, 3, 2);​

break;​

}​

读取1302某地址上的数值转换成10进制赋给item ​

item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;​

if(KEY_2 == 0)​

{​

item--;//数加 1 ​

}​

if(KEY_4 == 0)​

{​

item++;//数减 1 ​

}​

查看数值有效范围 ​

if(item<mini) item=max; ​

允许写操作​

转换成16进制写入1302​

写保护,禁止写操作 ​


}​

/*****************************************************************************/​

//设置1302的初始时间(自动初始化)​

void Init_1302(void){//-设置1302的初始时间(2007年1月1日00时00分00秒星期一)​

unsigned char f;​

if(read_clock(0xc1) != 0xaa){​

write_clock(0x8e,0x00);//允许写操作​

write_clock(0x8c,0x07);//年​

// write_clock(0x8a,0x01);//星期​

write_clock(0x88,0x01);//月​

write_clock(0x86,0x01);//日​

write_clock(0x84,0x00);//小时​

write_clock(0x82,0x00);//分钟​

write_clock(0x80,0x00);//秒​

write_clock(0x90,0xa5);//充电 ​

write_clock(0xc0,0xaa);//写入初始化标志RAM(第00个RAM位置)​

for(f=0;f<60;f=f+2){//清除闹钟RAM位为0​

write_clock(0xc2+f,0x00);​

}​

write_clock(0x8e,0x80);//禁止写操作​

}​

}​

/*****************************************************************************/​

//DS1302写数据(底层协议)​

void write_clock(unsigned char ord, unsigned char dd){​

clock_clk=0;​

clock_Rst=0;​

clock_Rst=1;​

clock_out(ord);​

clock_out(dd);​

clock_Rst=0;​

clock_clk=1;​

}​

/*****************************************************************************/​

//1302驱动程序(底层协议)​

void clock_out(unsigned char dd){​

ACC=dd;​

clock_dat=a0; clock_clk=1; clock_clk=0;​

clock_dat=a1; clock_clk=1; clock_clk=0;​

clock_dat=a2; clock_clk=1; clock_clk=0;​

clock_dat=a3; clock_clk=1; clock_clk=0;​

clock_dat=a4; clock_clk=1; clock_clk=0;​

clock_dat=a5; clock_clk=1; clock_clk=0;​

clock_dat=a6; clock_clk=1; clock_clk=0;​

clock_dat=a7; clock_clk=1; clock_clk=0;​

}​

/*****************************************************************************/​

//DS1302写入字节(底层协议)​

unsigned char clock_in(void){​

clock_dat=1;​

a0=clock_dat;​

clock_clk=1; clock_clk=0; a1=clock_dat;​

clock_clk=1; clock_clk=0; a2=clock_dat;​

clock_clk=1; clock_clk=0; a3=clock_dat;​

clock_clk=1; clock_clk=0; a4=clock_dat;​

clock_clk=1; clock_clk=0; a5=clock_dat;​

clock_clk=1; clock_clk=0; a6=clock_dat;​

clock_clk=1; clock_clk=0; a7=clock_dat;​

return(ACC);​

}​

/*****************************************************************************/​

//DS1302读数据(底层协议)​

unsigned char read_clock(unsigned char ord){​

unsigned char dd=0;​

clock_clk=0;​

clock_Rst=0;​

clock_Rst=1;​

clock_out(ord);​

dd=clock_in();​

clock_Rst=0;​

clock_clk=1;​

return(dd);​

}​

/*****************************************************************************/​


/*****************************************************************************/​

//扬声器驱动程序(闹钟音乐)​

/*****************************************************************************/ ​

void Beep(void)​

{//BELL-扬声器--整点报时 ​

unsigned char a;//定义变量用于发声的长度设置​

for(a=60;a>0;a--){//第一个声音的长度​

beep = ~beep;//取反扬声器驱动口,以产生音频​

Delay(100);//音调设置延时​

}​

for(a=100;a>0;a--){//同上​

beep = ~beep;​

Delay(80);//​

}​

for(a=100;a>0;a--){//同上​

beep = ~beep;​

Delay(30);//​

}​

beep = 1;//音乐结束后扬声器拉高关闭​

}​

/*****************************************************************************/​

void Beep_set(void){//BELL -扬声器--确定设置​

unsigned char a;//定义变量用于发声的长度设置​

for(a=50;a>0;a--){//第一个声音的长度​

beep = ~beep;//取反扬声器驱动口,以产生音频​

Delay(100);//音调设置延时​

}​

for(a=100;a>0;a--){//同上​

beep = ~beep;​

Delay(50);//​

}​

for(a=50;a>0;a--){//同上​

beep = ~beep;​

Delay(100);//​

}​

beep = 1;//音乐结束后扬声器拉高关闭​

}​

/*****************************************************************************/​

void Beep_key(void){//-扬声器--按键音​

unsigned char a;//定义变量用于发声的长度设置​

for(a=100;a>0;a--){//声音的长度​

beep = ~beep;​

Delay(50);//音调设置延时​

}​

beep = 1;//音乐结束后扬声器拉高关闭​

} ​

/*****************************************************************************/​


/*****************************************************************************/​

//电子钟应用层程序设计​

/*****************************************************************************/​

//向LCM中填写 年 数据​

void lcm_w_yy(void){​

//if(read_clock(0x8d) != yy){​

yy = read_clock(0x8d);​

dispString(0, 0, 1, "20");​

lcdWriteCommand(0x81);​

lcdWriteData((yy/16)+0x30); ​

lcdWriteData(yy%16+0x30);​

} //}​

/*****************************************************************************/​

//向LCM中填写 月 数据​

void lcm_w_mo(void){​

//if(read_clock(0x89) != mo){​

mo = read_clock(0x89);​

lcdWriteCommand(0x82);​

lcdWriteData(0x2d);​

lcdWriteData((mo/16)+0x30); //十位消隐 ​

lcdWriteData(mo%16+0x30);​

lcdWriteData(0x2d);​

year=(mo/16*10)+mo%16;​

} //}​

/*****************************************************************************/​

//星期处理并送入LCM的指定区域​

void lcm_w_xq(void){​

//if(read_clock(0x8b) != xq){​


Conver_week(c_sun,yy,mo,dd);​

selx = week+1; //字节低4位的BCD码放入selx​

// xq = read_clock(0x8b);​

// selx = (read_clock(0x8b))%16; //字节低4位的BCD码放入selx​

if(selx==7) {dispString(1, 7, 1, "日");} //​

if(selx==6) {dispString(1, 7, 1, "六");} //​

if(selx==5) {dispString(1, 7, 1, "五");} //​

if(selx==4) {dispString(1, 7, 1, "四");} //​

if(selx==3) {dispString(1, 7, 1, "三");} //​

if(selx==2) {dispString(1, 7, 1, "二");} //​

if(selx==1) {dispString(1, 7, 1, "一");} //星期一​

dispString(1, 5, 1, "星期");​

} //}​

/*****************************************************************************/​

//向LCM中填写 日 数据​

void lcm_w_dd(void){​

// if(read_clock(0x87) != dd){​

dd = read_clock(0x87);​

lcdWriteCommand(0x84);​

lcdWriteData((dd/16)+0x30); //十位消隐 ​

lcdWriteData(dd%16+0x30);​

} //}​

/*****************************************************************************/​

//向LCM中填写 小时 数据​

void lcm_w_hh(void){​

if(read_clock(0x85) != hh){​

hh = read_clock(0x85);​

if (hh > 0x07 && hh < 0x22 && w == 0){​

Beep();//整点报时音​

}​

}​

lcdWriteCommand(0x88);​

lcdWriteData((hh/16)+0x30);​

lcdWriteData(hh%16+0x30);​

hh1=hh/16*10+hh%16;​

if(hh1>12) hh1=(hh1-12);​


}​

/*****************************************************************************/​

//向LCM中填写 分钟 数据​

void lcm_w_mm(void){​

if(read_clock(0x83) != mm)​

{ ​

mm = read_clock(0x83);​

}​

lcdWriteCommand(0x89);​

if(t/1%2==0)lcdWriteData(0x3a); //":"​

else{lcdWriteData(0x20);}​

lcdWriteData((mm/16)+0x30);​

lcdWriteData(mm%16+0x30);​

if(t/1%2==0) lcdWriteData(0x3a); //":"​

else{lcdWriteData(0x20);} ​

}​

void disp_temper()//温度值显示​

{ ​

uint temper;​

uchar temper_ge,temper_shi,temper_bai;​

temper=read_temp();//读取温度​

temper_ge=temper%10+0x30;​

temper_shi=temper%100/10+0x30;​

temper_bai=temper/100+0x30;​

if(tflag==1)​

{​

dispString(2, 4, 1, " -");​

} ​

if(temper_bai==0x30) temper_bai=0x20;​

lcdWriteCommand(0x8d);​

lcdWriteData(temper_bai);​

lcdWriteData(temper_shi);​

lcdWriteData('.');​

lcdWriteData(temper_ge);​


dispString(2, 7, 1, "℃"); ​

}​

/*********************************************************************************************************​

处理显示函数(被调用层) ​

*********************************************************************************************************/​

void deal(uchar sfm)​

{​

shi=sfm/16;​

ge=sfm%16;​

}​

/********************************************************************************************************​

12864显示时分秒函数(被调用层)​

********************************************************************************************************/​

void display(uchar add,uchar dat)​

{​

uchar i,j=0;​

for(i=16;i<32;i++)​

{ ​

lcdWriteCommand(0x80+i); ​

lcdWriteCommand(0x90+add); ​

lcdWriteData(tab[dat][j++]);​

lcdWriteData(tab[dat][j++]);​

}​

for(i=0;i<16;i++)​

{​

lcdWriteCommand(0x80+i);​

lcdWriteCommand(0x88+add);​

lcdWriteData(tab[dat][j++]);​

lcdWriteData(tab[dat][j++]);​

}​

}​

/*********************************************************************************************************​

初始化函数(被调用层) ​

*********************************************************************************************************/​

void init_dz()​

{​

lcdWriteCommand(0x30); //选择8bit数据流,基本指令集​

lcdWriteCommand(0x0c); //开显示(无游标、不反白)​

lcdWriteCommand(0x01); //清除显示,并且设定地址指针为00H​

dispString(0, 2, 1, "年 月 日"); ​

dispString(3, 0, 1, "星期"); ​

lcdWriteCommand(0x81); 处理年,并显示​

yy = read_clock(0x8d); ​

deal(yy);​

lcdWriteData(shi+0x30);​

lcdWriteData(ge+0x30);​

处理月,并显示​

lcdWriteCommand(0x83);​

mo = read_clock(0x89);​

deal(mo);​

lcdWriteData(shi+0x30);​

lcdWriteData(ge+0x30);​


lcdWriteCommand(0x85); 处理日,并显示​

dd = read_clock(0x87);​

deal(dd);​

lcdWriteData(shi+0x30);​

lcdWriteData(ge+0x30);​




Conver_week(c_sun,yy,mo,dd); 处理星期,并显示​

xq = week+1;​

switch(xq)​

{​

case 1: dispString(3, 2, 1, "一");break;​

case 2: dispString(3, 2, 1, "二");break;​

case 3: dispString(3, 2, 1, "三");break;​

case 4: dispString(3, 2, 1, "四");break;​

case 5: dispString(3, 2, 1, "五");break;​

case 6: dispString(3, 2, 1, "六");break;​

case 7: dispString(3, 2, 1, "日");break;​

default:break;​

}​

dispString(3, 7, 1, "℃");​

lcdWriteCommand(0x36); //启动扩充指令集,启动绘图模式​

clear_img(); //清理图片缓冲区​

hh = read_clock(0x85); 处理小时,并显示​

deal(hh);​

display(0,shi);​

display(1,ge);​

display(2,10);​

mm = read_clock(0x83); 处理分钟,并显示​

deal(mm);​

display(3,shi);​

display(4,ge);​

display(5,10);​

ss = read_clock(0x81); //处理秒,并显示​

deal(ss);​

display(6,shi);​

display(7,ge);​

}​

/********************************************************************************************************​

在12864上显示时间​

********************************************************************************************************/​

void disp_sfm()​

{​

uint temper;​

uchar temper_ge,temper_shi,temper_bai,day_temp,date_temp,month_temp,year_temp;​

lcdWriteCommand(0x36); //启动扩充指令集,启动绘图模式​

ss = read_clock(0x81); //更新数据 ​

if(sec_temp!=ss)//读取秒,只要有改变液晶显示也改变​

{​

sec_temp=ss;​

deal(sec_temp);​

if(secl!=shi)​

{​

secl=shi;​

display(6,secl);​

}​

display(7,ge); ​

}​

mm = read_clock(0x83); //读取分,只要有改变液晶显示也改变​

if(min_temp!=mm)​

{​

min_temp=mm;​

deal(mm);​

display(3,shi);​

display(4,ge);​

}​

hh = read_clock(0x85); //读取小时,只要有改变液晶显示也改变​

if(hour_temp!=hh)​

{​

hour_temp=hh;​

deal(hh);​

display(0,shi);​

display(1,ge);​

}​


if(ge/1%2==0)​

{​

display(2,10);​

display(5,10);​

}​

else​

{​

display(2,11);​

display(5,11);​

}​


lcdWriteCommand(0x30);​

dd = read_clock(0x87); //读取日,只要有改变液晶显示也改变​

if(date_temp!=dd)​

{ ​

date_temp=dd;​

deal(dd);​

lcdWriteCommand(0x85);​

lcdWriteData(shi+0x30);​

lcdWriteData(ge+0x30);​

}​

mo = read_clock(0x89); //读取月,只要有改变液晶显示也改变​

if(month_temp!=mo)​

{​

month_temp=mo;​

lcdWriteCommand(0x83);​

deal(mo);​

lcdWriteData(shi+0x30);​

lcdWriteData(ge+0x30);​

}​

yy = read_clock(0x8d); //读取年,只要有改变液晶显示也改变​

if(year_temp!=yy)​

{​

year_temp=yy;​

lcdWriteCommand(0x81);​

deal(yy);​

lcdWriteData(shi+0x30);​

lcdWriteData(ge+0x30);​

}​


Conver_week(c_sun,yy,mo,dd); 处理星期,并显示​

xq = week+1;​

day_temp = read_clock(0x8b); //读取星期,只要有改变液晶显示也改变​

if(day_temp!=xq)​

{ ​

day_temp=xq;​

switch(xq)​

{​

case 1: dispString(3, 2, 1, "一");break;​

case 2: dispString(3, 2, 1, "二");break;​

case 3: dispString(3, 2, 1, "三");break;​

case 4: dispString(3, 2, 1, "四");break;​

case 5: dispString(3, 2, 1, "五");break;​

case 6: dispString(3, 2, 1, "六");break;​

case 7: dispString(3, 2, 1, "日");break;​

default:break;​

}​

}​

temper=read_temp();//读取温度​

temper_ge=temper%10+0x30;​

temper_shi=temper%100/10+0x30;​

temper_bai=temper/100+0x30;​

if(tflag==1)​

{​


dispString(3, 4, 1, " -");​

} ​

//else​

//{​

//write_com(0x9c);​

//lcm_w_word(" +");​

//}​

if(temper_bai==0x30) temper_bai=0x20;​

lcdWriteCommand(0x9d);​

lcdWriteData(temper_bai);​

lcdWriteData(temper_shi);​

lcdWriteData('.');​

lcdWriteData(temper_ge);​


lcdWriteCommand(0x36); ​


}​

/*****************************************************************************/​

//刷新数据​

void updata (void){​

刷新 秒​

lcm_w_mm();//刷新 分 ​

lcm_w_hh();//刷新 小时 ​

lcm_w_dd();//刷新 日​

lcm_w_xq();//更新星期值 ​

lcm_w_mo();//刷新 月​

lcm_w_yy();//刷新 年​

ss = read_clock(0x81); //更新数据​

t=ss/16*10+ss%16;​

lcmnongli();​

lcmshengxiao();​

disp_temper();​

if(w == 0)​

{ ​

days ();//节日显示​

}​

if (n==1||n==2||n==3)​

{​

lcdWriteCommand(0x85); //秒值在LCM上的写入位置​

lcdWriteData(0x20);​

lcdWriteData(0x0e); ​

}​

else{​

lcdWriteCommand(0x85); //秒值在LCM上的写入位置​

lcdWriteData(0x20);​

lcdWriteData(0x20); ​

} ​

}​

/*****************************************************************************/​

//向LCM中填写 秒 数据​

void lcm_w_ss(void)​

{​

unsigned int i=0;​

unsigned char a=0,b=0,c=0;​

if(read_clock(0x81) != ss){ //判断是否需要更新​

ss = read_clock(0x81); //更新数据​

if(w==1&&e==6)​

{​

if(t/1%2==0)​

{​

lcdWriteCommand(0x8b); //秒值在LCM上的写入位置​

lcdWriteData((ss/16)+0x30); //写十位 ​

lcdWriteData(ss%16+0x30); //写个位​

}​

else​

{​

lcdWriteCommand(0x8b); //秒值在LCM上的写入位置​

lcdWriteData(0x20); //写十位 ​

lcdWriteData(0x20); //写个位​

}​

}​

else​

{​

lcdWriteCommand(0x8b); //秒值在LCM上的写入位置​

lcdWriteData((ss/16)+0x30); //写十位 ​

lcdWriteData(ss%16+0x30); //写个​

}​

}​

}​

//*****************************Music******************************************************/​

//我和你​

unsigned char code Music_wo[]={ 0x17,0x02, 0x19,0x02, 0x15,0x01, 0x16,0x02, 0x17,0x02,​

0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x19,0x02,​

0x16,0x00, 0x17,0x02, 0x19,0x02, 0x15,0x01, 0x16,0x02,​

0x17,0x02, 0x10,0x01, 0x16,0x02, 0x0F,0x02, 0x16,0x02,​

0x17,0x02, 0x15,0x00, 0x1A,0x01, 0x19,0x01, 0x1A,0x01,​

0x15,0x01, 0x17,0x02, 0x10,0x02, 0x17,0x66, 0x19,0x03,​

0x16,0x00, 0x17,0x02, 0x19,0x02, 0x15,0x01, 0x16,0x02,​

0x17,0x02, 0x10,0x01, 0x16,0x02, 0x0F,0x02, 0x16,0x02,​

0x17,0x02, 0x15,0x00, 0x00,0x00 };​

/***********************************************************************************/​

/*------------------整屏写入数据:全亮,或者竖条-----------------------------*/​

void lcdfill(unsigned char disdata)​

{ unsigned char x,y;​

for(y=0;y<32;y++)​

for(x=0;x<16;x++)​

{ lcdWriteCommand(0x36);​

行地址​

列地址​

lcdWriteCommand(0x30);​

lcdWriteData(disdata);​

lcdWriteData(disdata);​

DelayM(2);​

}​

lcdWriteCommand(0x34); ​

lcdWriteCommand(0x36);​

}​

/*------------------显示横-----------------------------*/​

void Disp_H_Line()​

{ unsigned char x,y;​

unsigned char k=0x00; ​

for(y=0;y<32;y++)​

{ k=~k;​

for(x=0;x<16;x++)​

{ lcdWriteCommand(0x36);​

行地址​

列地址​

lcdWriteCommand(0x30);​

lcdWriteData(k);​

lcdWriteData(k);​

DelayM(5);​

};​

}​

lcdWriteCommand(0x34); ​

lcdWriteCommand(0x36);​

}​

/*------------------显示边框-------------------------------*/​

void Frame()​

{unsigned char x,y;​

lcdfill(0x00);​

for(x=0;x<9;x+=8)​

for(y=0;y<32;y++)​

{ lcdWriteCommand(0x36);​

行地址​

列地址​

lcdWriteCommand(0x30);​

lcdWriteData(0x80);​

lcdWriteData(0x00);​


lcdWriteCommand(0x36);​

行地址​

列地址​

lcdWriteCommand(0x30);​

lcdWriteData(0x00);​

lcdWriteData(0x01);​

DelayM(5);​

}​

for(y=0;y<2;y++)​

for(x=0;x<8;x++)​

{lcdWriteCommand(0x36);​

行地址​

列地址​

lcdWriteCommand(0x30);​

lcdWriteData(0xff);​

lcdWriteData(0xff);​

DelayM(5);​

}​

lcdWriteCommand(0x34);​

lcdWriteCommand(0x36);​

}​

/*****************************************************************************/​

void zijian(void)​

{​

lcdClear();​

dispString(1, 0, 1, " V6.5版本 ");​

dispString(2, 0, 1, " 自检程序开始! ");​

DelayM(2000);​

lcdClear();​

displayPhoto(powerOnPhoto1, OFF);​

DelayM(2000);​

lcdfill(0xff); //显示全开​

DelayM(2000); ​


显示横条​

DelayM(2000);​



显示竖条 ​

DelayM(2000);​


显示边框​

DelayM(2000);​

clear_img();​

lcdClear();​

选择8bit数据流​

开显示(无游标、不反白)​

清除显示,并且设定地址指针为00H​

确定按键音​

自检完成! ");​

dispString(2, 0, 1, " ============ ");​

dispString(3, 0, 1, " ============ ");​

DelayM(2000);​

lcdInit ();​

}​

/*****************************************************************************/​

void naozhong()​

{​

lcdClear();​

dispString(0, 2, 1, "闹钟设置");​

dispString(2, 0, 1, "闹钟");​

if(n==0) {dispString(2, 7, 1, "关");} //​

if(n==1) {dispString(2, 7, 1, "开");} //​

if(n==2) {dispString(2, 7, 1, "开");} //​

if(n==3) {dispString(2, 7, 1, "开");} //​

lcdWriteCommand(0x8b);​

lcdWriteData((n1/10)+0x30);​

lcdWriteData(n1%10+0x30);​

点");​

lcdWriteData((n2/10)+0x30);​

lcdWriteData(n2%10+0x30);​

while(1)​

{​

if (KEY_3 == 0) // 设置时间​

{​

DelayM(20); 去抖​

if(KEY_3 == 0 ) ​

{​

按键音​

n++;​

if (n >= 4 ){n = 0;}​

关");} //​

开");} //​

开");} //​

开");} //​

switch(n)​

{​

case 0: convertChar(1, 0, 0);​

break;​

case 1: convertChar(1, 0, 0);​

break;​

case 2: convertChar(2, 3, 2);​

break;​

case 3: convertChar(2, 5, 2);​

break;​

}​

等待键松开​

}​

}​

if(KEY_4 == 0||KEY_2 == 0)​

{​

if (KEY_2 == 0&&n==2) // ​

{​

DelayM(20); 去抖​

if(KEY_2 == 0 &&n==2)​

{​

Beep_key();//按键音​

n1++;​

if (n1 >= 24 ){n1 = 0;} ​

while(KEY_2 == 0);//等待键松开​

}​

}​

if (KEY_2 == 0&&n==3) // ​

{​

DelayM(20); 去抖​

if(KEY_2 == 0&&n==3 )​

{​

Beep_key();//按键音​

n2++;​

if (n2>= 60 ){n2 = 0;}​

while(KEY_2 == 0);//等待键松开​

}​

}​

if (KEY_4 == 0&&n==2) // ​

{​

DelayM(20); 去抖​

if(KEY_4 == 0 &&n==2)​

{​

Beep_key();//按键音​

n1--;​

if (n1<0 ){n1 = 23;} ​

while(KEY_4 == 0);//等待键松开​

}​

}​

if (KEY_4 == 0&&n==3) // ​

{​

DelayM(20); 去抖​

if(KEY_4 == 0&&n==3 )​

{​

Beep_key();//按键音​

n2--;​

if (n2<0 ){n2 = 59;}​

while(KEY_4 == 0);//等待键松开​

}​

}​

lcdWriteCommand(0x8b);​

lcdWriteData((n1/10)+0x30);​

lcdWriteData(n1%10+0x30);​

点");​

lcdWriteData((n2/10)+0x30);​

lcdWriteData(n2%10+0x30);​

}​

if(KEY_1 == 0 )​

{​

按键音​

k=0;​

等待键松开​

lcdInit ();​

break;​

}​

}​


}​

/*****************************************************************************/​

void naozhongdao()​

{​

hh1=hh/16*10+hh%16;​

mm1=mm/16*10+mm%16;​

if(n1==hh1 && n2==mm1 && ss==0)​

{​

选择8bit数据流​

开显示(无游标、不反白)​

清除显示,并且设定地址指针为00H​

闹钟时间到! ");​

lcdWriteCommand(0x89);​

lcdWriteData((n1/10)+0x30);​

lcdWriteData(n1%10+0x30);​

点");​

lcdWriteData((n2/10)+0x30);​

lcdWriteData(n2%10+0x30);​

分");​

lcdWriteData(0x02);​

Play(Music_wo,0,3,360);​

lcdInit ();​

}​

}​

/*****************************************************************************/​

void procKey (void)​

{​

uchar key1Times=1 ;​

lcdClear();​

dispString(0, 0, 1, " 功能菜单 ");​

dispString(1, 0, 1, "1:界面 2:设置");​

dispString(2, 0, 1, "3:闹钟 4:音乐");​

dispString(3, 0, 1, "5:自检 6:退出");​

convertChar(1, 0, 6);​

while(KEY_3 == 0);//等待键松开​

while(1)​

{​

if(KEY_4 == 0||KEY_2 == 0)​

{​

if (KEY_4 == 0) // ​

{​

DelayM(20); 去抖​

if(KEY_4 == 0 && w == 0)​

{​

Beep_key();//按键音​

while(KEY_4 == 0);//等待键松开​

key1Times--;​

if (key1Times==0 ){key1Times = 6;}​

}​

}​

if (KEY_2 == 0) // ​

{​

DelayM(20); 去抖​

if(KEY_2 == 0 && w == 0)​

{​

Beep_key();//按键音​

while(KEY_2 == 0);//等待键松开​

key1Times++;​

if (key1Times==7 ){key1Times = 1;}​

}​

}​

lcdClear();​

dispString(0, 0, 1, " 功能菜单 ");​

dispString(1, 0, 1, "1:界面 2:设置");​

dispString(2, 0, 1, "3:闹钟 4:音乐");​

dispString(3, 0, 1, "5:自检 6:退出");​

if (key1Times == 7)​

{​

key1Times = 1;​

}​


switch(key1Times)​

{​

case 1: convertChar(1, 0, 6);​

break;​

case 2: convertChar(1, 5, 6);​

break;​

case 3: convertChar(2, 0, 6);​

break;​

case 4: convertChar(2, 5, 6);​

break;​

case 5: convertChar(3, 0, 6);​

break;​

case 6: convertChar(3, 5, 6);​

break;​

}​

}​

if (KEY_3== 0) //​

{​

DelayM(20);​

if(KEY_3 == 0 )​

{ ​

确定按键音​

if (key1Times==1 ){if(k==0)k=1;else if(k==1)k=0;lcdInit ();break;}​

if (key1Times==2 ){clear_img();lcdClear();w=1;Set_time(e); k=1;break;}​

if (key1Times==3 ){lcdClear();clear_img();k=2;break;}​

if (key1Times==4 ){clear_img();lcdClear();displayPhoto(powerOnPhoto, OFF);Play(Music_wo,0,3,360);lcdInit ();break;}​

if (key1Times==5 ){zijian(); break;}​

if (key1Times==6 ){lcdInit (); break;}​


}​

} ​

}​

}​

//*****************************************************************************​


/*****************************************************************************/​

//---主程序---//​

/*****************************************************************************/​

main()​

{​

初始键盘​

yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各数据刷新​

Beep_set();//确定按键音 ​

InitialSound();​

BeepIO=1;​


Init_1302();​

lcdWriteCommand(0x30); //选择8bit数据流​

lcdWriteCommand(0x0c); //开显示(无游标、不反白)​

lcdWriteCommand(0x01); //清除显示,并且设定地址指针为00H​


lcdClear();​

dispString(0, 0, 1, "┏━━━━━━┓");​

dispString(1, 0, 1, "┃12864 LCD6.5┃");​

dispString(2, 0, 1, "┃多功能万年历┃");​

dispString(3, 0, 1, "┗━━━━━━┛");​

lcdInit ();​

c_sun=0; ​

/*****************************************************************************/​


while(1)​

{//主循环​

if(k==1){updata ();}​

if(k==0){disp_sfm();}​

if(k==2){naozhong();}​

if(n==1||n==2||n==3){naozhongdao();} ​

//------------------------------------------------------------------​


if (KEY_3 == 0) // 设置时间​

{​

DelayM(10); 去抖​

if(KEY_3 == 0 && w == 1) //当是调时状态 本键用于调整下一项​

{​

Beep_key();//按键音​

e++;​

if (e >= 7 ){e = 0;}​

Set_time(e);//调整 ​

}​

if(KEY_3 == 0 && w == 0) //当是调时状态 本键用于调整下一项​

{​

lcdClear();​

lcdWriteCommand(0x30); //选择8bit数据流​

开显示(无游标、不反白)​

清除显示,并且设定地址指针为00H​

Beep_key();//按键音​

procKey (); ​

} ​

while(KEY_3 == 0);//等待键松开​

}​

//------------------------------------------------------------------​

if (KEY_1 == 0&& w == 1) // 当在调时状态时就退出调时​

{​

DelayM(20);​

if(KEY_1 == 0 && w == 1)​

{ ​

确定按键音​

w = 0; 退出调时​

e = 0; //“下一项”计数器清0​

convertChar(0, 0, 0); ​

}​

等待键松开​

}​

//------------------------------------------------------------------​

if (KEY_2 == 0 && w == 1) // 加减调整​

{ ​

DelayM(5);​

if(KEY_2 == 0 && w == 1)​

{ ​

调整​

按键音​

}​

等待键松开​

}​

//------------------------------------------------------------------​

if (KEY_4 == 0 && w == 1)// 加减调整​

{ ​

DelayM(5);​

if(KEY_4 == 0 && w == 1)​

{ ​

调整​

按键音​

}​

等待键松开​

}​

}​

} ​


标签:dispString,IoT,0x00,电子,lcdWriteData,0x78,0x87,0xFF,时钟
From: https://blog.51cto.com/u_15284384/6090815

相关文章

  • 漫谈丨集团企业的电子档案怎么管?
    今天聊聊集团企业电子档案建设的话题,根据这么多年的项目实践经验,可以从以下4个角度解决。一般情况下,集团企业档案电子化是由集团本部顶层设计,下属产业集团企业试点执行,数据......
  • 北京博奥智源,发布电子班牌系统设计思路
    在原有电子班牌系统一期(包含统一班级风采展示、统一校园文化展示、班牌应用模式、班牌主题、人脸识别应用等功能)基础上,进行系统扩展,配置测温功能应用和新增电子班牌硬件:1.......
  • 时钟系统,MSP430单片机的时钟系统
    MSP430依据类型的不同最多能够挑选运用3个振动器。我们能够依据需求挑选合适的振动频率,并能够在不需求时随时关闭振动器,以节约功耗。这3个振动器分别为:(1)DCO数控RC振动器......
  • Turtlebot4入门教程-电子-功率预算
    说明:介绍Turtlebot4的功率相关设备:Turtlebot4机器人套件:​​采购地址​​功率Create3输出电源适配器提供的总功率为28.8W。这提供了与RaspberryPi配对的USB-C连接......
  • 上海有电子导游证可以带团吗?
    根据最新政策,全国导游证年审已经取消!全国大部分地区导游证不需要再年审了。但是,不排除部分地区还是有以导游培训的名义组织年审,所以,请以当地旅游局或导游协会的通知为准!针对......
  • [oeasy]python0093_电子游戏起源_视频游戏_达特茅斯_Basic_家酿俱乐部
    编码进化回忆上次内容EdRobert的创业之路从售卖diy组装配件到进军计算器市场最后发布牛郎星8800intel8080的出现让人人都有自己的个人电脑BillGate和Pau......
  • [oeasy]python0093_电子游戏起源_视频游戏_达特茅斯_Basic_家酿俱乐部
    编码进化回忆上次内容EdRobert的创业之路从售卖diy组装配件到进军计算器市场最后发布牛郎星8800intel8080的出现让人人都有自己的个人电脑......
  • 20201217王菁-电子书阅读
    微信读书优势、特点阐述    使用微信读书已经好久,看过的书也有许多本。不得不说,我认为微信读书最大的好处就是——少了很多买书钱。纸质书好贵。。    真心觉得......
  • 中国电子|迈普:信创之上,鸿翼助力央企研发及数据安全管理
    编者按:数据安全,没有一次两次,只有零次和无数次;数据赋能,没有有效无效,只有利用和不利用。当数据已经成为企业竞争的核心资产,我们要像经营资本一样来“经营数据”,央企如此,其它也......
  • 前端实现电子签名(web、移动端)通用组件
    前言在现在的时代发展中,从以前的手写签名,逐渐衍生出了电子签名。电子签名和纸质手写签名一样具有法律效应。电子签名目前主要还是在需要个人确认的产品环节和司法类相关的......