![]() |
發(fā)布時間: 2022-9-16 11:28
正文摘要:這是我制作的LCD12864大數(shù)字萬年歷電子鐘設(shè)計,用了一個多星期時間,經(jīng)過實物實測,每月時間相差幾分鐘,這是時鐘走時芯片決定的,溫度顯示還算正常。 附件里面包含單片機(jī)的源碼,仿真圖,PCB原檔。請大家多多指教 ... |
量子工業(yè) 發(fā)表于 2023-6-15 08:10 用DS3231時間更準(zhǔn)確 |
niehaitao 發(fā)表于 2023-6-2 16:09 會不會用個外置更好的晶振,能讓時間更準(zhǔn)確一些呢? |
怎我用Kill5編譯不過去呀? |
很棒我覺得非常的好 |
niehaitao 發(fā)表于 2023-6-2 16:09 非常感謝大佬,太感謝了,既然您的運行正常,那肯定是我連錯線了,我用您的程序再試試,再次感謝您 |
有一些注釋是我按自己的理解加進(jìn)去的,不一定正確,看看就好,還有我這里用的是3231時鐘模塊,也有用1302的,區(qū)別就在包含的頭文件不一樣,我看你還打了版,我就是直接連線,字庫也改了一些,能力有限,估計還有一些不合理的地方自己都沒發(fā)現(xiàn) |
按我的引腳連接后就是這樣正常顯示的,所有功能都正常 |
51hei圖片_20230602153623.jpg (107.71 KB, 下載次數(shù): 124)
#ifndef __18B20_H #define __18B20_H #include<reg51.h> //51系列單片機(jī)頭文件 #include<intrins.h> sbit DQ=P2^1; //溫度探測口 unsigned char a,b,t_b,t_s,t_g,t_x,f_b,f_s,f_g,f_x; //DS18B20用變量 unsigned char temp_flag=1; //溫度正負(fù)標(biāo)志 const unsigned char tabl3[]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //******************DS18B20溫度測試部分***************** //50微秒延時基準(zhǔn)程序 void delay_50us(unsigned int t) { unsigned char j; for(;t>0;t--) { for(j=19;j>0;j--); } } //8微秒延時基準(zhǔn)程序 void delay_8us(unsigned int t) { while(--t); } //3微秒延時程序 void delay_3us() { ; ; } void DS18B20_Init(void) // 函數(shù)功能:DS18B20初始化 { rest:delay_3us(); //稍做延時 delay_3us(); DQ=1; delay_3us(); DQ=0;// DQ_L; //單片機(jī)將dq_ds18b20總線拉低 delay_8us(75);//480us<T<960us//此延時必須精確,600US大于480US(12MHZ)過小不能仿真,過大實物不顯示 DQ=1;//拉高總線 釋放總線 delay_8us(8); //此延時不需要精確 if(DQ==1) { return; } delay_8us(11); //延時90us if(DQ==1) { return; } else { goto rest; } } //***函數(shù)名稱:void Ds18b20WriteOneByte(unsigned char dat) //***函數(shù)功能:讀一個字節(jié) unsigned char Ds18b20ReadOneByte(void) //子程序功能:從DS18B20讀一個字節(jié) { unsigned char i=0; unsigned char byte=0; for(i=0;i<8;i++) { byte>>=1; DQ=0;// DQ_L; delay_3us(); DQ=1; delay_3us(); delay_3us(); if(DQ==1) byte|=0x80; delay_50us(1); //延時40us } return(byte); } //***函數(shù)名稱:void Ds18b20WriteOneByte(unsigned char dat) //***函數(shù)功能:寫一個字節(jié) void Ds18b20WriteOneByte(unsigned char dat) //子程序功能:向DS18B20寫一字節(jié)的數(shù)據(jù) { unsigned char i=0; for(i=0;i<8;i++) { DQ=0;//拉低總線 delay_3us();//至少維持1US,表示寫時序(包括寫0時序或?qū)?時序)開始 if (dat & 0x01) DQ=1; //DQ = 1 delay_50us(1); //延時50us 以上 dat>>=1; DQ=1; ///寫完后必須釋放總線 } delay_50us(1); } //***函數(shù)名稱:void GetTemp(void) //***函數(shù)功能:讀取溫度函數(shù) void GetTemp(void) //讀取溫度函數(shù) { unsigned char temp; //定義溫度變量 DS18B20_Init(); //復(fù)位 Ds18b20WriteOneByte(0xcc); //跳過讀序列號的操作 Ds18b20WriteOneByte(0x44); //開啟溫度轉(zhuǎn)換 delay_8us(2); //延時 DS18B20_Init(); //復(fù)位 Ds18b20WriteOneByte(0xcc); //跳過讀序列號的操作 Ds18b20WriteOneByte(0xbe); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度 a=Ds18b20ReadOneByte(); //讀取高速暫存字節(jié)0,溫度低8位 b=Ds18b20ReadOneByte(); //讀取高速暫存字節(jié)1,溫度高8位 if((b&0xf8))//判斷溫度的正負(fù)性把讀取到的溫度值高8位跟11111000做與運算判斷溫度正負(fù),若高5位全部為1即為負(fù)否則為正 { temp_flag=0; //給出溫度為負(fù)的標(biāo)志 f_x=tabl3[a & 0x0f]; //計算溫度的小數(shù) temp=b<<4; temp+=(a&0xf0)>>4; temp=~temp+1; f_b=temp/100%10; //計算溫度的百位數(shù)據(jù) f_s=temp/10%10; //計算溫度的十位數(shù)據(jù) f_g=temp%10; //計算溫度的個位數(shù)據(jù) } else //溫度為正數(shù) { t_x=tabl3[a & 0x0f]; //計算溫度的小數(shù) temp=b & 0x0f; temp<<=4; a>>=4; temp=temp| a; t_b=(temp)/100%10; //計算溫度的百位數(shù)據(jù) -2是18B20個體補(bǔ)償 t_s=(temp)/10%10; //計算溫度的十位數(shù)據(jù) t_g=(temp)%10; //計算溫度的個位數(shù)據(jù) temp_flag=1; //給出溫度為正數(shù)的標(biāo)志 } } #endif |
#ifndef __ziku_H #define __ziku_H #include<reg51.h> //51系列單片機(jī)頭文件 #include<intrins.h> unsigned char code hz[]=/*-- 楷體_GB231212; 此字體下對應(yīng)的點陣為:寬x高=16x16 --*/ { /*0x00,0x40,0x40,0x40,0x40,0x40,0x40,0xFE,0xFE,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,/*--十--0*/ /*0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x40,0x40,0x40,0xC0,0xC0,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*--一--1*/ /*0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x18,0x18,0x08,0x08,0x08,0x08,0x00,0x00,0x00, 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x0C,0x04,0x04,0x04,0x04,0x04,0x06,0x06,0x06,/*--二--2*/ /*0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x98,0x88,0x88,0x88,0x08,0x00,0x00,0x00,0x00, 0x00,0x00,0x10,0x10,0x10,0x11,0x11,0x11,0x19,0x08,0x08,0x08,0x08,0x08,0x08,0x08,/*--三--3*/ /*0x00,0x70,0xF0,0x90,0x10,0xF0,0xF0,0x10,0xF8,0xF8,0x88,0x88,0xF8,0xF8,0x00,0x00, 0x00,0x00,0x00,0x07,0x07,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x0C,0x0F,0x07,0x00,/*--四--4*/ /*0x00,0x00,0x00,0x80,0x88,0x88,0xF8,0x7C,0x44,0x44,0xC4,0xC4,0x00,0x00,0x00,0x00, 0x00,0x10,0x10,0x10,0x10,0x18,0x1F,0x0F,0x08,0x08,0x0F,0x0F,0x08,0x08,0x08,0x08,/*--五--5*/ /*0x00,0x40,0x40,0x40,0x40,0x40,0x44,0x4C,0x68,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x00,0x00,0x10,0x10,0x18,0x0C,0x06,0x02,0x00,0x01,0x03,0x06,0x1C,0x18,0x00,0x00,/*--六--6*/ /*0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x80,0xC0,0x40,0x60,0x20,0x20,0x20,0x00, 0x00,0x02,0x02,0x02,0x02,0x03,0x01,0x0F,0x1F,0x10,0x10,0x10,0x10,0x1C,0x1C,0x00,/*--七--7*/ /*0x00,0x00,0x00,0x00,0xC0,0xC4,0x0C,0x38,0x70,0xC0,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x08,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0E,0x0C,0x08,/*--八--8*/ /*0x00,0x40,0x40,0x40,0x40,0xC0,0xFE,0x3E,0x20,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00, 0x00,0x20,0x20,0x30,0x18,0x0E,0x07,0x01,0x00,0x1F,0x3F,0x20,0x20,0x20,0x20,0x3C,/*--九--9*/ /*0x00,0x20,0x20,0xA0,0xF0,0xF2,0xB6,0x84,0x20,0x20,0xE0,0xF0,0x10,0xF0,0xF0,0x00, 0x00,0x04,0x06,0x03,0x01,0x3F,0x3F,0x13,0x1A,0x0C,0x07,0x0B,0x18,0x18,0x1F,0x07,/*--初--10*/ /*0x80,0x80,0x80,0x80,0xB8,0xF8,0xC0,0x40,0x40,0xC0,0xFE,0x3E,0x20,0x20,0x20,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x08,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,/*--廿--11*/ /*0x00,0x00,0x00,0x1C,0x7C,0x76,0xD3,0xEB,0xAA,0xBA,0xBE,0x0E,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x30,0x3F,0x1F,0x15,0x3F,0x3F,0x1A,0x0B,0x0F,0x1C,0x30,0x78,0x78,/*--鼠--12*/ /*0x00,0x00,0x00,0x40,0x78,0x38,0x10,0xFF,0xFF,0x88,0x88,0x88,0x88,0x80,0x80,0x00, 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,/*--牛--13*/ /*0x00,0x00,0x00,0xF0,0xF0,0x50,0x50,0xFF,0xFF,0xAA,0xAA,0xDA,0xD8,0x08,0x00,0x00, 0x00,0x40,0x60,0x38,0x5F,0x47,0x60,0x3C,0x1E,0x02,0x3E,0x7E,0x40,0x40,0x40,0x78,/*--虎--14*/ /*0x00,0x00,0x00,0xF0,0xF8,0x2C,0xE7,0xF7,0xBC,0xDC,0xF4,0x30,0x00,0x00,0x00,0x00, 0x00,0x00,0x20,0x20,0x31,0x19,0x0F,0x07,0x1F,0x3F,0x22,0x26,0x24,0x20,0x20,0x3C,/*--兔--15*/ /*0x00,0x00,0x20,0x20,0x20,0xE0,0xFE,0xDE,0xD0,0x10,0x12,0xD6,0xC4,0x00,0x00,0x00, 0x00,0x20,0x30,0x18,0x0C,0x07,0x13,0x18,0x1F,0x3F,0x26,0x23,0x21,0x20,0x20,0x3C,/*--龍--16*/ /*0x00,0xE0,0xE0,0xFC,0xFC,0xF0,0xF0,0x60,0x60,0xA2,0xB6,0x14,0x90,0xB0,0x30,0x00, 0x00,0x08,0x09,0x09,0x0F,0x07,0x06,0x06,0x04,0x00,0x1F,0x3F,0x23,0x21,0x20,0x3C,/*--蛇--17*/ /*0x00,0x00,0x00,0x00,0x84,0xF4,0x74,0x86,0xE2,0xFE,0x9E,0x80,0x80,0x80,0x00,0x00, 0x00,0x00,0x08,0x08,0x08,0x09,0x0D,0x05,0x05,0x04,0x24,0x64,0x60,0x3F,0x1F,0x00,/*--馬--18*/ /*0x00,0x00,0x00,0x00,0x10,0x52,0x56,0xFC,0xFC,0x2F,0x2B,0x09,0x00,0x00,0x00,0x00, 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x7F,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,/*--羊--19*/ /*0x00,0x44,0x6C,0xF8,0xFC,0x6C,0xF8,0xFE,0xE6,0xE8,0xBC,0xDC,0x5C,0x50,0x10,0x00, 0x00,0x04,0x16,0x33,0x3F,0x1F,0x00,0x3F,0x3F,0x33,0x1A,0x0F,0x0F,0x19,0x31,0x21,/*--猴--20*/ /*0x00,0x50,0xD0,0x98,0xC8,0xF8,0x38,0xF8,0xF8,0x2F,0x67,0x7C,0x7C,0x00,0x00,0x00, 0x00,0x08,0x0C,0x06,0x03,0x13,0x16,0x14,0x13,0x1B,0x0A,0x0B,0x49,0x49,0x7F,0x3F,/*--雞--21*/ /*0x00,0x40,0x44,0x6C,0xB8,0xFE,0xEE,0x60,0xB8,0x9E,0x96,0x10,0x10,0xF0,0xF0,0x00, 0x00,0x04,0x04,0x06,0x13,0x31,0x3F,0x1F,0x03,0x03,0x03,0x13,0x30,0x30,0x1F,0x0F,/*--狗--22*/ /*0x00,0x44,0x6C,0xB8,0xFC,0xEC,0x40,0x50,0xFE,0xFE,0x68,0x30,0x38,0x28,0x20,0x20, 0x00,0x04,0x06,0x13,0x31,0x3F,0x1F,0x06,0x3F,0x3F,0x15,0x15,0x3F,0x3F,0x00,0x00,/*--豬--23*/ /*0x00,0x00,0x00,0x10,0xF8,0xEC,0x27,0x27,0xFC,0xFE,0x12,0x12,0x10,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x03,0x01,0x01,0x01,0x7F,0x7F,0x01,0x01,0x01,0x01,0x01,/*--年--24*/ /*0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xB6,0x92,0x92,0xFE,0xFE,0x00,0x00,0x00,0x00, 0x00,0x00,0x40,0x60,0x30,0x1C,0x0F,0x03,0x01,0x10,0x30,0x3F,0x1F,0x00,0x00,0x00,/*--月--25*/ /*0x00,0x00,0x00,0x00,0xF8,0xF8,0x88,0xCC,0x44,0x44,0xFC,0xFC,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0C,0x04,0x04,0x0C,0x0F,0x0F,0x00,0x00,0x00,/*--日--26*/ /*0x00,0x00,0x00,0xFC,0xFC,0xA4,0xA4,0xFE,0x7A,0x52,0x52,0x42,0xFE,0xFE,0x00,0x00, 0x00,0x40,0x60,0x38,0x1F,0x07,0x06,0x0E,0x0B,0x09,0x0F,0x27,0x60,0x7F,0x3F,0x00,/*--周--27*/ //* (16 X 16 , 宋體, 加粗 ) /* 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0xFE,0xFE,0x40,0x40,0x40,0x40,0x40,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"十",0 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"一",1 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00, 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,//"二",2 0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, 0x00,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x00,//"三",3 0x00,0x00,0xFC,0xFC,0x04,0x04,0xFC,0xFC,0x04,0xFC,0xFC,0x04,0x04,0xFC,0xFC,0x00, 0x00,0x00,0x7F,0x7F,0x28,0x2C,0x27,0x23,0x20,0x23,0x27,0x24,0x24,0x7F,0x7F,0x00,//"四",4 0x00,0x00,0x84,0x84,0x84,0x84,0xFC,0xFC,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00, 0x00,0x40,0x40,0x40,0x78,0x7F,0x47,0x40,0x40,0x40,0x40,0x7F,0x7F,0x40,0x40,0x00,//"五",5 0x00,0x20,0x20,0x20,0x20,0x20,0x22,0x26,0x3C,0x38,0x20,0x20,0x20,0x20,0x20,0x00, 0x00,0x40,0x60,0x30,0x1C,0x0F,0x03,0x00,0x00,0x01,0x03,0x06,0x1C,0x78,0x60,0x00,//"六",6 0x00,0x80,0x80,0x80,0x80,0x80,0xFE,0xFE,0x40,0x40,0x60,0x20,0x20,0x20,0x20,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7F,0x40,0x40,0x40,0x40,0x40,0x70,0x70,0x00,//"七",7 0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0x00,0x00,0x7E,0xFE,0x80,0x00,0x00,0x00,0x00, 0x00,0x40,0x60,0x38,0x1F,0x07,0x00,0x00,0x00,0x00,0x07,0x1F,0x38,0x60,0x40,0x00,//"八",8 0x00,0x00,0x10,0x10,0x10,0xFE,0xFE,0x10,0x10,0x10,0xF0,0xF0,0x00,0x00,0x00,0x00, 0x00,0x40,0x60,0x30,0x1C,0x0F,0x03,0x00,0x00,0x00,0x3F,0x7F,0x40,0x70,0x70,0x00,//"九",9 0x00,0x10,0x12,0xD6,0xF4,0xB0,0x90,0x08,0x08,0xF8,0xF8,0x08,0x08,0xF8,0xF8,0x00, 0x00,0x02,0x03,0x7F,0x7F,0x47,0x66,0x30,0x1C,0x0F,0x03,0x40,0x40,0x7F,0x3F,0x00,//"初",10 0x00,0x10,0x10,0xFE,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0xFE,0xFE,0x10,0x10,0x00, 0x00,0x00,0x00,0x7F,0x7F,0x20,0x20,0x20,0x20,0x20,0x20,0x7F,0x7F,0x00,0x00,0x00,//"廿",11 0x01,0x00,0x7C,0x54,0x54,0x52,0x50,0x40,0x50,0x54,0x54,0x54,0x7C,0x00,0x00,0x01, 0x80,0x00,0x7F,0x24,0x09,0x02,0x7F,0x20,0x09,0x12,0x00,0x1F,0x20,0x78,0x00,0x80,//鼠",12 0x01,0x80,0x60,0x1C,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x01, 0x80,0x02,0x02,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x80,//牛",13 0x01,0x00,0x00,0xF0,0x10,0x90,0x90,0xFE,0x54,0x54,0x54,0x14,0x90,0x30,0x00,0x01, 0x80,0x40,0x30,0x0F,0x40,0x20,0x1C,0x04,0x05,0x05,0x3D,0x41,0x41,0x60,0x00,0x80,//"虎",14 0x01,0x20,0xD0,0x48,0x4E,0x48,0x48,0xC8,0x48,0x68,0x58,0x40,0xC0,0x00,0x00,0x01, 0x80,0x40,0x43,0x22,0x12,0x0A,0x06,0x03,0x3E,0x42,0x4A,0x52,0x43,0x70,0x00,0x80,//"免",15 0x01,0x20,0x20,0x20,0x20,0xA0,0x7E,0x20,0xE0,0x24,0x28,0x20,0xA0,0x20,0x00,0x01, 0x80,0x40,0x20,0x10,0x0C,0x23,0x20,0x10,0x3F,0x44,0x42,0x41,0x40,0x70,0x00,0x80,//"龍",16 0x01,0xF0,0x10,0xFE,0x10,0xF0,0x00,0x18,0xC8,0x0A,0x0C,0x08,0x08,0x98,0x00,0x01, 0x80,0x23,0x22,0x3F,0x12,0x1B,0x30,0x00,0x3F,0x42,0x42,0x41,0x41,0x70,0x00,0x80,//"蛇",17 0x01,0x00,0x02,0xFA,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x80,0x80,0x80,0x00,0x01, 0x80,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x40,0x40,0x3F,0x00,0x80,//"馬",18 0x01,0x00,0x10,0x90,0x92,0x9C,0x90,0xF0,0x90,0x98,0x96,0x90,0x10,0x00,0x00,0x01, 0x80,0x04,0x04,0x04,0x04,0x04,0x04,0x7F,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x80,//"羊",19 0x01,0x44,0x28,0x10,0xEE,0x40,0x20,0xF8,0x06,0x20,0xE4,0xA4,0xBC,0xA0,0x00,0x01, 0x80,0x04,0x42,0x41,0x3F,0x00,0x00,0x7F,0x00,0x45,0x34,0x0F,0x34,0x44,0x00,0x80,//"猴",20 0x01,0x00,0x48,0x88,0x08,0xC8,0x38,0x00,0xF8,0x0C,0xAA,0x88,0xF8,0x00,0x00,0x01, 0x80,0x20,0x10,0x0C,0x03,0x06,0x18,0x00,0x0B,0x0A,0x0A,0x4A,0x42,0x3E,0x00,0x80,//"雞",21 0x01,0x44,0x28,0x10,0xEE,0x00,0x20,0xD0,0x4E,0x48,0xC8,0x08,0x08,0xF8,0x00,0x01, 0x80,0x04,0x42,0x41,0x3F,0x00,0x00,0x1F,0x08,0x08,0x0F,0x40,0x40,0x3F,0x00,0x80,//"狗",22 0x01,0x44,0x28,0x10,0xEE,0x00,0x48,0x48,0xC8,0x7E,0x68,0x50,0x4C,0x40,0x00,0x01, 0x80,0x04,0x42,0x41,0x3F,0x04,0x02,0x7F,0x2A,0x2A,0x2A,0x2A,0x7E,0x00,0x00,0x80,//"豬",23 0x00,0x40,0x60,0x30,0xDE,0xCE,0x48,0x48,0xF8,0xF8,0x48,0x48,0x48,0x08,0x00,0x00, 0x00,0x04,0x04,0x04,0x07,0x07,0x04,0x04,0x7F,0x7F,0x04,0x04,0x04,0x04,0x04,0x00,//"年",24 0x00,0x00,0x00,0x00,0xFE,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0xFE,0x00,0x00, 0x00,0x00,0x40,0x70,0x3F,0x0F,0x02,0x02,0x02,0x02,0x42,0x42,0x7F,0x7F,0x00,0x00,//"月",25 0x00,0x00,0xFE,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0xFE,0x00,0x00, 0x00,0x00,0x7F,0x7F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7F,0x7F,0x00,0x00,//"日",26 0x00,0x00,0x00,0xFE,0xFE,0x82,0x92,0x92,0xFE,0xFE,0x92,0x92,0x82,0xFE,0xFE,0x00, 0x00,0x40,0x70,0x3F,0x0F,0x00,0x1E,0x1E,0x12,0x12,0x1E,0x5E,0x40,0x7F,0x7F,0x00,//"周",27 0x00,0x0C,0x12,0x12,0xCC,0xE0,0x30,0x10,0x10,0x10,0x30,0x60,0xF0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0F,0x1F,0x30,0x60,0x40,0x40,0x40,0x20,0x10,0x00,0x00,0x00,//℃",28 0x00,0x00,0x40,0x60,0x30,0x3E,0x6E,0xC8,0xC8,0x68,0x38,0x18,0x00,0x00,0x00,0x00, 0x00,0x04,0x04,0x06,0x12,0x13,0x15,0x35,0x2D,0x69,0x4B,0x02,0x06,0x04,0x04,0x00,//冬",29 0x00,0x00,0xFC,0xFC,0x44,0xFC,0xFC,0x48,0x7E,0x7E,0x48,0x7E,0x7E,0x48,0x40,0x00, 0x00,0x40,0x7F,0x3F,0x42,0x7F,0x7F,0x7F,0x7F,0x49,0x49,0x49,0x7F,0x7F,0x00,0x00,//"臘",30 */ //* (16 X 16 , 宋體 )共陰/列行式/點陣16*索引16/逆向/16進(jìn)制/像素8/C51格式*/ 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"十",0*/ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",1*/ 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,/*"二",2*/ 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*"三",3*/ 0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00, 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,/*"四",4*/ 0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00, 0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,/*"五",5*/ 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00,/*"六",6*/ 0x80,0x80,0x80,0x80,0x80,0x40,0xFF,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,/*"七",7*/ 0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7E,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x00,/*"八",8*/ 0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00, 0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x78,0x00,/*"九",9*/ 0x08,0x08,0x89,0xEA,0x18,0x88,0x00,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00, 0x02,0x01,0x00,0xFF,0x01,0x86,0x40,0x20,0x18,0x07,0x40,0x80,0x40,0x3F,0x00,0x00,/*"初",10*/ 0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x00, 0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,/*"廿",11*/ 0x00,0x00,0x7E,0x4A,0x4A,0x49,0x40,0x40,0x40,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00, 0x00,0x00,0xFF,0x80,0x49,0x12,0x00,0xFF,0x80,0x49,0x12,0x00,0x3F,0x40,0xF0,0x00,/*"鼠",12*/ 0x00,0x40,0x20,0x1E,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*"牛",13*/ 0x00,0x00,0xF8,0x08,0x48,0x48,0x48,0xFF,0x4A,0x2A,0x2A,0x0A,0xCA,0x18,0x00,0x00, 0x80,0x60,0x1F,0x80,0x40,0x20,0x1C,0x04,0x05,0x05,0x7D,0x81,0x81,0xE0,0x00,0x00,/*"虎",14*/ 0x40,0x20,0xF0,0x28,0x27,0x24,0x24,0xE4,0x24,0x34,0x2C,0x20,0xE0,0x00,0x00,0x00, 0x80,0x80,0x47,0x22,0x12,0x0A,0x06,0x03,0x7E,0x82,0x8A,0xB2,0x87,0x80,0xE0,0x00,/*"兔",15*/ 0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x10,0x11,0x16,0xD0,0x10,0x10,0x00, 0x80,0x40,0x20,0x18,0x06,0x41,0x20,0x10,0x3F,0x44,0x42,0x41,0x40,0x40,0x78,0x00,/*"龍",16*/ 0x00,0xF8,0x08,0xFF,0x08,0xF8,0x20,0x18,0xC8,0x08,0x09,0x0E,0x88,0x28,0x18,0x00, 0x20,0x63,0x21,0x1F,0x11,0x19,0x30,0x00,0x3F,0x44,0x42,0x41,0x40,0x40,0x78,0x00,/*"蛇",17*/ 0x00,0x02,0x02,0xF2,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x80,0x80,0x80,0x00,0x00, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x48,0x80,0x40,0x3F,0x00,0x00,/*"馬",18*/ 0x00,0x08,0x88,0x88,0x89,0x8E,0x88,0xF8,0x88,0x8C,0x8B,0x88,0x88,0x08,0x00,0x00, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,/*"羊",19*/ 0x22,0x14,0x08,0xF4,0x42,0x20,0xF8,0x07,0x10,0xF2,0x92,0x92,0x9E,0x90,0x10,0x00, 0x44,0x82,0x41,0x3F,0x00,0x00,0xFF,0x00,0x85,0x44,0x34,0x0F,0x34,0x44,0x84,0x00,/*"猴",20*/ 0x08,0x48,0x88,0x08,0xC8,0x38,0x00,0x00,0xFC,0x06,0x15,0x44,0x84,0x7C,0x00,0x00, 0x20,0x10,0x0C,0x03,0x04,0x18,0x00,0x10,0x13,0x12,0x12,0x52,0x92,0x42,0x3E,0x00,/*"雞",21*/ 0x40,0x22,0x14,0x08,0xF4,0x22,0x10,0xCC,0x4B,0x48,0xC8,0x08,0x08,0xF8,0x00,0x00, 0x08,0x44,0x82,0x41,0x3F,0x00,0x00,0x0F,0x04,0x04,0x4F,0x80,0x40,0x3F,0x00,0x00,/*"狗",22*/ 0x22,0x14,0x08,0xF4,0x02,0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x26,0x20,0x00, 0x44,0x82,0x41,0x3F,0x00,0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,/*"豬",23*/ 0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00, 0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,/*"年",24*/ 0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00, 0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,/*"月",25*/ 0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,/*"日",26*/ 0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x82,0xFE,0x00,0x00,0x00, 0x80,0x60,0x1F,0x00,0x00,0x1E,0x12,0x12,0x12,0x1E,0x40,0x80,0x7F,0x00,0x00,0x00,/*"周",27*/ 0x00,0x0C,0x12,0x12,0xCC,0xE0,0x30,0x10,0x10,0x10,0x30,0x60,0xF0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0F,0x1F,0x30,0x60,0x40,0x40,0x40,0x20,0x10,0x00,0x00,0x00,/*℃",28*/ 0x00,0x20,0x10,0x08,0x94,0xA7,0x44,0x44,0x44,0xA4,0x94,0x0C,0x00,0x00,0x00,0x00, 0x02,0x02,0x01,0x01,0x20,0x24,0x24,0x44,0x48,0x88,0x10,0x01,0x01,0x02,0x02,0x00,/*"冬",29*/ 0x00,0xFE,0x22,0x22,0xFE,0x40,0x48,0x48,0x7F,0x48,0x48,0x48,0x7F,0x48,0x48,0x00, 0x80,0x7F,0x02,0x82,0xFF,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,/*"臘",30*/ //* (16 X 16 , 宋體 ) 0x00,0x20,0x22,0xEC,0x00,0x00,0xFC,0x84,0xA4,0xFC,0xA4,0xA4,0x84,0xFC,0x00,0x00, 0x00,0x00,0x00,0x1F,0x08,0x44,0x3F,0x00,0x1E,0x12,0x12,0x5E,0x40,0x7F,0x00,0x00,//"調(diào)",31 0x00,0x04,0x74,0xD4,0xFE,0xD4,0x74,0x24,0x10,0xAE,0x48,0xA8,0x18,0x08,0x00,0x00, 0x00,0x42,0x45,0x44,0x77,0x44,0x45,0x7C,0x55,0x54,0x54,0x54,0x45,0x41,0x00,0x00,//整",32 0x00,0x00,0xF2,0x04,0x20,0x24,0x2C,0xF4,0x24,0x24,0x24,0x24,0x04,0xFC,0x00,0x00, 0x00,0x00,0x7F,0x00,0x1F,0x01,0x01,0x7F,0x01,0x11,0x11,0x5F,0x40,0x7F,0x00,0x00,//"鬧",33 0x00,0x20,0x50,0xCE,0x48,0x48,0x00,0xF0,0x10,0x10,0xFE,0x10,0x10,0xF0,0x00,0x00, 0x00,0x02,0x02,0x7F,0x22,0x12,0x00,0x07,0x02,0x02,0x7F,0x02,0x02,0x07,0x00,0x00,//"鐘",34 0x00,0xF8,0x88,0x88,0xF8,0x00,0x10,0x90,0x10,0x10,0x10,0xFE,0x10,0x10,0x00,0x00, 0x00,0x1F,0x08,0x08,0x1F,0x00,0x00,0x00,0x03,0x40,0x40,0x7F,0x00,0x00,0x00,0x00,//"時",35 0x00,0x80,0x40,0xA0,0x98,0x86,0x80,0x80,0x80,0x86,0x98,0x20,0x40,0x80,0x00,0x00, 0x00,0x40,0x20,0x10,0x08,0x07,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,//"分",36 0x00,0x1C,0x86,0x62,0x12,0x10,0x08,0xE8,0x08,0x08,0x10,0x12,0x62,0x86,0x1C,0x00, 0x00,0x00,0x43,0x2C,0x10,0x10,0x20,0x21,0x21,0x21,0x11,0x11,0x2C,0x43,0x00,0x00,//鬧鐘,37 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,//空,38 // 0x00,0x00,0x04,0xC4,0xC4,0x04,0x04,0xFC,0xFC,0x04,0x04,0x04,0x04,0x04,0x00,0x00, // 0x00,0x40,0x40,0x7F,0x7F,0x40,0x40,0x7F,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,//正,39 0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00, 0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"正",39*/ 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xA9,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x38,0x7C,0xFF,0xFE,0xFE,0xFF,0x7C,0x38,0x00,0x00,0x00,0x00,//"!"溫度圖標(biāo),40 }; //-----------數(shù)字16*32---------------------- unsigned char code dazi[]= /*pyhzbj取模方式:縱向取模,字節(jié)倒序*/ { //0 0x00,0xF0,0xF8,0xFC,0xFE,0x3E,0x1E,0x1E,0x1E,0x1E,0x3E,0xFE,0xFC,0xF8,0xF0,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0x30,0x0C,0xFF,0xFF,0xFF,0xFF,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0x30,0x0C,0x03,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00, 0x00,0x0F,0x1F,0x3F,0x7F,0x7C,0x78,0x78,0x78,0x78,0x7C,0x7F,0x3F,0x1F,0x0F,0x00, //1 0x00,0x00,0x00,0x00,0x18,0x18,0x1C,0xFC,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x7F,0x7F,0x7F,0x7F,0x60,0x60,0x00,0x00,0x00, //2 0x00,0xF0,0xF8,0xFC,0xFE,0x3E,0x1E,0x1E,0x1E,0x1E,0x3E,0xFE,0xFC,0xF8,0xF0,0x00, 0x00,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x80,0xC0,0xE0,0xFF,0xFF,0xFF,0x7F,0x00, 0x00,0xC0,0xE0,0xF0,0xF8,0xFC,0x7E,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00, 0x00,0x7F,0x7F,0x7F,0x7F,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x00, //3 0x00,0xF0,0xF8,0xFC,0xFE,0x3E,0x1E,0x1E,0x1E,0x1E,0x3E,0xFE,0xFC,0xF8,0xF0,0x00, 0x00,0x07,0x07,0x07,0xC7,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xFF,0xFF,0x7F,0x3F,0x00, 0x00,0xE0,0xE0,0xE0,0xE3,0x03,0x03,0x03,0x03,0x03,0x07,0xFF,0xFF,0xFE,0xFC,0x00, 0x00,0x0F,0x1F,0x3F,0x7F,0x7C,0x78,0x78,0x78,0x78,0x7C,0x7F,0x3F,0x1F,0x0F,0x00, //4 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xFC,0xFE,0xFE,0x00,0x00,0x00, 0x00,0x00,0x80,0xE0,0xF8,0xFE,0x7F,0x1F,0x07,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00, 0x00,0xFE,0xFF,0xFF,0xFF,0xF1,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00, //5 0x00,0xFE,0xFE,0xFE,0xFE,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x78,0x78,0x78,0x78,0xF8,0xF8,0xF0,0xE0,0xC0,0x00, 0x00,0xF1,0xF1,0xF1,0xF1,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00, 0x00,0x0F,0x1F,0x3F,0x7F,0x7C,0x78,0x78,0x78,0x78,0x7C,0x7F,0x3F,0x1F,0x0F,0x00, //6 0x00,0xF0,0xF8,0xFC,0xFE,0x3E,0x1E,0x1E,0x1E,0x1E,0x3E,0xFE,0xFC,0xF8,0xF0,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF1,0xE1,0xC1,0x81,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x00, 0x00,0x0F,0x1F,0x3F,0x7F,0x7C,0x78,0x78,0x78,0x78,0x7C,0x7F,0x3F,0x1F,0x0F,0x00, //7 0x00,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x9E,0xFE,0xFE,0xFE,0x7E,0x1E,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFF,0xFF,0x1F,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00, //8 0x00,0xF0,0xF8,0xFC,0xFE,0x3E,0x1E,0x1E,0x1E,0x1E,0x3E,0xFE,0xFC,0xF8,0xF0,0x00, 0x00,0x1F,0x3F,0xFF,0xFF,0xF0,0xE0,0xE0,0xE0,0xE0,0xF0,0xFF,0xFF,0x3F,0x1F,0x00, 0x00,0xFE,0xFF,0xFF,0xFF,0x03,0x01,0x01,0x01,0x01,0x03,0xFF,0xFF,0xFF,0xFE,0x00, 0x00,0x0F,0x1F,0x3F,0x7F,0x7C,0x78,0x78,0x78,0x78,0x7C,0x7F,0x3F,0x1F,0x0F,0x00, //9 0x00,0xF0,0xF8,0xFC,0xFE,0x3E,0x1E,0x1E,0x1E,0x1E,0x3E,0xFE,0xFC,0xF8,0xF0,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0x00, 0x00,0x81,0x83,0x87,0x8F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0xFF,0xFF,0xFF,0xFF,0x00, 0x00,0x0F,0x1F,0x3F,0x7F,0x7C,0x78,0x78,0x78,0x78,0x7C,0x7F,0x3F,0x1F,0x0F,0x00, //雙方型冒號 10 0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, //空 11 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, }; unsigned char code number[]=/*-- 新宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ { 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*0--0*/ 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*1--1*/ 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*2--2*/ 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*3--3*/ 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*4--4*/ 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*5--5*/ 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*6--6*/ 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*7--7*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*8--8*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*9--9*/ 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*:--10*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*---11*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* --12*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,/*.--13*/ }; #endif |
#ifndef __nongli_H #define __nongli_H #include<reg51.h> //51系列單片機(jī)頭文件 #include<intrins.h> /********************************************************************************* C51寫的公歷轉(zhuǎn)農(nóng)歷和星期 ********************************************************************************** 公歷是全世界通用的歷法以地球繞太陽的一周為一年一年365 天分為12 個月1 3 5 7 8 10 12 月為 31 天2 月為28 天其余月份為30 天事實上地球繞太陽一周共365 天5 小時48 分46 秒比公歷一年多出5 小時48 分46 秒為使年誤差不累積公歷年用閏年法來消除年誤差 由于每年多出5 小時48 分46 秒每4 年累計多出23 小時15 分4 秒接近1 天天文學(xué)家就規(guī)定每4 年有一個閏年把2 月由28 天改為29 天凡是公歷年代能被4 整除 的那一年就是閏年但是這樣一來每4 年又少了44 分56 秒為了更準(zhǔn)確地計時天文學(xué)家又規(guī)定凡能被100 整除 的年份只有能被400 整除才是閏年即每400 年要減掉3 個閏年經(jīng)過這樣處理后實際上每400 年的誤差只有2 小時 53 分20 秒已相當(dāng)準(zhǔn)確了 農(nóng)歷與公歷不同農(nóng)歷把月亮繞地球一周作為一月因為月亮繞地球一周不是一整天所以農(nóng)歷把月分為大月和小 月大月30 天小月29 天通過設(shè)置大小月使農(nóng)歷日始終與月亮與地球的位置相對應(yīng)為了使農(nóng)歷的年份與公歷年 相對應(yīng)農(nóng)歷通過設(shè)置閏月的辦法使它的平均年長度與公歷年相等農(nóng)歷是中國傳統(tǒng)文化的代表之一并與農(nóng)業(yè)生產(chǎn)聯(lián) 系密切中國人民特別是廣大農(nóng)民十分熟悉并喜愛農(nóng)歷 公歷與農(nóng)歷是我國目前并存的兩種歷法各有其固有的規(guī)律農(nóng)歷與月球的運行相對應(yīng)其影響因素多它的大小 月和閏月與天體運行有關(guān)計算十分復(fù)雜且每年都不一致因此要用單片機(jī)實現(xiàn)公歷與農(nóng)歷的轉(zhuǎn)換用查表法是最方 便實用的辦法 51 系列單片機(jī)因其在功能上能滿足大部份對速度要求不高的應(yīng)用場合的要求且價格低廉開發(fā)工具普及程度高 是目前應(yīng)用最多的單片機(jī)之一本文介紹一種用51 單片機(jī)實現(xiàn)從1901 年到2099 年2199 年公歷日到農(nóng)歷日及星期 的轉(zhuǎn)換方法并向讀者提供完整的51C程序 二 基本原理 實現(xiàn)公歷與農(nóng)歷的轉(zhuǎn)換一般采用查表法按日查表是速度最快的方法但51 單片機(jī)尋址能力有限不可能采用 按日查表的方法除按日查外我們可以通過按月查表和按年查表的方法再通過適當(dāng)?shù)挠嬎銇泶_定公歷日所對應(yīng)的 農(nóng)歷日期本文采用的是按年查表法最大限度地減少表格所占的程序空間 對于農(nóng)歷月來說大月為30 天小月為29 天這是固定不變的這樣我們就可用1 個BIT 位來表示大小月信 息農(nóng)歷一年如有閏月為13 個月否則是12 個月所以一年需要用13 個BIT 閏月在農(nóng)歷年中所在的月份并不固定 大部分閏月分布在農(nóng)歷2 8 月但也有少量年份在9 月以后所以要表示閏月的信息至少要4BIT 在這里我們用4BIT 的值來表示閏月的月份值為0 表示本年沒有閏月有了以上信息還不足以判斷公歷日對應(yīng)的農(nóng)歷日因為還需要一 個參照日我們選用農(nóng)歷正月初一所對應(yīng)的公歷日期作參照日公歷日最大為31 日需要5BIT 來表示而春節(jié)所在的 月份不是1 月就是2 月用1BIT 就夠了考慮到表達(dá)方便我們用2BIT 來表示春節(jié)月2BIT 的值直接表示月份這 樣一年的農(nóng)歷信息只用3 個字節(jié)就全部包括了 計算公歷日對應(yīng)的農(nóng)歷日期的方法先計算出公歷日離當(dāng)年元旦的天數(shù)然后查表取得當(dāng)年的春節(jié)日期計算出春 節(jié)離元旦的天數(shù)二者相減即可算出公歷日離春節(jié)的天數(shù)以后只要根據(jù)大小月和閏月信息減一月天數(shù)調(diào)整一月農(nóng) 歷月份即可推算出公歷日所對應(yīng)的農(nóng)歷日期如公歷日不到春節(jié)日期農(nóng)歷年要比公歷年小一年農(nóng)歷大小月取前一 年的信息農(nóng)歷月從12 月向前推算 公歷日是非常有規(guī)律的所以公歷日所對應(yīng)的星期天可以通過計算直接得到理論上公元0 年1 月1 日為星期日 只要求得公歷日離公元0 年1 月1 日的日子數(shù)除7 后的余數(shù)就是星期天為了簡化計算采用月校正法根據(jù)公歷的 年月日可直接計算出星期天其算法是日期年份所過閏年數(shù)月校正數(shù)之和除7 的余數(shù)就是星期天但如果是在 閏年又不到3 月份上述之和要減一天再除7 其1 12 月的校正數(shù)據(jù)為6 2 2 5 0 3 5 1 4 6 2 4 在 本程序中采用1 個字節(jié)表示年份閏年數(shù)也只計算1900 年以后的閏年數(shù)所以實際校正數(shù)據(jù)也和上述數(shù)據(jù)不同 公歷年對應(yīng)的農(nóng)歷數(shù)據(jù),每年三字節(jié), 格式第一字節(jié)BIT7-4 位表示閏月月份,值為0 為無閏月,BIT3-0 對應(yīng)農(nóng)歷第1-4 月的大小 第二字節(jié)BIT7-0 對應(yīng)農(nóng)歷第5-12 月大小,第三字節(jié)BIT7 表示農(nóng)歷第13 個月大小 月份對應(yīng)的位為1 表示本農(nóng)歷月大(30 天),為0 表示小(29 天) 第三字節(jié)BIT6-5 表示春節(jié)的公歷月份,BIT4-0 表示春節(jié)的公歷日期 *************************************************************************************************/ code unsigned char year_code[597]= { 0x04,0xAe,0x53, //1901 0x0A,0x57,0x48, //1902 0x55,0x26,0xBd, //1903 0x0d,0x26,0x50, //1904 0x0d,0x95,0x44, //1905 0x46,0xAA,0xB9, //1906 0x05,0x6A,0x4d, //1907 0x09,0xAd,0x42, //1908 0x24,0xAe,0xB6, //1909 0x04,0xAe,0x4A, //1910 0x6A,0x4d,0xBe, //1911 0x0A,0x4d,0x52, //1912 0x0d,0x25,0x46, //1913 0x5d,0x52,0xBA, //1914 0x0B,0x54,0x4e, //1915 0x0d,0x6A,0x43, //1916 0x29,0x6d,0x37, //1917 0x09,0x5B,0x4B, //1918 0x74,0x9B,0xC1, //1919 0x04,0x97,0x54, //1920 0x0A,0x4B,0x48, //1921 0x5B,0x25,0xBC, //1922 0x06,0xA5,0x50, //1923 0x06,0xd4,0x45, //1924 0x4A,0xdA,0xB8, //1925 0x02,0xB6,0x4d, //1926 0x09,0x57,0x42, //1927 0x24,0x97,0xB7, //1928 0x04,0x97,0x4A, //1929 0x66,0x4B,0x3e, //1930 0x0d,0x4A,0x51, //1931 0x0e,0xA5,0x46, //1932 0x56,0xd4,0xBA, //1933 0x05,0xAd,0x4e, //1934 0x02,0xB6,0x44, //1935 0x39,0x37,0x38, //1936 0x09,0x2e,0x4B, //1937 0x7C,0x96,0xBf, //1938 0x0C,0x95,0x53, //1939 0x0d,0x4A,0x48, //1940 0x6d,0xA5,0x3B, //1941 0x0B,0x55,0x4f, //1942 0x05,0x6A,0x45, //1943 0x4A,0xAd,0xB9, //1944 0x02,0x5d,0x4d, //1945 0x09,0x2d,0x42, //1946 0x2C,0x95,0xB6, //1947 0x0A,0x95,0x4A, //1948 0x7B,0x4A,0xBd, //1949 0x06,0xCA,0x51, //1950 0x0B,0x55,0x46, //1951 0x55,0x5A,0xBB, //1952 0x04,0xdA,0x4e, //1953 0x0A,0x5B,0x43, //1954 0x35,0x2B,0xB8, //1955 0x05,0x2B,0x4C, //1956 0x8A,0x95,0x3f, //1957 0x0e,0x95,0x52, //1958 0x06,0xAA,0x48, //1959 0x7A,0xd5,0x3C, //1960 0x0A,0xB5,0x4f, //1961 0x04,0xB6,0x45, //1962 0x4A,0x57,0x39, //1963 0x0A,0x57,0x4d, //1964 0x05,0x26,0x42, //1965 0x3e,0x93,0x35, //1966 0x0d,0x95,0x49, //1967 0x75,0xAA,0xBe, //1968 0x05,0x6A,0x51, //1969 0x09,0x6d,0x46, //1970 0x54,0xAe,0xBB, //1971 0x04,0xAd,0x4f, //1972 0x0A,0x4d,0x43, //1973 0x4d,0x26,0xB7, //1974 0x0d,0x25,0x4B, //1975 0x8d,0x52,0xBf, //1976 0x0B,0x54,0x52, //1977 0x0B,0x6A,0x47, //1978 0x69,0x6d,0x3C, //1979 0x09,0x5B,0x50, //1980 0x04,0x9B,0x45, //1981 0x4A,0x4B,0xB9, //1982 0x0A,0x4B,0x4d, //1983 0xAB,0x25,0xC2, //1984 0x06,0xA5,0x54, //1985 0x06,0xd4,0x49, //1986 0x6A,0xdA,0x3d, //1987 0x0A,0xB6,0x51, //1988 0x09,0x37,0x46, //1989 0x54,0x97,0xBB, //1990 0x04,0x97,0x4f, //1991 0x06,0x4B,0x44, //1992 0x36,0xA5,0x37, //1993 0x0e,0xA5,0x4A, //1994 0x86,0xB2,0xBf, //1995 0x05,0xAC,0x53, //1996 0x0A,0xB6,0x47, //1997 0x59,0x36,0xBC, //1998 0x09,0x2e,0x50, //1999 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 unsigned char day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};//月份數(shù)據(jù)表 code unsigned int day_code2[3]={0x111,0x130,0x14e}; bit c_moon; data unsigned char year_moon,month_moon,day_moon; /*************************************************************************************** * 函數(shù)名稱 :get_moon_day * 功能描述 :用于讀取數(shù)據(jù)表中農(nóng)歷月的大月或小月,如果該月為大返回1,為小返回0 * 參數(shù) : ***************************************************************************************/ bit get_moon_day(unsigned char month_p,unsigned int table_addr) //讀取數(shù)據(jù)表中農(nóng)歷月的大月或小月,如果該月為大返回1,為小返回0 { unsigned char temp; switch (month_p) { case 1:{temp=year_code[table_addr]&0x08; if (temp==0)return(0);else return(1); break;} case 2:{temp=year_code[table_addr]&0x04; if (temp==0)return(0);else return(1); break;} case 3:{temp=year_code[table_addr]&0x02; if (temp==0)return(0);else return(1); break;} case 4:{temp=year_code[table_addr]&0x01; if (temp==0)return(0);else return(1); break;} case 5:{temp=year_code[table_addr+1]&0x80; if (temp==0)return(0);else return(1); break;} case 6:{temp=year_code[table_addr+1]&0x40; if (temp==0)return(0);else return(1); break;} case 7:{temp=year_code[table_addr+1]&0x20; if (temp==0)return(0);else return(1); break;} case 8:{temp=year_code[table_addr+1]&0x10; if (temp==0)return(0);else return(1); break;} case 9:{temp=year_code[table_addr+1]&0x08; if (temp==0)return(0);else return(1); break;} case 10:{temp=year_code[table_addr+1]&0x04; if (temp==0)return(0);else return(1); break;} case 11:{temp=year_code[table_addr+1]&0x02; if (temp==0)return(0);else return(1); break;} case 12:{temp=year_code[table_addr+1]&0x01; if (temp==0)return(0);else return(1); break;} case 13:{temp=year_code[table_addr+2]&0x80; if (temp==0)return(0);else return(1); break;} default: break; } } /************************************************************************************* * 函數(shù)名稱 :Conversion * 功能描述 :輸入陽歷數(shù)據(jù),輸出陰歷數(shù)據(jù)(只允許1901-2099年) * 參數(shù) :參數(shù)名稱 ****************************************************************************************/ void Conversion(bit c,char year,char month,char day) //輸入陽歷數(shù)據(jù),輸出陰歷數(shù)據(jù)(只允許1901-2099年) { //c=0 為21世紀(jì),c=1 為19世紀(jì) 輸入輸出數(shù)據(jù)均為BCD數(shù)據(jù) //輸入輸出都是10進(jìn)制參數(shù) unsigned char temp1,temp2,temp3,month_p; unsigned int temp4,table_addr; bit flag2,flag_y; //定位數(shù)據(jù)表地址 if(c==0) { table_addr=(year+0x64-1)*0x3; } else { table_addr=(year-1)*0x3; } //定位數(shù)據(jù)表地址完成 //取當(dāng)年春節(jié)所在的公歷月份 temp1=year_code[table_addr+2]&0x60; temp1=_cror_(temp1,5); //取當(dāng)年春節(jié)所在的公歷月份完成 //取當(dāng)年春節(jié)所在的公歷日 temp2=year_code[table_addr+2]&0x1f; //取當(dāng)年春節(jié)所在的公歷日完成 // 計算當(dāng)年春年離當(dāng)年元旦的天數(shù),春節(jié)只會在公歷1月或2月 if(temp1==0x1) { temp3=temp2-1; } else { temp3=temp2+0x1f-1; } // 計算當(dāng)年春年離當(dāng)年元旦的天數(shù)完成 //計算公歷日離當(dāng)年元旦的天數(shù),為了減少運算,用了兩個表 //day_code1[9],day_code2[3] //如果公歷月在九月或前,天數(shù)會少于0xff,用表day_code1[9], //在九月后,天數(shù)大于0xff,用表day_code2[3] //如輸入公歷日為8月10日,則公歷日離元旦天數(shù)為day_code1[8-1]+10-1 //如輸入公歷日為11月10日,則公歷日離元旦天數(shù)為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)&&(year!=0)) temp4+=1; //如果公歷月大于2月并且該年的2月為閏月,天數(shù)加1 //計算公歷日離當(dāng)年元旦的天數(shù)完成 //判斷公歷日在春節(jié)前還是春節(jié)后 if (temp4>=temp3) { //公歷日在春節(jié)后或就是春節(jié)當(dāng)日使用下面代碼進(jìn)行運算 temp4-=temp3; month=0x1; month_p=0x1; //month_p為月份指向,公歷日在春節(jié)前或就是春節(jié)當(dāng)日month_p指向首月 flag2=get_moon_day(month_p,table_addr); //檢查該農(nóng)歷月為大小還是小月,大月返回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); //從數(shù)據(jù)表中取該年的閏月月份,如為0則該年無閏月 while(temp4>=temp1) { temp4-=temp1; month_p+=1; if(month==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 { //公歷日在春節(jié)前使用下面代碼進(jìn)行運算 temp3-=temp4; if (year==0x0){year=0x63;c=1;} else year-=1; table_addr-=0x3; month=0xc; temp2=year_code[table_addr]&0xf0; temp2=_cror_(temp2,4); if (temp2==0)month_p=0xc; else month_p=0xd; //month_p為月份指向,如果當(dāng)年有閏月,一年有十三個月,月指向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(month==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_moon=c; //原程序這里又把這得出的值變回BCD碼。但根據(jù)我后面的程序,我不需要。 //后面用來顯示的農(nóng)歷信息的程序分別是disp_t3()和disp_t4() year_moon=year; month_moon=month; day_moon=day; } /****************************************************************************************** * 函數(shù)名稱 :Conver_week * 功能描述 :輸入BCD陽歷數(shù)據(jù),輸出BCD星期數(shù)據(jù)(只允許1901-2099年) * 參數(shù) : 參數(shù)名稱: 輸入/輸出? 類型 描述 * 算法:日期+年份+所過閏年數(shù)+月較正數(shù)之和除7 的余數(shù)就是星期,但如果是在 閏年又不到3 月份上述之和要減一天再除7星期數(shù)。余數(shù)為0時,為星期天。 ******************************************************************************************/ bit century; //世紀(jì)位標(biāo)志,0為20世紀(jì),1為19世紀(jì) code unsigned char table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正數(shù)據(jù)表 void Conver_week() //輸入BCD陽歷數(shù)據(jù),輸出BCD星期數(shù)據(jù)(只允許1901-2099年) {//century=0 為21世紀(jì),c=1 為19世紀(jì) 輸入輸出數(shù)據(jù)均為BCD數(shù)據(jù) unsigned char temp1,temp2; temp1=year; if (century==0){temp1=temp1+100;} //如果為21世紀(jì),年份數(shù)加100 temp2=temp1/4; //所過閏年數(shù)只算1900年之后的 temp2=temp1+temp2; temp2=temp2%7; //為節(jié)省資源,先進(jìn)行一次取余,避免數(shù)大于255 temp2=temp2+day+table_week[month-1]; if (year%0x4==0&&month<3)temp2-=1; week=temp2%7; } #endif |
#ifndef __DS3231_H__ #define __DS3231_H__ #define uchar unsigned char #define uint unsigned int #include <intrins.h> // IO口模擬I2C通信 sbit DS3231_SCL=P3^6; // ds32321模擬I2C數(shù)據(jù)傳送位SDA sbit DS3231_SDA=P3^7; // 模擬I2C時鐘控制位SCL bit ack; //應(yīng)答標(biāo)志位 /******************************************************************************************************** ** DS3231常數(shù)定義 ********************************************************************************************************/ #define DS3231_WriteAddress 0xD0 //器件寫地址 #define DS3231_ReadAddress 0xD1 //器件讀地址 #define DS3231_SECOND 0x00 //秒 #define DS3231_MINUTE 0x01 //分 #define DS3231_HOUR 0x02 //時 #define DS3231_WEEK 0x03 //星期 #define DS3231_DAY 0x04 //日 #define DS3231_MONTH 0x05 //月 #define DS3231_YEAR 0x06 //年 #define DS3231_TEMPERATUREH 0x11 //溫度寄存器高字節(jié)(8位) 整數(shù)部分 #define DS3231_TEMPERATUREL 0x12 //溫度寄存器低字節(jié)(低2位) 小數(shù)部分 #define NACK 1 #define ACK 0 char hour,min,sec,year,month,day,date,week; //定義讀取3231的時分秒年月日星期變量 char Tem_L,Tem_H; //定義讀取3231的溫度高字節(jié)整數(shù)部分和低字節(jié)小數(shù)部分變量 unsigned int TH3231; //unsigned char nians,niang,yues,yueg,ris,rig,shis,shig,fens,feng,miaos,miaog; //定義分解變量 ///***************按鍵端口************/// sbit KEY1= P1^1; //調(diào)整 sbit KEY2= P1^2; //++ sbit KEY3= P1^3; //-- sbit KEY4= P1^4; //退出 unsigned char a1,a2,a3,a4; //按鍵消抖用 unsigned char disflag=0,b1; //時間調(diào)整相關(guān)//b1用來計數(shù)進(jìn)入設(shè)置到10秒后如果沒有按鍵按下就返回時間顯示 void Delay5US() //@12.000MHz 延時5us { _nop_(); //_nop_(); _nop_();_nop_(); //1T單片機(jī)用4個nop,12T用1個nop } /*1T 12M 延時函數(shù) Delay_us(1)時大約1us*/ void Delay_us(uint us) { while(us--) { _nop_(); _nop_(); } } /********************************************** //IIC Start IIC總線產(chǎn)生起始信號函數(shù) **********************************************/ void IIC_Start() { DS3231_SDA = 1; //拉高時鐘線 Delay_us(1); DS3231_SCL = 1; //拉高數(shù)據(jù)線 Delay_us(5); //起始條件建立時間大于4.7us,延時 DS3231_SDA = 0; //在時鐘線為高電平時,拉低數(shù)據(jù)線,產(chǎn)生起始信號 發(fā)送起始信號 Delay_us(1); DS3231_SCL = 0; //鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) Delay_us(1); } /*IIC_Stop IIC總線產(chǎn)生停止信號函數(shù)*/ void IIC_Stop() { DS3231_SDA = 0; //拉低數(shù)據(jù)線 Delay_us(1); DS3231_SCL = 0; //拉低數(shù)據(jù)線 Delay_us(5); //起始條件建立時間大于4.7us,延時 DS3231_SCL = 1; //時鐘時線為高電平時,拉高數(shù)據(jù)線,產(chǎn)生停止信號 Delay_us(1); DS3231_SDA = 1; //時鐘時線為高電平時,拉高數(shù)據(jù)線,產(chǎn)生停止信號 } unsigned char BCD2HEX(unsigned char val) //BCD轉(zhuǎn)換為Byte { return ((val>>4)*10)+(val&0x0f); } unsigned char HEX2BCD(unsigned char val) //B碼轉(zhuǎn)換為BCD碼 { return (((val%100)/10)<<4)|(val%10); } /******************************************************************* 字節(jié)數(shù)據(jù)發(fā)送函數(shù) 函數(shù)原型: void SendByte(uchar Dat); 功能: 將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對 此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0) ack=1 發(fā)送數(shù)據(jù)正常, ack=0 被控器無應(yīng)答或損壞。 ********************************************************************/ void SendByte(unsigned char c) { unsigned char BitCnt; for(BitCnt=0;BitCnt<8;BitCnt++) //要傳送的數(shù)據(jù)長度為8位 { if((c<<BitCnt)&0x80) DS3231_SDA=1; //判斷發(fā)送位 else DS3231_SDA=0; Delay_us(1); DS3231_SCL=1; //置時鐘線為高,通知被控器開始接收數(shù)據(jù)位 Delay_us(5); //保證時鐘高電平周期大于4μs DS3231_SCL=0; } DS3231_SDA=1; //8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位 Delay_us(1); DS3231_SCL=1; Delay_us(3); if(DS3231_SDA==1) ack=0; else ack=1; //判斷是否接收到應(yīng)答信號 DS3231_SCL=0; Delay_us(3); } /*用來接收從器件傳來的數(shù)據(jù),并判斷總線錯誤(不發(fā)應(yīng)答信號),發(fā)完后請用應(yīng)答函數(shù)應(yīng)答從機(jī)*/ unsigned char RcvByte() { unsigned char retc; unsigned char BitCnt; retc=0; DS3231_SDA=1; //置數(shù)據(jù)線為輸入方式 for(BitCnt=0;BitCnt<8;BitCnt++) { Delay_us(1); DS3231_SCL=0; //置時鐘線為低,準(zhǔn)備接收數(shù)據(jù)位 Delay_us(5); //時鐘低電平周期大于4.7μs DS3231_SCL=1; //置時鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效 Delay_us(3); retc=retc<<1; if(DS3231_SDA==1) retc=retc+1; //讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中 Delay_us(2); } DS3231_SCL=0; Delay_us(1); return(retc); } /*主控器進(jìn)行應(yīng)答信號(可以是應(yīng)答或非應(yīng)答信號,由位參數(shù)a決定)*/ void Ack_I2C(bit a) { if(a==0)DS3231_SDA=0; //在此發(fā)出應(yīng)答或非應(yīng)答信號 else(DS3231_SDA=1); Delay_us(3); DS3231_SCL=1; Delay_us(5); //時鐘低電平周期大于4us DS3231_SCL=0; //清時鐘線,鉗住I2C總線以便繼續(xù)接收 Delay_us(2); } unsigned char write_byte(unsigned char addr, unsigned char write_data) //DS3231寫一字節(jié)數(shù)據(jù) { IIC_Start(); SendByte(DS3231_WriteAddress); //器件寫地址0xD0 if (ack == 0) return 0; SendByte(addr); if (ack == 0) return 0; SendByte(write_data); if (ack == 0) return 0; IIC_Stop(); Delay_us(10); return 1; } unsigned char read_current() //DS3231讀一字節(jié)數(shù)據(jù) { unsigned char read_data; IIC_Start(); SendByte(DS3231_ReadAddress); //器件讀地址0xD1 if(ack==0) return(0); read_data = RcvByte(); Ack_I2C(1); IIC_Stop(); return read_data; } unsigned char read_random(unsigned char random_addr) //DS3231讀時鐘數(shù)據(jù) { unsigned char Tmp; IIC_Start(); SendByte(DS3231_WriteAddress); //器件寫地址0xD0 if(ack==0) return(0); SendByte(random_addr); if(ack==0) return(0); Tmp=read_current(); if(random_addr==DS3231_HOUR) Tmp&=0x3f; return(BCD2HEX(Tmp));//都轉(zhuǎn)10進(jìn)制輸出 //BCD轉(zhuǎn)換為Byte } ///**********************************讀溫度函數(shù)***********************************/// unsigned char read_random1(unsigned char random_addr) //這個是讀溫度函數(shù) { unsigned char Tmp; write_byte(0x0e,0x20);//0x0e寄存器的CONV位置1開啟溫度轉(zhuǎn)換,要這句,溫度實時刷新,這句不要,溫度要64s才刷新1次 IIC_Start(); SendByte(DS3231_WriteAddress); if(ack==0) return(0); SendByte(random_addr); if(ack==0) return(0); Tmp=read_current(); return Tmp; } ///************************DS3231時間調(diào)整和讀出各項數(shù)據(jù)***************************************************//// void ModifyTime(unsigned char address,unsigned char num) //DS3231寫時鐘數(shù)據(jù) { unsigned char temp=0; if(address>6 && address <0) return; temp=HEX2BCD(num); write_byte(address,temp); } void read3231() //讀出DS3231的各個數(shù)據(jù) { year = read_random(DS3231_YEAR); //讀出年數(shù)據(jù) month = read_random(DS3231_MONTH); //讀出月數(shù)據(jù) day = read_random(DS3231_DAY); //讀出日數(shù)據(jù) week = read_random(DS3231_WEEK); //讀出星期數(shù)據(jù) hour = read_random(DS3231_HOUR); //讀出小時數(shù)據(jù) min = read_random(DS3231_MINUTE) ; //讀出分鐘數(shù)據(jù) sec = read_random(DS3231_SECOND); //讀出秒數(shù)據(jù) Tem_H=read_random1(DS3231_TEMPERATUREH); //讀出溫度 高字節(jié) 整數(shù)部分 Tem_L=((read_random1(DS3231_TEMPERATUREL))>>6)*0.25*100; //讀出溫度 低字節(jié) 小數(shù)部分 /* nians=year/10;niang=year%10; yues=month/10;yueg=month%10; ris=day/10;rig=day%10; shis=hour/10;shig=hour%10; fens=min/10;feng=min%10; miaos=sec/10;miaog=sec%10; */ } void Set(unsigned char sel,unsigned char selby) //年月日時分秒限定調(diào)整范圍并寫入時鐘數(shù)據(jù) { unsigned char address; char item; unsigned char max,min; if(sel==1) {address=DS3231_HOUR; max=23;min=0;} //小時 if(sel==2) {address=DS3231_MINUTE; max=59;min=0;} //分鐘 if(sel==3) {address=DS3231_SECOND; max=59;min=0;} //秒 if(sel==4) {address=DS3231_YEAR; max=99;min=0;} //年 if(sel==5) {address=DS3231_MONTH; max=12;min=1;} //月 if(sel==6) //日 { if(month==2) { if(((year%4==0)&&(year%100!=0))||(year%400==0)) //閏年2月29天 原作者if(month == 2 && year % 4 != 0) { {address=DS3231_DAY; max=29;min=1;} } else //非閏年2月28天 { {address=DS3231_DAY; max=28;min=1;} } } else { if(month==1|month==3|month==5|month==7|month==8|month==10|month==12) //大月 31天 { {address=DS3231_DAY; max=31;min=1;} } if(month==4|month==6|month==9|month==11) //小月 30天 { {address=DS3231_DAY; max=30;min=1;} } } } //if(sel==7) {address=DS3231_WEEK; max=7; min=1;} //星期 星期根據(jù)年月日數(shù)據(jù)求出,這里屏蔽掉 item= read_random(address); //DS3231讀時鐘數(shù)據(jù) if (selby==0) item++; else item--; if(item>max) item=min; if(item<min) item=max; ModifyTime(address, item); //DS3231寫時間數(shù)據(jù) } void KEY() //按鍵程序 { if(a1==0) { if(KEY1==0) { Delay5US(); if(KEY1==0) { b1=0; //10秒延時b1清零,加這句是使每次進(jìn)入設(shè)置時a1計數(shù)都能從0秒開始計數(shù)延時,極端情況剛進(jìn)設(shè)置就退出來了,因為a1始終都在循環(huán)累加 disflag++; if(disflag>=7 || KEY4==0) //如果需要手動調(diào)星期就disflag>=8 { disflag=0; } a1=1; } } } if(KEY1==1) { a1=0; } if(a2==0) { if(KEY2==0) { Delay5US(); if(KEY2==0) { b1=0; //10秒延時b1清零 Set(disflag,0); a2=1; } } } if(KEY2==1) { a2=0; } if(a3==0) { if(KEY3==0) { Delay5US(); if(KEY3==0) { b1=0; //10秒延時b1清零 Set(disflag,1); a3=1; } } } if(KEY3==1) { a3=0; } //******************************** if(a4==0) { if(KEY4==0) { Delay5US(); if(KEY4==0 && disflag!=0 ) { b1=0; //10秒延時b1清零 disflag=0; } a4=1; } } if(KEY4==1) { a4=0; } } #endif |
#include<reg51.h> //用89C52單片機(jī) #include<intrins.h> #include<18B20.h> //18B20頭文件 #include<DS3231.h> //DS1302頭文件 #include<nongli.h> //農(nóng)歷轉(zhuǎn)換頭文件 #include<ziku.h> //字庫頭文件 #include<string.h> #define uchar unsigned char #define uint unsigned int /******LCD12864通訊端口******/ sbit RS_LCD12864=P2^7; //定義選擇顯示類型, 定義數(shù)據(jù)或指令,1=數(shù)據(jù),0=指令 sbit RW_LCD12864=P2^6; //定義讀寫信號控制端, 定義讀或?qū)??1=讀,??0=寫 sbit EN_LCD12864=P2^5; //定義數(shù)據(jù)鎖存信號, 定義使能操作, 1=能,??0=否 #define LCD12864_Databus P0 //定義數(shù)據(jù)端 #define sc0 0 #define sc1 1 unsigned char fb; sbit CS1=P2^4; //定義選擇芯片右半屏信號 sbit CS2=P2^3; //定義選擇芯片左半屏信號 unsigned char shan_count; //:號閃爍計時變量 unsigned char shan_js; //校時閃爍計時變量 bit flag; //校時閃爍標(biāo)志位 void Timer0Init(); //聲明定時器初始化函數(shù) 10毫秒 /********************************LCD12864部分*****************************/ /****************************************************************************** 端口說明:EN_LCD12864:使能端鎖存信號。RS_LCD12864:D/I 命令/數(shù)據(jù)寄存器選擇端 RW_LCD12864:讀寫信號控制端. define LCD_Data P0 RS(D/I)=1,表示DB0-DB7顯示數(shù)據(jù); RS(D/I)=0,表示DB0-DB7顯示指令數(shù)據(jù) RW=1,E=1,數(shù)據(jù)被讀到DB7-DB0;RW=0,E=1--0,數(shù)據(jù)被讀到DB7-DB0;數(shù)據(jù)被 寫到IR或DR。 (定義數(shù)據(jù)端口為 LCD_Data為P0口) RST_LCD12864復(fù)位端口,不接或接高電平,低電平會導(dǎo)致復(fù)位 函數(shù)名稱:void Lcd12864_BusyChk() 函數(shù)功能:忙檢測,若忙則等待,最長等待時間為60MS(此判忙函數(shù)經(jīng)過仿真已OK) 入口參數(shù):無 出口參數(shù):無 ***********************************************************************/ void Lcd12864_BusyChk() //忙檢測,若忙則等待,最長等待時間為60MS { LCD12864_Databus=0x00; EN_LCD12864=0; RS_LCD12864=0; RW_LCD12864=1; EN_LCD12864=1; while(LCD12864_Databus&0x80); //判斷P0.7口 _nop_(); EN_LCD12864=0; } /********************************************************************** * 函數(shù)名稱: void set_xy(unsigned char x,unsigned char y) (實物時的函數(shù),已OK) * 功能描述: 設(shè)置顯示位置! X,Y分別代表橫縱坐標(biāo)! * 輸入?yún)?shù)?: unsigned char x,unsigned char y *輸出參數(shù): 無?? *參數(shù)名稱:? ?//列地址賦值,?x取值0----64,頁面地址賦值,y取值0----8 ***********************************************************************/ void set_xy(unsigned char x,unsigned char y) // 設(shè)置顯示位置! X,Y分別代表橫縱坐標(biāo)! { if (x>=64) {CS1=sc0;CS2=sc1;} //選擇右半屏 else {CS1=sc1;CS2=sc0;} //選擇左半屏 Lcd12864_BusyChk(); RS_LCD12864=0; RW_LCD12864=0; LCD12864_Databus=0x40|x; //列地址賦值,x取值0----64 EN_LCD12864=1; EN_LCD12864=0; Lcd12864_BusyChk(); RS_LCD12864=0; RW_LCD12864=0; LCD12864_Databus=0xb8|y; //頁面地址賦值,y取值0----8 EN_LCD12864=1; EN_LCD12864=0; LCD12864_Databus=0xff; } /******************************************************************************* * 函數(shù)名稱: void lw(uchar x,uchar y,uchar dd) * 功能描述: 在指定的位置顯示數(shù)據(jù) * 輸入?yún)?shù)?:(unsigned char x,unsigned char y,uchar dd) *輸出參數(shù): 無?? ?*******************************************************************************/ void Lcd12864_WriteData(unsigned char x,unsigned char y,unsigned char dd) //在指定的位置顯示數(shù)據(jù) { set_xy(x,y); Lcd12864_BusyChk(); RS_LCD12864=1; RW_LCD12864=0; LCD12864_Databus=dd; //數(shù)據(jù)送顯 EN_LCD12864=1; EN_LCD12864=0; LCD12864_Databus=0xff; } /********************************************************************** * 函數(shù)名稱: void lcd12864_Init(void)(仿真時的函數(shù),已仿真OK) * 功能描述: 顯示初始化 * 輸入?yún)?shù)?:無 * 輸出參數(shù): 無?? ***********************************************************************/ void lcd12864_Init(void) //12864 顯示初始化 { unsigned char x,y; RS_LCD12864=0; RW_LCD12864=0; EN_LCD12864=0; CS1=sc1; //選擇左半屏顯示 LCD12864_Databus=0x3f; //打開左半屏顯示 EN_LCD12864=1; EN_LCD12864=0; CS2=sc1; //選擇右半屏顯示 LCD12864_Databus=0x3f; //打開右半屏顯示 EN_LCD12864=1; EN_LCD12864=0; CS1=sc1; Lcd12864_BusyChk(); RS_LCD12864=0; RW_LCD12864=0; LCD12864_Databus=0xc0; //設(shè)置左半屏起始行,是第一行 EN_LCD12864=1; EN_LCD12864=0; CS2=sc1; Lcd12864_BusyChk(); RS_LCD12864=0; RW_LCD12864=0; LCD12864_Databus=0xc0; //設(shè)置右半屏起始行,是第一行 EN_LCD12864=1; EN_LCD12864=0; CS1=sc1; CS2=sc1; for (y=0;y<8;y++) { for (x=0;x<128;x++) Lcd12864_WriteData(x,y,0); //全屏清零顯示 } } /********************************************************************** * 函數(shù)名稱: void Lcd12864_DispWord(uchar x,uchar y,uchar n,uchar fb) * 功能描述:顯示一個漢字,n代表字表里第n個字!fb==1:反白顯示 * 輸入?yún)?shù)?:(uchar x,uchar y,uchar n,uchar fb) *輸出參數(shù): 無?? * 顯示方式為先上半部第一列,再下半部第一列,然后上半部第二列... ?***********************************************************************/ void Lcd12864_DispWord(unsigned char x,unsigned char y,unsigned char n,unsigned char fb) //顯示16X16漢字 { unsigned char i,dd; for (i=0;i<16;i++) { dd=hz[i+n*32]; if (fb) dd=255-dd; Lcd12864_WriteData(x*8+i,y,dd); //顯示漢字的上半部分 dd=hz[i+n*32+16]; if (fb) dd=255-dd; Lcd12864_WriteData(x*8+i,y+1,dd); //顯示漢字的下半部分 } } /********************************************************************** * 函數(shù)名稱:void Lcd12864_DispDaShuZi(uchar x,uchar y,uchar n,uchar fb) * 功能描述:顯示一個大的數(shù)字,n代表字表里第n個數(shù)字!fb==1:反白顯示 * 輸入?yún)?shù)?:(uchar x,uchar y,uchar n,uchar fb) * 輸出參數(shù): 無?? * 顯示方式為先上半部第一列,再下半部第一列,然后上半部第二列... ?***********************************************************************/ void Lcd12864_DispDaShuZi(unsigned char x,unsigned char y,unsigned char n,unsigned char fb) //顯示一個大的數(shù)字16X32 { unsigned char i,dd; for (i=0;i<16;i++) { dd=dazi[i+n*64]; if (fb) dd=255-dd; Lcd12864_WriteData(x*8+i,y,dd); dd=dazi[i+n*64+16]; if (fb) dd=255-dd; Lcd12864_WriteData(x*8+i,y+1,dd); //顯示大數(shù)字的上半部分 dd=dazi[i+n*64+32]; if (fb) dd=255-dd; Lcd12864_WriteData(x*8+i,y+2,dd); dd=dazi[i+n*64+48]; if (fb) dd=255-dd; Lcd12864_WriteData(x*8+i,y+3,dd); //顯示大數(shù)字的下半部分 } } /********************************************************************** * 函數(shù)名稱: void Lcd12864_DispChar(uchar x,uchar y,uchar n,uchar fb) * 功能描述: 顯示一個數(shù)字,n代表字表里第n個數(shù)字!fb==1:反白顯示 X; 0-7列,共64列, y: 0-7頁 * 功能描述: 顯示年月日,溫度的數(shù)字 * 輸入?yún)?shù)?:(uchar x,uchar y,uchar n,uchar fb) *輸出參數(shù): 無?? ?***********************************************************************/ void Lcd12864_DispChar(unsigned char x,unsigned char y,unsigned char n,unsigned char fb) //顯示年月日,溫度的數(shù)字/8X16數(shù)據(jù) { unsigned char i,dd; for (i=0;i<8;i++) { dd=number[i+n*16]; //8X16,0-9,:,-, .等 if (fb) dd=255-dd; Lcd12864_WriteData(x*8+i,y,dd); //顯示數(shù)字的上半部分 dd=number[i+n*16+8]; if (fb) dd=255-dd; Lcd12864_WriteData(x*8+i,y+1,dd); //顯示數(shù)字的下半部分 } } /*************************************************************************************** 函數(shù)名稱:void LCD12864_DispYanYueRi(fb) 函數(shù)功能:設(shè)置日期的時候,選中的參數(shù)可以反白顯示,右屏第一行顯示程序, 由which決定第幾個參數(shù)黑顯,如which==1時,年份黑顯. 入口參數(shù):無 出口參數(shù):無 ****************************************************************************************/ void LCD12864_DispYanYueRi(fb) //顯示年月日 { if(century) //如果世紀(jì)為1 { Lcd12864_DispChar(2,0,1,0); //第1行第3列顯示世紀(jì)的十位’1” Lcd12864_DispChar(3,0,9,0); //第1行第4列顯示世紀(jì)的個位’9” } else { Lcd12864_DispChar(2,0,2,0); //第1行第3列顯示世紀(jì)的十位’2” Lcd12864_DispChar(3,0,0,0); //第1行第4列顯示世紀(jì)的個位’0” } if(disflag==4 && flag==0) //校正年的時候年閃爍 { Lcd12864_DispChar(4,0,12,fb); //第1行第5不顯示年十位數(shù) Lcd12864_DispChar(5,0,12,fb); //第1行第6不顯示年個位數(shù) } else { Lcd12864_DispChar(4,0,year/10,fb); //第1行第5顯示年十位數(shù) Lcd12864_DispChar(5,0,year%10,fb); //第1行第6顯示年個位數(shù) } Lcd12864_DispChar(6,0,11,0); //第1行第7顯示第11個數(shù)據(jù)”-” if(disflag==5 && flag==0) //校正月的時候月閃爍 { Lcd12864_DispChar(7,0,12,fb); //第1行第8不顯示月十位數(shù) Lcd12864_DispChar(8,0,12,fb); //第1行第9列不顯示月個位數(shù) } else { Lcd12864_DispChar(7,0,month/10,fb); //第1行第8顯示月十位數(shù) Lcd12864_DispChar(8,0,month%10,fb); //第1行第9列顯示月個位數(shù) } Lcd12864_DispChar(9,0,11,0); //第1行第10列顯示第11個數(shù)據(jù)”-” if(disflag==6 && flag==0) //校正日期的時候日閃爍 { Lcd12864_DispChar(10,0,12,fb); //第1行第11列不顯示日十位數(shù) Lcd12864_DispChar(11,0,12,fb); //第1行第12列不顯示日個位數(shù) } else { Lcd12864_DispChar(10,0,day/10,fb); //第1行第11列顯示日十位數(shù) Lcd12864_DispChar(11,0,day%10,fb); //第1行第12列顯示日個位數(shù) } } /****************************************************************************** 函數(shù)名稱:void LCD12864_DispShiFenMiao(fb) 顯示時分秒 函數(shù)功能:設(shè)置時間的時候,選中的參數(shù)可以反白顯示,右屏第二行顯示程序, 由which決定第幾個參數(shù)黑顯,如which==1時,年份黑顯. 入口參數(shù):無 出口參數(shù):無 ***********************************************************************/ void LCD12864_DispShiFenMiao(fb) //顯示時分秒 { if(disflag==1 && flag==0) //時鐘小時的時候小時閃爍 { Lcd12864_DispDaShuZi(0,2,11,fb); //第3行第1/2列不顯示小時十位數(shù) Lcd12864_DispDaShuZi(2,2,11,fb); //第3行第3/4列不顯示小時個位數(shù) } else { if((hour/10)!=0) //10點到23點顯示小時的十位 { Lcd12864_DispDaShuZi(0,2,hour/10,fb); //第3行第1/2列顯示小時十位數(shù) Lcd12864_DispDaShuZi(2,2,hour%10,fb); //第3行第3/4列顯示小時個位數(shù) } else //0點至9點不顯示小時的十位0 { Lcd12864_DispDaShuZi(0,2,11,fb); //第3行第1/2列不顯示小時十位數(shù) Lcd12864_DispDaShuZi(2,2,hour%10,fb); //第3行第3/4列顯示小時個位數(shù) } } if(shan_count >=10 && disflag==0) //正常走時,如果shan_count>=10 ,冒號閃爍 { Lcd12864_DispDaShuZi(4,2,10,0); //第3行第5/6列第10個大數(shù)字為顯示冒號,不反白 Lcd12864_DispDaShuZi(10,2,10,0); //第3行第11/12列第10個大數(shù)字為顯示冒號,不反白 } else //大于0.5秒時兩點不顯示形成閃爍效果 { Lcd12864_DispDaShuZi(4,2,11,0); //第3行第5/6列第11個大數(shù)字為顯示空,不反白 Lcd12864_DispDaShuZi(10,2,11,0); //第3行第11/12列第11個大數(shù)字為顯示空,不反白 } if(disflag==2 && flag==0) //設(shè)置分的時候分閃爍 { Lcd12864_DispDaShuZi(6,2,11,fb); //第3行第7/8列不顯示分鐘的十位數(shù) Lcd12864_DispDaShuZi(8,2,11,fb); //第3行第9/10列不顯示分鐘的個位數(shù) } else { Lcd12864_DispDaShuZi(6,2,min/10,fb); //第3行第7/8列顯示分鐘的十位數(shù) Lcd12864_DispDaShuZi(8,2,min%10,fb); //第3行第9/10列顯示分鐘的個位數(shù) } if(disflag==3 && flag==0) //校時的時候秒閃爍 { Lcd12864_DispDaShuZi(12,2,11,fb); //第3行第13/14列不顯示秒鐘的十位數(shù) Lcd12864_DispDaShuZi(14,2,11,fb); //第3行第15/16列不顯示秒鐘的個位數(shù) } else { Lcd12864_DispDaShuZi(12,2,sec/10,fb); //第3行第13/14列顯示秒鐘的十位數(shù) Lcd12864_DispDaShuZi(14,2,sec%10,fb); //第3行第15/16列顯示秒鐘的個位數(shù) } } /****************************************************************************** 函數(shù)名稱:void LCD12864_DispWeek(fb) 顯示 周 函數(shù)功能:設(shè)置時間的時候,選中的參數(shù)可以反白顯示,右屏第一行顯示程序, 由which決定第幾個參數(shù)黑顯,如which==1時,年份黑顯. 入口參數(shù):無 出口參數(shù):無 *******************************************************************************/ void LCD12864_DispWeek() //顯示星期/周 生肖屬性 { unsigned char temp; Lcd12864_DispWord(12,0,27,0); //第1行第13列第27個漢字為顯示“周”字 Conver_week(); //調(diào)用星期陽歷數(shù)據(jù) if(week) temp=week; //賦week值為1----6,用來顯示“一”----“六” else week=26; //賦week值為0時,賦值26用來顯示“日” Lcd12864_DispWord(14,0,week,0); //第1行第14列第26個漢字為顯示“日” read3231(); //讀出DS3231的各個數(shù)據(jù) Conversion(century,year,month,day); //得到農(nóng)歷日期 if(c_moon) //century=0 為21世紀(jì),c=1 為19世紀(jì) temp=year_moon%12+12; //如果是19世紀(jì),則可直接得出年的屬性 加12是因為生肖在字庫的第13個開始 else temp=(year_moon+100)%12+12; //農(nóng)歷年也過了世紀(jì),則農(nóng)歷年加100再求屬性 加12是因為生肖在字庫的第13個開始 Lcd12864_DispWord(0,0,temp,1);// 第1行第1列 顯示十二生肖屬性 1反顯 } /****************************************************************************** 函數(shù)名稱:void LCD12864_DispNongLiRiQi(fb) 顯示 農(nóng)歷日期 函數(shù)功能:第4行農(nóng)歷顯示 由which決定第幾個參數(shù)黑顯,如which==1時,年份黑顯. 入口參數(shù):無 出口參數(shù):無 *******************************************************************************/ void LCD12864_DispNongLiRiQi() //顯示農(nóng)歷日期 { unsigned char temp1,temp2; // verify_time(); Conversion(century,year,month,day); //得到農(nóng)歷日期,世紀(jì)/年/月/日 temp1=month_moon/10; //農(nóng)歷月份高位 兩位農(nóng)歷月份求模送顯示 temp2=month_moon%10; //農(nóng)歷月份低位 兩位農(nóng)歷月份求模送顯示 //月份高位為0,低位為1,則月份前位顯"正",后位顯示“月”字 if(temp1==0&&temp2==1) //如果農(nóng)歷日期,月的十位為0,個位為1,則為正月 { Lcd12864_DispWord(0,6,39,0); //第7行第1列 顯示”正”字 Lcd12864_DispWord(2,6,25,0); //第7行第3列 顯示”月”字 } //月份高位為0,低位都大于等于2,則月份高位顯月份,后位顯月。 else if (temp1==0&&temp2>=2) { Lcd12864_DispWord(0,6,temp2,0);//第7行第1列 顯示月份 Lcd12864_DispWord(2,6,25,0); //第7行第3列 顯示”月”字 } //月份高位為1,低位為0,則月份高位顯“十”,后位顯月。 else if (temp1==1&&temp2==0) { Lcd12864_DispWord(0,6,0,0); //第7行第1列 顯示”十”字 Lcd12864_DispWord(2,6,25,0); //第7行第3列 顯示”月”字 } //月份高位為1,低位為1,則月份高位顯“冬”,后位顯月。 else if (temp1==1&&temp2==1) { Lcd12864_DispWord(0,6,29,0); //第7行第1列 顯示”冬”字 Lcd12864_DispWord(2,6,25,0); //第7行第3列 顯示”月”字 } else { Lcd12864_DispWord(0,6,30,0); //第7行第1列 顯示”臘”字 Lcd12864_DispWord(2,6,25,0); //第7行第3列 顯示”月”字 } temp1=day_moon/10; //農(nóng)歷日期高位 兩位農(nóng)歷日期求模送顯示 temp2=day_moon%10; //農(nóng)歷日期地位 兩位農(nóng)歷日期求余送顯示 switch (temp1) { //日期高位為0,則前位顯“初” case 0: Lcd12864_DispWord(4,6,10,0); //第7行第5列 顯示”初”字 Lcd12864_DispWord(6,6,temp2,0);//第7行第7列 顯示低位字 break; //日期高位為1且低位不為0,則前位顯“十” case 1: if(temp2) { Lcd12864_DispWord(4,6,0,0); //第7行第5列 顯示”十”字 Lcd12864_DispWord(6,6,temp2,0); //第7行第7列 顯示低位農(nóng)歷月份 break; } else //日期高位為1且低位為0,則顯“初十” { Lcd12864_DispWord(4,6,10,0); //第7行第5列 顯示”初”字 Lcd12864_DispWord(6,6,0,0); //第7行第7列 顯示”十”字 break; } //日期高位為2,則前位顯“廿” case 2: Lcd12864_DispWord(4,6,11,0); //第7行第5列 顯示”"廿"字 Lcd12864_DispWord(6,6,temp2,0); //第7行第7列 顯示低位農(nóng)歷月份 break; //日期高位為3,則前位顯“三”,低位顯“十” case 3: Lcd12864_DispWord(4,6,3,0); //第7行第5列 顯示”三”字 Lcd12864_DispWord(6,6,temp2,0); //第7行第7列 顯示低位農(nóng)歷月份 break; } } void Lcd12864_DispTemp() //溫度顯示程序 正顯 { if(temp_flag==1)//溫度為正數(shù)標(biāo)志 { if((t_b==0)&(t_s==0))//10度以下時不顯示十位 { Lcd12864_DispWord(8,6,40,0); //第7行第9列10列固定顯示溫度"!"圖標(biāo),16X16數(shù)據(jù) Lcd12864_DispChar(10,6,t_g,0); //第7行第11列/顯示個位數(shù)據(jù) 8*16數(shù)據(jù) Lcd12864_DispChar(11,6,13,0); //第7行第12列/顯示數(shù)據(jù)為“.”字符 8*16數(shù)據(jù) Lcd12864_DispChar(12,6,t_x,0); //第7行第13列/顯示小數(shù)位 8*16數(shù)據(jù) Lcd12864_DispChar(13,6,12,0); //第7行第14列/(12)不顯示 8*16數(shù)據(jù) 第四位/1反白0正顯示 } else { Lcd12864_DispWord(8,6,40,0); //第7行第9列10列固定顯示溫度"!"圖標(biāo),16X16數(shù)據(jù) Lcd12864_DispChar(10,6,t_s,0); //第7行第11列/顯示十位數(shù)據(jù) 8*16數(shù)據(jù) Lcd12864_DispChar(11,6,t_g,0); //第7行第12列/顯示個位數(shù)據(jù) 8*16數(shù)據(jù) Lcd12864_DispChar(12,6,13,0); //第7行第13列/顯示數(shù)據(jù)為“.”字符 8*16數(shù)據(jù) Lcd12864_DispChar(13,6,t_x,0); //第7行第14列/顯示小數(shù)位 8*16數(shù)據(jù) } } /* if(temp_flag==0)//溫度為負(fù)數(shù)時 { Lcd12864_DispWord(8,6,40,0); //第7行第9列10列固定顯示溫度"!"圖標(biāo),16X16數(shù)據(jù) Lcd12864_DispChar(10,6,11,0); //第7行第11列/顯示-負(fù)號 8*16數(shù)據(jù) Lcd12864_DispChar(11,6,f_g,0); //第7行第12列/顯示負(fù)溫度個位數(shù)據(jù) 8*16數(shù)據(jù) Lcd12864_DispChar(12,6,13,0); //第7行第13列/顯示數(shù)據(jù)為“.”字符 8*16數(shù)據(jù) Lcd12864_DispChar(13,6,f_x,0); //第7行第14列/顯示負(fù)溫度小數(shù)位數(shù)據(jù) 8*16數(shù)據(jù) } */ Lcd12864_DispWord(14,6,28,0); //第7行第15列16列固定顯示溫度"℃"圖標(biāo),16X16數(shù)據(jù) } /****************************************************************************** 函數(shù)名稱:void Lcd12864_DispTime() 顯示 日期與時鐘 函數(shù)功能://第一行顯示年月日8X16數(shù)字,最后為周 //第二行顯示時分秒,大數(shù)字 //第三行顯示農(nóng)歷,溫度 入口參數(shù):無 出口參數(shù):無 *******************************************************************************/ void Lcd12864_DispTime() //顯示日期與時鐘子程序 { LCD12864_DispYanYueRi(0); //第一行顯示年月日 LCD12864_DispShiFenMiao(0); //第二行顯示時分秒,大數(shù)字 LCD12864_DispWeek(); //第一行顯示星期 生肖 LCD12864_DispNongLiRiQi(); //第三行顯示農(nóng)歷 } /*主程序*/ void main(void) { Timer0Init(); //10毫秒@11.0592MHz lcd12864_Init(); //液晶初始化,此函數(shù)只起清屏的作用 century=0; //對世紀(jì)賦初值 while(1) { read3231(); //讀出DS3231的各個數(shù)據(jù) GetTemp(); //讀取溫度函數(shù) Lcd12864_DispTemp(); //溫度顯示處理函數(shù) KEY(); //按鍵程序 Lcd12864_DispTime(); //這里調(diào)用顯示時間程序 } } void Timer0Init(void) //10毫秒@11.0592MHz { TMOD=0x01;//設(shè)定定時器工作方式1,定時器定時50毫秒 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;//開總中斷 ET0=1;//允許定時器0中斷 TR0 = 1; //定時器0開始計時 } /**************定時器0 中斷函數(shù)******************/ void timer0() interrupt 1 { TH0=(65536-50000)/256; //1次中斷50毫秒 TL0=(65536-50000)%256; shan_count++; //時鐘:號閃爍計數(shù) shan_js++; //校時閃爍計數(shù) if(shan_count == 20) //:號閃爍,亮0.5秒,滅0.5秒;閃爍頻率可調(diào)。 { shan_count = 0; b1++; //10秒延時b1自加 } if(b1>10) //10秒延時 { b1=0; //10秒延時b1清零 disflag=0; //設(shè)置標(biāo)志位清零 } if(shan_js == 10) //250ms閃爍一次 { shan_js = 0; flag = !flag; //250毫秒標(biāo)志位 } } |
hnxtlxx 發(fā)表于 2023-6-2 06:47 朋友,我是業(yè)余玩玩的,這有半年沒弄過了,不記得當(dāng)時改了那些地方,壓縮上傳我也不會弄,我試試把所有文件貼在這里看行不行 |
niehaitao 發(fā)表于 2022-12-18 09:30 請教大佬,我做出來后,按鍵減少調(diào)整不了,并且秒鐘的調(diào)整有問題,請問大佬怎么解決的,謝謝。如果解決了,能共享一下程序嗎?感激不盡 |
按鍵調(diào)整減貌似有問題,另外就是調(diào)秒鐘時,秒鐘數(shù)字亂跳,還有鬧鐘無法調(diào)整 |
IMG_20230601_231400.jpg (218.9 KB, 下載次數(shù): 125)
請問各位大佬,1302的晶振焊在哪里,能發(fā)個電路圖嗎?非常感謝 |
謝謝分享,制作精良,外觀漂亮。 |
太厲害了,小白仰慕 |
謝謝分享,制作精良,外觀漂亮。 |
要對作者支持鼓勵··謝謝分享 |
hchi2006 發(fā)表于 2022-11-22 22:58 用的不帶字庫屏 |
紫氣東來 發(fā)表于 2022-12-4 15:32 你會讓24064顯示就可以自己改顯示部分啊,或者搜索一下,比如這個顯示 |
紫氣東來 發(fā)表于 2022-12-20 14:23 不帶字庫的,程序里面有自建的字庫文件 |
niehaitao 發(fā)表于 2022-12-18 09:30 12864帶不帶字庫 |
謝謝分享,已經(jīng)制作成功,稍微作了下改動,原來秒的兩點是顯示1秒滅1秒,加了定時器大約500毫秒亮500毫秒滅,然后把小時的十位在是0的時候不顯示 |
51hei圖片_20221218092339.jpg (127.68 KB, 下載次數(shù): 145)
51hei圖片_20221218092349.jpg (127.17 KB, 下載次數(shù): 148)
51hei圖片_20221218093016.jpg (121.03 KB, 下載次數(shù): 149)
謝謝分享萬年歷。 |
非常好,還沒有仔細(xì)看,非常精煉,我寫的沒帶萬年歷還有近4K字節(jié),要借鑒一下 |
要是能用在24064屏就好了,因為我手頭就一個24064的屏 |
這么好的東東怎么沒人頂呀,我正想學(xué)習(xí)呢,請問樓主用的屏帶中文字庫的嗎?看仿真好像不帶喲。謝謝樓主無私奉獻(xiàn)! |
Powered by 單片機(jī)教程網(wǎng)