nidy 发表于 2009-12-12 15:27:35

16X16点阵数字钟问题

小弟最近从网上找到个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;
#defineLCD_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;
uint8 TIME;

uint8 const code HZ[]=
{
        {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[]=
{
        {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[]=
{
        {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[]=
{
        {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__
{
        uint8Second;
        uint8Mine;
        uint8Hour;
        uint8Day;
        uint8Month;
        uint8Week;
        uint8Year;
}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!='\0')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;
        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=(TIMETYPE.Year/10)+'0';
        YEAR=(TIMETYPE.Year%10)+'0';
        YEAR='\0';
        LCD_Prints(YEAR,0x49);
}                       
void SET_MONTH()
{
        uint8 MONTH;
        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=(TIMETYPE.Month/10)+'0';
        MONTH=(TIMETYPE.Month%10)+'0';
        MONTH='\0';
        LCD_Prints(MONTH,0x48);
}
void SET_DAY()
{
        uint8 DAY;
        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=(TIMETYPE.Day/10)+'0';
        DAY=(TIMETYPE.Day%10)+'0';
        DAY='\0';
        LCD_Prints(DAY,0x46);
}
void SET_WEEK()
{
        uint8 WEEK;
        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=TIMETYPE.Week+'0';
        WEEK='\0';
        LCD_Prints(WEEK,0x47);
}
void SET_HOUR()
{
        uint8 HOUR;
        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=(TIMETYPE.Hour/10)+'0';
        HOUR=(TIMETYPE.Hour%10)+'0';
        HOUR='\0';
        LCD_Prints(HOUR,0x47);
}
void SET_MINE()
{
        uint8 MINE;
        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=(TIMETYPE.Mine/10)+'0';
        MINE=(TIMETYPE.Mine%10)+'0';
        MINE='\0';
        LCD_Prints(MINE,0x47);
}
void SET_SECOND()
{
        uint8 SECOND;
        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=(TIMETYPE.Second/10)+'0';
        SECOND=(TIMETYPE.Second%10)+'0';
        SECOND='\0';
        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|(uint16)(dat<<8));
                tmp2=(dat|(uint16)(dat<<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|(uint16)(dat<<8));
                tmp2=(dat1|(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|(uint16)(dat<<8));
                tmp2=(dat2|(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|(uint16)(dat<<8));
                tmp2=(dat3|(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_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|(uint16)(dat<<8));
                tmp2=(dat2|(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 LCD_DISP()
{
        DATE='2';
        DATE='0';
        DATE='/';
        DATE='/';
        DATE='W';
        DATE='e';
        DATE='e';
        DATE='k';
        DATE=':';
        DATE='\0';
        TIME=':';
        TIME=' ';
        TIME='T';
        TIME='e';
        TIME='m';
        TIME='p';
        TIME=':';
        TIME=0xdf;
        TIME='C';
        TIME=' ';
        TIME='\0';
}



void LCD_Disp_Time()
{
        DATE=TIMETYPE.Year/10+'0';
        DATE=TIMETYPE.Year%10+'0';
        DATE=TIMETYPE.Month/10+'0';
        DATE=TIMETYPE.Month%10+'0';
        DATE=TIMETYPE.Day/10+'0';
        DATE=TIMETYPE.Day%10+'0';
        DATE=TIMETYPE.Week+'0';
        TIME=TIMETYPE.Hour/10+'0';
        TIME=TIMETYPE.Hour%10+'0';
        TIME=TIMETYPE.Mine/10+'0';
        TIME=TIMETYPE.Mine%10+'0';
        TIME=Temp_Value/10+'0';
        TIME=Temp_Value%10+'0';
        if(TEMP_ERR)
        {
                Temp_Value=0;
                TIME='E';
                TIME='R';
                TIME='R';
                TIME='0';
                TIME='R';
        }
        else
        {
                TIME=0xdf;
                TIME='C';
                TIME=' ';
        }
        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,&NUM,&NUM);break;
                        case WORDNUU+1:Disp_Str_LED4(&NUM,&NUM,&NUM,&NUM);break;
                        case WORDNUU+2:Disp_Str_LED2(&NUM,&NUM,&DATETMP);break;
                        case WORDNUU+3:Disp_Str_LED_HZ(&DATETMP,&NUM,&NUM);break;
                        case WORDNUU+4:Disp_Str_LED2(&NUM,&NUM,&DATETMP);break;
                        case WORDNUU+5:Disp_Str_LED_HZ(&DATETMP,&NUM,&NUM);break;
                        case WORDNUU+6:Disp_Str_LED2(&NUM,&NUM,&DATETMP);break;
                        case WORDNUU+7:Disp_LED1(&DATETMP,&DATETMP);break;
                        case WORDNUU+8:Disp_LED1(&DATETMP,&DATETMP);break;
                        case WORDNUU+9:Disp_LED1(&DATETMP,&WEEK);break;
                        case WORDNUU+10:Disp_Str_LED_HZ(&WEEK,&NUM,&NUM);break;
                        case WORDNUU+11:Disp_Str_LED2(&NUM,&NUM,&DATETMP);break;
                        case WORDNUU+12:Disp_Str_LED_HZ(&DATETMP,&NUM,&NUM);break;
                        case WORDNUU+13:Disp_Str_LED2(&NUM,&NUM,&DATETMP);break;
                        case WORDNUU+14:Disp_LED1(&DATETMP,&DATETMP);break;
                        case WORDNUU+15:Disp_LED1(&DATETMP,&DATETMP);break;
                        case WORDNUU+16:Disp_Str_LED_HZ(&DATETMP,&NUM,&NUM);break;
                        case WORDNUU+17:Disp_Str_LED2(&NUM,&NUM,&DATETMP);break;
                        case WORDNUU+18:Disp_LED1(&DATETMP,&DATETMP);break;
                        case WORDNUU+19:Disp_LED1(&DATETMP,&DATETMP);break;
                        case WORDNUU+20:Disp_LED1(&DATETMP,&HZ);break;
                        case WORDNUU+21:WORDNUM=0;WORDNUMBER=0;break;
                        default:Disp_LED(&HZ);
                }
                if(WORDNUMBER==16)
                {
                        TEMP_Read();
                        CurrentTime(&TIMETYPE);
                        LCD_Disp_Time();
                }
        }
}

47okey 发表于 2009-12-12 17:51:43

是不是这三个姓名改成你的?
{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*/

用字模软件生成你的姓名的字模,代换这就可以了。我用的是PCtoLCD2002。

http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_513583.JPG
(原文件名:取模.JPG)

51dz 发表于 2009-12-12 23:11:12

这个取模软件很好,值得学习!

elecfun 发表于 2009-12-13 03:21:09

额的神你初学也不用这么复杂吧

dklcmc 发表于 2009-12-14 12:08:03

mark

huangqiuming 发表于 2009-12-14 12:11:59

你搞这么多程序谁给你看啊!

47okey 发表于 2009-12-14 12:33:36

“你搞这么多程序谁给你看啊!”
我也不会C,程序也看不懂。但LZ也只要求修改一下,能显示自己的姓名
所以其它的我都视而不见了

pangjineng 发表于 2012-5-2 16:42:52

名字都不会改,搞什么...

raxb 发表于 2012-5-2 18:27:24

{:sweat:}{:sweat:}{:sweat:}

小菜鸟001 发表于 2013-12-20 23:34:57

mark。。。。。。。。

bias 发表于 2013-12-21 22:56:49

47okey 发表于 2009-12-12 17:51
是不是这三个姓名改成你的?
{0xFD,0xFF,0xFE,0xFF,0x80,0x01,0xBE,0xFB,0x7E,0xF7,0xFE,0xFF,0x80,0x03,0x ...

你的取模软件能共享一下不,能取图片吗,看着比较简洁,我用xiaoqi的

lxa0 发表于 2013-12-26 20:11:46

这个代码看的头晕~~~~~~~~~~~~~~
页: [1]
查看完整版本: 16X16点阵数字钟问题