小弟最近从网上找到个16*16点陈移动数字钟,想自已制作一个,不知怎样修改才可以显示为自已的姓名.请大家指点下
#include "reg51.h"
#include "intrins.h"
typedef unsigned char uint8;
typedef unsigned int uint16;
#define LED_Y P2
#define LCD_DATA 1
#define LCD_COMMAND 0
#define WORDNUU 11
sbit Ser_STB=P2^5;
sbit LED_EN=P2^4;
sbit LCD_RS=P1^5;
sbit LCD_RW=P1^6;
sbit LCD_EN=P1^7;
sbit RTC_SDA=P3^6;
sbit RTC_SCL=P3^5;
sbit RTC_RST=P3^4;
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
sbit KEY4=P1^3;
sbit DQ=P1^4;
uint8 TEMP_ERR;
#define LCD_PORT P0
uint8 WORDNUM,WORDNUMBER;
uint8 Temp_Value;
uint8 LCD_NO;
uint16 i1,i2;
uint8 bdata AA;
sbit AA7 = AA^7;
#define READ_SECOND 0x81
#define WRITE_SECOND 0x80
#define READ_MINE 0x83
#define WRITE_MINE 0x82
#define READ_HOUR 0x85
#define WRITE_HOUR 0x84
#define READ_DAY 0x87
#define WRITE_DAY 0x86
#define READ_MONTH 0x89
#define WRITE_MONTH 0x88
#define READ_WEEK 0x8b
#define WRITE_WEEK 0x8a
#define READ_YEAR 0x8d
#define WRITE_YEAR 0x8c
uint8 DATE[16];
uint8 TIME[16];
uint8 const code HZ[][32]=
{
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1*/
{0xFD,0xFF,0xFE,0xFF,0x80,0x01,0xBE,0xFB,0x7E,0xF7,0xFE,0xFF,0x80,0x03,0xFC,0x7F,0xFA,0x7F,0xFA,0xBF,0xF6,0xDF,0xEE,0xEF,0xDE,0xF1,0xBE,0xFB,0xFE,0xFF,0xFF,0xFF},/*"宋",0*/
{0xDF,0xFF,0xEE,0xEF,0xEE,0xEF,0x76,0xEF,0xB4,0x03,0xAE,0xEF,0xEE,0xEF,0xEE,0xEF,0xDE,0xEF,0xD0,0x01,0x1E,0xDF,0xDE,0xEF,0xDD,0xF7,0xDD,0xF3,0xDB,0xFB,0xD7,0xFB},/*"洪",1*/
{0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBB,0xBB,0xB9,0xDB,0xB3,0xDB,0xB7,0xEB,0xAF,0xE3,0xAF,0xEB,0x9F,0xFB,0xBF,0xFB,0xBF,0xFB,0xBB,0x00,0x01,0xFF,0xFF,0xFF,0xFF},/*"业",2*/
{0xEF,0xFF,0xEE,0x07,0xEE,0xF7,0x02,0x07,0xEE,0xF7,0xEE,0x07,0xE7,0xFF,0xC8,0x03,0xAF,0xBF,0x6D,0xBF,0xED,0x83,0xED,0xBF,0xE9,0xBF,0xEA,0x3F,0xA7,0x81,0xDF,0xFF},/*"提",3*/
{0xFF,0xFF,0x01,0x03,0xD7,0x7B,0xD7,0x03,0x01,0x7B,0x55,0x03,0x55,0xDF,0x55,0x5F,0x51,0x03,0x3C,0xDF,0x01,0xDF,0x7D,0x03,0x7D,0xDF,0x01,0xDF,0x7E,0x01,0xFF,0xFF},/*"醒",4*/
{0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFD,0x7F,0xFD,0x7F,0xFD,0xBF,0xFB,0xBF,0xFB,0xDF,0xF7,0xEF,0xEF,0xE7,0xDF,0xF1,0xBF,0xFB},/*"大",5*/
{0xFD,0xFF,0xFE,0xFF,0xC0,0x01,0xBF,0xFB,0xA0,0x17,0xFE,0xFF,0xFD,0xFF,0xF0,0xDF,0x8D,0x4F,0xFB,0x3F,0xE6,0x3F,0x99,0x4F,0xE7,0x71,0x9F,0x7B,0xFA,0xFF,0xFD,0xFF},/*"家",6*/
{0xFF,0xFF,0x00,0x07,0xED,0xF7,0xED,0xB7,0xED,0xB7,0xED,0xB7,0x81,0xB7,0xED,0xB7,0xED,0xB7,0xED,0x57,0xE3,0x5F,0x1E,0xDD,0xFE,0xDD,0xFD,0xDD,0xFB,0xE1,0xF7,0xFF},/*"现",7*/
{0xFD,0xFF,0xFD,0xFF,0x80,0x01,0xFB,0xFF,0xFB,0xFF,0xF7,0xBF,0xE7,0xBF,0xE8,0x03,0xCF,0xBF,0xAF,0xBF,0x6F,0xBF,0xEF,0xBF,0xEF,0xBF,0xE8,0x01,0xEF,0xFF,0xFF,0xFF},/*"在",8*/
{0xFF,0xFF,0xF0,0x0F,0xF7,0xEF,0xF0,0x0F,0xF7,0xEF,0xF0,0x0F,0xFF,0xFF,0x00,0x01,0xFE,0xFF,0xF6,0xFF,0xF6,0x07,0xF6,0xFF,0xEA,0xFF,0xDC,0xFF,0xBF,0x01,0xFF,0xFF},/*"是",9*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1*/
0x55,0xaa,
};
uint8 const code NUM[][16]=
{
{0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF},/*"0",0*/
{0xFF,0xFF,0xFF,0xEF,0x8F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0x83,0xFF,0xFF},/*"1",1*/
{0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xFB,0xFB,0xF7,0xEF,0xDF,0xBD,0x81,0xFF,0xFF},/*"2",2*/
{0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xFB,0xE7,0xFB,0xFD,0xFD,0xBD,0xBB,0xC7,0xFF,0xFF},/*"3",3*/
{0xFF,0xFF,0xFF,0xFB,0xF3,0xEB,0xDB,0xDB,0xBB,0xBB,0x81,0xFB,0xFB,0xE1,0xFF,0xFF},/*"4",4*/
{0xFF,0xFF,0xFF,0x81,0xBF,0xBF,0xBF,0xA7,0x9B,0xFD,0xFD,0xBD,0xBB,0xC7,0xFF,0xFF},/*"5",5*/
{0xFF,0xFF,0xFF,0xE3,0xDB,0xBF,0xBF,0xA7,0x9B,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF},/*"6",6*/
{0xFF,0xFF,0xFF,0x81,0xBB,0xBB,0xF7,0xF7,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF},/*"7",7*/
{0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF},/*"8",8*/
{0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xD9,0xE5,0xFD,0xFD,0xDB,0xC7,0xFF,0xFF},/*"9",9*/
};
uint8 const code DATETMP[][32]=
{
{0xF7,0xFF,0xF0,0x03,0xEF,0x7F,0xEF,0x7F,0xDF,0x7F,0xB0,0x07,0x77,0x7F,0xF7,0x7F,0xF7,0x7F,0xF7,0x7F,0x00,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F},/*"年",0*/
{0xF8,0x0F,0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,0xF8,0x0F,0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,0xF8,0x0F,0xFB,0xEF,0xF7,0xEF,0xF7,0xEF,0xEF,0xEF,0xDF,0xAF,0xBF,0xDF,0xFF,0xFF},/*"月",1*/
{0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,0xFF,0xFF,0xFF,0xFF},/*"日",2*/
{0xFE,0xFF,0xFE,0xFF,0xFE,0x07,0xFE,0xFF,0xFE,0xEF,0xE0,0x07,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,0xFE,0xEF,0xD7,0x77,0xDB,0xBB,0xBB,0xBB,0xFF,0xFF},/*"点",3*/
{0xF7,0x7F,0xF3,0x7F,0xF7,0xBF,0xEF,0xDF,0xEF,0xCF,0xDF,0xE7,0xBF,0xF1,0x60,0x1B,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xF7,0xDF,0xEF,0x5F,0xDF,0xBF,0xBF,0xFF},/*"分",4*/
{0xFF,0xFF,0xE0,0x07,0xEF,0xF7,0xE0,0x07,0xEF,0xF7,0xE0,0x07,0xFE,0xFF,0xEE,0xFF,0xE0,0x03,0xDE,0xFF,0xDE,0xFF,0xB0,0x07,0xFE,0xFF,0xFE,0xFF,0x80,0x01,0xFF,0xFF},/*"星",5*/
{0xDD,0xFF,0xDD,0x83,0x80,0xBB,0xDD,0xBB,0xC1,0xBB,0xDD,0x83,0xC1,0xBB,0xDD,0xBB,0xDD,0xBB,0x00,0x83,0xFF,0xBB,0xDB,0x7B,0xDD,0x7B,0xBC,0xEB,0x7E,0xF7,0xFF,0xFF},/*"期",6*/
{0xE0,0x07,0xFE,0xFF,0x80,0x01,0xBE,0xFB,0xE2,0x8F,0xFE,0xFF,0xE2,0x8F,0xFD,0x7F,0xFB,0x9F,0xE5,0xE1,0x1E,0xF7,0xE0,0x1F,0xFF,0xBF,0xFD,0x7F,0xFE,0xFF,0xFE,0xFF},/*"零",7*/
{0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0x07,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFB,0x80,0x01,0xFF,0xFF},/*"上",8*/
{0xD8,0x03,0xDE,0xEF,0xDE,0x0F,0x06,0xEF,0xDE,0x0F,0xD6,0xE3,0xC8,0x0F,0x9F,0xEF,0x50,0x41,0xDB,0x5D,0xDC,0xEB,0xDE,0xF7,0xDD,0x67,0xDB,0x99,0x56,0x7B,0xBF,0xFF},/*"摄",9*/
{0xFF,0xFF,0xFF,0x07,0xC0,0xFF,0xDE,0xFF,0xDE,0xFF,0xDE,0xFF,0xC0,0x03,0xDF,0x7F,0xDF,0x7F,0xDF,0x7F,0xDF,0xBF,0xDF,0xBF,0xDB,0xDB,0xD7,0xEB,0xCF,0xF3,0xDF,0xFB},/*"氏",10*/
{0xFE,0xFF,0xFF,0x7F,0xC0,0x01,0xDD,0xDF,0xDD,0xDF,0xD0,0x03,0xDD,0xDF,0xDC,0x1F,0xDF,0xFF,0xD8,0x07,0xDD,0xEF,0xDE,0xDF,0xDF,0x3F,0xBE,0xCF,0xB9,0xF1,0x67,0xFB},/*"度",11*/
} ;
uint8 const code WEEK[][32]=
{
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*"一",0*/
{0xFF,0xFF,0xFF,0xEF,0xC0,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*"二",1*/
{0xFF,0xFF,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xFF,0xFF},/*"三",2*/
{0xFF,0xFF,0x80,0x03,0xBB,0x7B,0xBB,0x7B,0xBB,0x7B,0xBB,0x7B,0xBB,0x7B,0xBB,0x7B,0xB7,0x7B,0xB7,0x83,0xAF,0xFB,0x9F,0xFB,0xBF,0xFB,0x80,0x03,0xBF,0xFB,0xFF,0xFF},/*"四",3*/
{0xFF,0xFF,0x80,0x07,0xFD,0xFF,0xFD,0xFF,0xFD,0xFF,0xFD,0xFF,0xFD,0xDF,0xC0,0x0F,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xDB,0x00,0x01,0xFF,0xFF,0xFF,0xFF},/*"五",4*/
{0xFB,0xFF,0xFC,0xFF,0xFE,0x7F,0xFE,0xFF,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFB,0x7F,0xF9,0xBF,0xFB,0xDF,0xF7,0xEF,0xF7,0xE7,0xEF,0xF3,0xDF,0xF3,0xBF,0xF7,0xFF,0xFF},/*"六",5*/
{0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,0xFF,0xFF,0xFF,0xFF},/*"日",6*/
};
void TEMP_Delay(uint16 i)
{
while(i--);
}
void TEMP_INITIALIZE()
{
DQ=1;
TEMP_Delay(8);
DQ=0;
TEMP_Delay(80);
DQ=1;
TEMP_Delay(14);
TEMP_ERR=DQ;
TEMP_Delay(20);
}
uint8 TEMP_Read_Char()
{
uint8 i;
uint8 dat;
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
TEMP_Delay(4);
}
return dat;
}
void TEMP_Write_Char(uint8 dat)
{
uint8 i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
TEMP_Delay(5);
DQ=1;
dat>>=1;
}
}
void TEMP_Read()
{
uint8 a,b;
TEMP_INITIALIZE();
TEMP_Write_Char(0xcc);
TEMP_Write_Char(0x44);
TEMP_Delay(100);
TEMP_INITIALIZE();
TEMP_Write_Char(0xcc);
TEMP_Write_Char(0xbe);
TEMP_Delay(100);
a=TEMP_Read_Char();
b=TEMP_Read_Char();
Temp_Value=b<<4;
Temp_Value+=(a&0xf0)>>4;
}
void RTC_Write(uint8 dat)
{
uint8 i;
for(i=0;i<8;i++)
{
RTC_SDA=(bit)(dat&0x01);
RTC_SCL=1;
RTC_SCL=0;
dat>>=1;
}
}
uint8 RTC_Read()
{
uint8 i;
for(i=0; i<8; i++)
{
AA >>=1; //相当于汇编中的 RRC
AA7 = RTC_SDA;
RTC_SCL = 1;
RTC_SCL = 0;
}
return AA;
}
void RTC_Write_Byte(uint8 addr,uint8 dat)
{
RTC_RST=0;
RTC_SCL=0;
RTC_RST=1;
RTC_Write(addr);
RTC_Write(dat);
RTC_SCL=1;
RTC_RST=0;
}
uint8 RTC_Read_Byte(uint8 addr)
{
uint8 dat;
RTC_RST=0;
RTC_SCL=0;
RTC_RST=1;
RTC_Write(addr|0x01);
dat=RTC_Read();
RTC_SCL=1;
RTC_RST=0;
return dat;
}
typedef struct __SYSTEMTIME__
{
uint8 Second;
uint8 Mine;
uint8 Hour;
uint8 Day;
uint8 Month;
uint8 Week;
uint8 Year;
}SYSTEMTIME;
static SYSTEMTIME TIMETYPE;
void CurrentTime(SYSTEMTIME *dat)
{
uint8 TimeValue;
TimeValue=RTC_Read_Byte(READ_SECOND);
dat->Second=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
TimeValue=RTC_Read_Byte(READ_MINE);
dat->Mine= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
TimeValue=RTC_Read_Byte(READ_HOUR);
dat->Hour= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
TimeValue=RTC_Read_Byte(READ_DAY);
dat->Day= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
TimeValue=RTC_Read_Byte(READ_MONTH);
dat->Month= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
TimeValue=RTC_Read_Byte(READ_WEEK);
dat->Week= (TimeValue&0x0f);
TimeValue=RTC_Read_Byte(READ_YEAR);
dat->Year= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
}
bit LCD_BUSY()
{
bit result;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
_nop_();
_nop_();
result=(bit)(LCD_PORT&0x80);
LCD_EN=0;
return result;
}
void LCD_Write(uint8 dat,uint8 type)
{
uint8 i;
while((LCD_BUSY()&&i<100)){i++;}
if(i>99)LCD_NO=1;
LCD_RS=type;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_PORT=dat;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=0;
}
void LCD_INITIALIZE()
{
LCD_Write(0x06,LCD_COMMAND);
LCD_Write(0x38,LCD_COMMAND);
LCD_Write(0x0c,LCD_COMMAND);
LCD_Write(0x01,LCD_COMMAND);
}
void LCD_Prints(uint8 *dat,uint8 add)
{
LCD_Write(add|0x80,LCD_COMMAND);
while(*dat!=' ')LCD_Write((*(dat++)),LCD_DATA);
}
void et0() interrupt 1 using 0
{
static uint8 i;
TH0=0xf3;
TL0=0xf3;
TR0=1;
i++;
if(i==22)
{
i=0;
WORDNUMBER++;
}
}
void KEY_Delay()
{
uint8 i,j;
for(i=0;i<200;i++)
for(j=0;j<200;j++);
}
void SET_YEAR()
{
uint8 YEAR[3];
LCD_Prints(" YEAR SETTING ",0);
LCD_Prints(" YEAR:20 ",0x40);
if((!KEY3)&&(TIMETYPE.Year<80)){KEY_Delay();i1=i2=0;TIMETYPE.Year++;}
else if(TIMETYPE.Year>79)TIMETYPE.Year=0;
if((!KEY4)&&(TIMETYPE.Year>0)){KEY_Delay();i1=i2=0;TIMETYPE.Year--;}
YEAR[0]=(TIMETYPE.Year/10)+'0';
YEAR[1]=(TIMETYPE.Year%10)+'0';
YEAR[2]=' ';
LCD_Prints(YEAR,0x49);
}
void SET_MONTH()
{
uint8 MONTH[3];
LCD_Prints(" MONTH SETTING ",0);
LCD_Prints(" MONTH: ",0x40);
if((!KEY3)&&(TIMETYPE.Month<13)){KEY_Delay();TIMETYPE.Month++;i1=i2=0;}
else if(TIMETYPE.Month>12)TIMETYPE.Month=1;
if((!KEY4)&&(TIMETYPE.Month>1)){KEY_Delay();TIMETYPE.Month--;i1=i2=0;}
MONTH[0]=(TIMETYPE.Month/10)+'0';
MONTH[1]=(TIMETYPE.Month%10)+'0';
MONTH[2]=' ';
LCD_Prints(MONTH,0x48);
}
void SET_DAY()
{
uint8 DAY[3];
LCD_Prints(" DAY SETTING ",0);
LCD_Prints(" DAY: ",0x40);
if((!KEY3)&&(TIMETYPE.Day<32)){KEY_Delay();TIMETYPE.Day++;i1=i2=0;}
else if(TIMETYPE.Day>31)TIMETYPE.Day=1;
if((!KEY4)&&(TIMETYPE.Day>1)){KEY_Delay();TIMETYPE.Day--;i1=i2=0;}
DAY[0]=(TIMETYPE.Day/10)+'0';
DAY[1]=(TIMETYPE.Day%10)+'0';
DAY[2]=' ';
LCD_Prints(DAY,0x46);
}
void SET_WEEK()
{
uint8 WEEK[2];
LCD_Prints(" WEEK SETTING ",0);
LCD_Prints(" WEEK: ",0x40);
if((!KEY3)&&(TIMETYPE.Week<8)){KEY_Delay();TIMETYPE.Week++;i1=i2=0;}
else if(TIMETYPE.Week>7)TIMETYPE.Week=1;
if((!KEY4)&&(TIMETYPE.Week>1)){KEY_Delay();TIMETYPE.Week--;i1=i2=0;}
WEEK[0]=TIMETYPE.Week+'0';
WEEK[1]=' ';
LCD_Prints(WEEK,0x47);
}
void SET_HOUR()
{
uint8 HOUR[3];
LCD_Prints(" HOUR SETTING ",0);
LCD_Prints(" HOUR: ",0x40);
if((!KEY3)&&(TIMETYPE.Hour<24)){KEY_Delay();TIMETYPE.Hour++;i1=i2=0;}
else if(TIMETYPE.Hour>23)TIMETYPE.Hour=0;
if((!KEY4)&&(TIMETYPE.Hour>0)){KEY_Delay();TIMETYPE.Hour--;i1=i2=0;}
HOUR[0]=(TIMETYPE.Hour/10)+'0';
HOUR[1]=(TIMETYPE.Hour%10)+'0';
HOUR[2]=' ';
LCD_Prints(HOUR,0x47);
}
void SET_MINE()
{
uint8 MINE[3];
LCD_Prints(" MINE SETTING ",0);
LCD_Prints(" MINE: ",0x40);
if((!KEY3)&&(TIMETYPE.Mine<60)){KEY_Delay();TIMETYPE.Mine++;i1=i2=0;}
else if(TIMETYPE.Mine>59)TIMETYPE.Mine=0;
if((!KEY4)&&(TIMETYPE.Mine>0)){KEY_Delay();TIMETYPE.Mine--;i1=i2=0;}
MINE[0]=(TIMETYPE.Mine/10)+'0';
MINE[1]=(TIMETYPE.Mine%10)+'0';
MINE[2]=' ';
LCD_Prints(MINE,0x47);
}
void SET_SECOND()
{
uint8 SECOND[3];
LCD_Prints(" SECOND SETTING ",0);
LCD_Prints(" SECOND: ",0x40);
if((!KEY3)&&(TIMETYPE.Second<60)){KEY_Delay();TIMETYPE.Second++;i1=i2=0;}
else if(TIMETYPE.Second>59)TIMETYPE.Second=0;
if((!KEY4)&&(TIMETYPE.Second>0)){KEY_Delay();TIMETYPE.Second--;i1=i2=0;}
SECOND[0]=(TIMETYPE.Second/10)+'0';
SECOND[1]=(TIMETYPE.Second%10)+'0';
SECOND[2]=' ';
LCD_Prints(SECOND,0x48);
}
void Write_Time()
{
uint8 year,month,day,hour,mine,second,week;
year=((TIMETYPE.Year/10)<<4)|(TIMETYPE.Year%10);
month=((TIMETYPE.Month/10)<<4)|(TIMETYPE.Month%10);
day=((TIMETYPE.Day/10)<<4)|(TIMETYPE.Day%10);
week=TIMETYPE.Week;
hour=((TIMETYPE.Hour/10)<<4)|(TIMETYPE.Hour%10);
mine=((TIMETYPE.Mine/10)<<4)|(TIMETYPE.Mine%10);
second=((TIMETYPE.Second/10)<<4)|(TIMETYPE.Second%10);
RTC_Write_Byte(0x8e,0x00); //写入允许
RTC_Write_Byte(0x80,WRITE_SECOND|0x80);
RTC_Write_Byte(0x8e,0x80); //禁止写入
RTC_Write_Byte(0x8e,0x00); //写入允许
RTC_Write_Byte(WRITE_YEAR,year); //写入新的秒数
RTC_Write_Byte(WRITE_MONTH,month); //写入新的秒数
RTC_Write_Byte(WRITE_DAY,day); //写入新的秒数
RTC_Write_Byte(WRITE_HOUR,hour); //写入新的秒数
RTC_Write_Byte(WRITE_MINE,mine&0x7f); //写入新的秒数
RTC_Write_Byte(WRITE_WEEK,week); //写入新的秒数
RTC_Write_Byte(WRITE_SECOND,second);
RTC_Write_Byte(0x8e,0x00); //写入允许
RTC_Write_Byte(0x8E,0x80);
}
void SET_TIME()
{
uint8 i;
CurrentTime(&TIMETYPE);
while(1)
{
switch(i)
{
case 0:SET_YEAR();break;
case 1:SET_MONTH();break;
case 2:SET_DAY(); break;
case 3:SET_WEEK();break;
case 4:SET_HOUR();break;
case 5:SET_MINE();break;
case 6:SET_SECOND();break;
}
if(!KEY2){i++;KEY_Delay();i1=i2=0;}
if(i==7){i=0;Write_Time();break;}
i1++;
if(i1==10){i2++;i1=0;}
if(i2==100){i=0;Write_Time();break;}
}
}
void TIMESETTING()
{
if(!KEY1){LED_EN=1;SET_TIME();}
WORDNUMBER=0;
WORDNUM=0;
}
void LED_Ser(uint8 dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
void LED_Delay()
{
uint8 i,j;
for(i=0;i<11;i++)
for(j=0;j<16;j++);
}
void SET_STB()
{
Ser_STB=0;
Ser_STB=1;
}
void Disp_LED(uint8 *dat)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat[i+1]|(uint16)(dat<<8));
tmp2=(dat[i+33]|(uint16)(dat[i+32]<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
if(tmp2==0x55aa)WORDNUM=0;
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void Disp_LED1(uint8 *dat,uint8 *dat1)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat[i+1]|(uint16)(dat<<8));
tmp2=(dat1[i+1]|(uint16)(dat1<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void Disp_Str_LED2(uint8 *dat,uint8 *dat1,uint8 *dat2)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat1[i/2]|(uint16)(dat[i/2]<<8));
tmp2=(dat2[i+1]|(uint16)(dat2<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void Disp_Str_LED4(uint8 *dat,uint8 *dat1,uint8 *dat2,uint8 *dat3)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat1[i/2]|(uint16)(dat[i/2]<<8));
tmp2=(dat3[i/2]|(uint16)(dat2[i/2]<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void Disp_Str_LED_HZ(uint8 *dat,uint8 *dat1,uint8 *dat2)
{
uint8 i;
uint16 tmp,tmp1,tmp2;
LED_EN=0;
LED_Y=0x01|0xf0;
if(WORDNUMBER==16)
{
WORDNUMBER=0;
WORDNUM++;
}
for(i=0;i<32;i+=2)
{
if((!KEY1)&&(!LCD_NO))TIMESETTING();
tmp1=(dat[i+1]|(uint16)(dat<<8));
tmp2=(dat2[i/2]|(uint16)(dat1[i/2]<<8));
tmp=((tmp1<<WORDNUMBER)|tmp2>>(16-WORDNUMBER));
LED_EN=0;
LED_Ser((uint8)(tmp));
LED_Ser((uint8)(tmp>>8));
SET_STB();
LED_Y=0x0f&(i/2);
LED_Delay();
LED_EN=1;
}
}
void LCD_DISP()
{
DATE[0]='2';
DATE[1]='0';
DATE[4]='/';
DATE[7]='/';
DATE[10]='W';
DATE[11]='e';
DATE[12]='e';
DATE[13]='k';
DATE[14]=':';
DATE[16]=' ';
TIME[2]=':';
TIME[5]=' ';
TIME[6]='T';
TIME[7]='e';
TIME[8]='m';
TIME[9]='p';
TIME[10]=':';
TIME[13]=0xdf;
TIME[14]='C';
TIME[15]=' ';
TIME[16]=' ';
}
void LCD_Disp_Time()
{
DATE[2]=TIMETYPE.Year/10+'0';
DATE[3]=TIMETYPE.Year%10+'0';
DATE[5]=TIMETYPE.Month/10+'0';
DATE[6]=TIMETYPE.Month%10+'0';
DATE[8]=TIMETYPE.Day/10+'0';
DATE[9]=TIMETYPE.Day%10+'0';
DATE[15]=TIMETYPE.Week+'0';
TIME[0]=TIMETYPE.Hour/10+'0';
TIME[1]=TIMETYPE.Hour%10+'0';
TIME[3]=TIMETYPE.Mine/10+'0';
TIME[4]=TIMETYPE.Mine%10+'0';
TIME[11]=Temp_Value/10+'0';
TIME[12]=Temp_Value%10+'0';
if(TEMP_ERR)
{
Temp_Value=0;
TIME[11]='E';
TIME[12]='R';
TIME[13]='R';
TIME[14]='0';
TIME[15]='R';
}
else
{
TIME[13]=0xdf;
TIME[14]='C';
TIME[15]=' ';
}
LCD_Prints(DATE,0);
LCD_Prints(TIME,0x40);
}
void main()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
TR0=1;
ET0=1;
SCON=0;
LCD_INITIALIZE();
TEMP_INITIALIZE();
LCD_DISP();
while(1)
{
switch(WORDNUM)
{
case WORDNUU+0:Disp_Str_LED_HZ(&HZ[WORDNUU],&NUM[2],&NUM[0]);break;
case WORDNUU+1:Disp_Str_LED4(&NUM[2],&NUM[0],&NUM[TIMETYPE.Year/10],&NUM[TIMETYPE.Year%10]);break;
case WORDNUU+2:Disp_Str_LED2(&NUM[TIMETYPE.Year/10],&NUM[TIMETYPE.Year%10],&DATETMP[0]);break;
case WORDNUU+3:Disp_Str_LED_HZ(&DATETMP[0],&NUM[TIMETYPE.Month/10],&NUM[TIMETYPE.Month%10]);break;
case WORDNUU+4:Disp_Str_LED2(&NUM[TIMETYPE.Month/10],&NUM[TIMETYPE.Month%10],&DATETMP[1]);break;
case WORDNUU+5:Disp_Str_LED_HZ(&DATETMP[1],&NUM[TIMETYPE.Day/10],&NUM[TIMETYPE.Day%10]);break;
case WORDNUU+6:Disp_Str_LED2(&NUM[TIMETYPE.Day/10],&NUM[TIMETYPE.Day%10],&DATETMP[2]);break;
case WORDNUU+7:Disp_LED1(&DATETMP[2],&DATETMP[5]);break;
case WORDNUU+8:Disp_LED1(&DATETMP[5],&DATETMP[6]);break;
case WORDNUU+9:Disp_LED1(&DATETMP[6],&WEEK[TIMETYPE.Week-1]);break;
case WORDNUU+10:Disp_Str_LED_HZ(&WEEK[TIMETYPE.Week-1],&NUM[TIMETYPE.Hour/10],&NUM[TIMETYPE.Hour%10]);break;
case WORDNUU+11:Disp_Str_LED2(&NUM[TIMETYPE.Hour/10],&NUM[TIMETYPE.Hour%10],&DATETMP[3]);break;
case WORDNUU+12:Disp_Str_LED_HZ(&DATETMP[3],&NUM[TIMETYPE.Mine/10],&NUM[TIMETYPE.Mine%10]);break;
case WORDNUU+13:Disp_Str_LED2(&NUM[TIMETYPE.Mine/10],&NUM[TIMETYPE.Mine%10],&DATETMP[4]);break;
case WORDNUU+14:Disp_LED1(&DATETMP[4],&DATETMP[7]);break;
case WORDNUU+15:Disp_LED1(&DATETMP[7],&DATETMP[8]);break;
case WORDNUU+16:Disp_Str_LED_HZ(&DATETMP[8],&NUM[Temp_Value/10],&NUM[Temp_Value%10]);break;
case WORDNUU+17:Disp_Str_LED2(&NUM[Temp_Value/10],&NUM[Temp_Value%10],&DATETMP[9]);break;
case WORDNUU+18:Disp_LED1(&DATETMP[9],&DATETMP[10]);break;
case WORDNUU+19:Disp_LED1(&DATETMP[10],&DATETMP[11]);break;
case WORDNUU+20:Disp_LED1(&DATETMP[11],&HZ[0]);break;
case WORDNUU+21:WORDNUM=0;WORDNUMBER=0;break;
default:Disp_LED(&HZ[WORDNUM]);
}
if(WORDNUMBER==16)
{
TEMP_Read();
CurrentTime(&TIMETYPE);
LCD_Disp_Time();
}
}
}
我也不会C,程序也看不懂。但LZ也只要求修改一下,能显示自己的姓名
所以其它的我都视而不见了
一周热门 更多>