|
基于51單片機(jī)和12864液晶的多功能萬年歷全套資料.
萬年歷實(shí)物圖:
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件):
單片機(jī)源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- /************************12864端口定義*******************************************/
- #define dataport P0 //12864數(shù)據(jù)口
- sbit rs=P2^0; //指令/數(shù)據(jù)端口
- sbit rw=P2^1; //讀/寫端口
- sbit en=P2^2; //使能端口
- sbit psb=P2^3; //并口/串口端口(本萬年歷采用并口)
- sbit rst=P2^5; //復(fù)位端口
- /********************************************************************************/
- /***********************DS1302端口定義*******************************************/
- sbit clock_rst=P3^7; //1302復(fù)位管腳定義
- sbit clock_dat=P2^6; //1302I/O管腳定義
- sbit clock_clk=P2^7; //1302時鐘管腳定義
- /***************寄存器定義(用于記錄1302IO的輸入和輸出)*************************/
- sbit a0=ACC^0;
- sbit a1=ACC^1;
- sbit a2=ACC^2;
- sbit a3=ACC^3;
- sbit a4=ACC^4;
- sbit a5=ACC^5;
- sbit a6=ACC^6;
- sbit a7=ACC^7;
- /********************DS18B20端口定義*********************************************/
- /********************************************************************************/
- sbit DQ=P3^4; //DS18B20數(shù)據(jù)端口
- /********************************************************************************/
- /******************18B20全局變量定義*********************************************/
- uchar temp; //溫度全局變量(整數(shù)部分)
- uint xs; //溫度全局變量(小數(shù)部分)
- /********************************************************************************/
-
- /**********************1302全局變量定義******************************************/
- uchar sec,min,hour,day,month,week,year1,year2=20;//秒,分,時,日,月,星期,年
- /************************蜂鳴器端口定義******************************************/
- sbit beep=P3^5;
- uchar num;
- /***********************按鍵定義*************************************************/
- sbit key1=P3^0;
- sbit key2=P3^1;
- sbit key3=P3^2;
- sbit key4=P3^3;
- uchar set=0; //set=0時顯示首頁,1時顯示次頁
- uchar status=0;//按鍵功能選擇定義(年0,月1,日2,時3,分4 )
- /********************************************************************************/
- uchar code month_week[12]={6,2,3,6,1,4,6,2,5,7,3,5}; //2000年各月頭天星期表
- uchar code year_code[300]={0x0C,0x96,0x45, /*2000*/ 0x4d,0x4A,0xB8, /*2001*/ //2002~2099年農(nóng)歷表
- 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*/
- };
- uint code month_day1[12]={0,31,59,90,120,151,181,212,243,273,304,334};//平年月份累計(jì)天數(shù)表
- uint code month_day2[12]={0,31,60,91,121,152,182,213,244,274,305,335};//閏年月份累計(jì)天數(shù)表
- uint table_addr; //查農(nóng)歷表的地址全局變量
- uchar year1_n,month_n,day_n; //農(nóng)歷年月日全局變量
- uchar month_r; //農(nóng)歷閏月全局變量,無時為0
- /**********************延時函數(shù)*************************************************/
- void delay(uint t)
- {
- uint b;
- for(;t;t--)
- for(b=0;b<121;b++);
- }
- /*******************************************************************************/
- /**************************12864子函數(shù)******************************************/
- /**********************檢查忙信號子函數(shù)*****************************************/
- void busy()
- {
- rs=0; //指令操作
- rw=1; //讀操作
- dataport=0xff; //數(shù)據(jù)端口置位
- en=1; //使能
- while(dataport&0x80); //等待數(shù)據(jù)端口位7為0
- en=0; //取消使能
- }
- /************************寫指令函數(shù)*********************************************/
- void write_code(uchar c)
- {
- busy(); //檢查忙標(biāo)志
- rs=0; //指令操作
- rw=0; //寫操作
- dataport=c; //送指令到端口
- en=1; //使能
- delay(1); //稍微延時
- en=0; //取消使能
- }
- /************************寫數(shù)據(jù)函數(shù)*********************************************/
- void write_data(uchar d)
- {
- busy(); //檢查忙標(biāo)志
- rs=1; //數(shù)據(jù)操作
- rw=0; //寫操作
- dataport=d; //送數(shù)據(jù)到端口
- en=1; //使能
- delay(1); //稍微延時
- en=0; //取消延時
- }
- /***********************寫漢字**************************************************/
- void write_hz(uchar *hz)
- {
- while(*hz>0)
- {
- write_data(*hz); //寫入漢字
- hz++;
- }
- }
-
- /***************************初始化12864*****************************************/
- void init_12864()
- {
- psb=1; //并口方式
- rst=1; //復(fù)位端置高
- write_code(0x30); //8位數(shù)據(jù)傳送,基本指令操作
- delay(10);
- write_code(0x0c); //無光標(biāo),不反白
- delay(10);
- write_code(0x01); //清除顯示
- delay(10);
- write_code(0x40); //光標(biāo)左移,字符不動
- delay(10);
- }
- /*******************************************************************************/
- /*************************DS1302子函數(shù)******************************************/
- /************************1302寫驅(qū)動函數(shù)*****************************************/
- void write_clock(uchar dat)
- {
- ACC=dat;
- clock_dat=a0; clock_clk=1; clock_clk=0; //數(shù)據(jù)在上升沿變化
- clock_dat=a1; clock_clk=1; clock_clk=0; //下降沿寫入1302
- clock_dat=a2; clock_clk=1; clock_clk=0;
- clock_dat=a3; clock_clk=1; clock_clk=0;
- clock_dat=a4; clock_clk=1; clock_clk=0;
- clock_dat=a5; clock_clk=1; clock_clk=0;
- clock_dat=a6; clock_clk=1; clock_clk=0;
- clock_dat=a7; clock_clk=1; clock_clk=0;
- }
- /************************1302讀驅(qū)動函數(shù)*****************************************/
- uchar read_clock()
- {
- clock_dat=1; //輸出賦1
- a0=clock_dat;clock_clk=1; clock_clk=0; //位0為1,讀1302
- a1=clock_dat;clock_clk=1; clock_clk=0; //下降沿讀出有效
- a2=clock_dat;clock_clk=1; clock_clk=0;
- a3=clock_dat;clock_clk=1; clock_clk=0;
- a4=clock_dat;clock_clk=1; clock_clk=0;
- a5=clock_dat;clock_clk=1; clock_clk=0;
- a6=clock_dat;clock_clk=1; clock_clk=0;
- a7=clock_dat;clock_clk=1; clock_clk=0;
- return(ACC);
- }
- /***************************寫數(shù)據(jù)入1302****************************************/
- void write_dat_clock(uchar add,uchar dat)
- {
- clock_clk=0;
- clock_rst=0; //時鐘脈沖為低時
- clock_rst=1; //復(fù)位端才能置高
- write_clock(add); //寫入地址(命令字節(jié))
- write_clock(dat); //寫入數(shù)據(jù)
- clock_rst=0; //終止數(shù)據(jù)傳送
- clock_clk=1;
- }
- /***************************從1302讀出數(shù)據(jù)**************************************/
- uchar read_dat_clock(uchar add)
- {
- uchar dat=0; //定義數(shù)據(jù)儲存變量
- clock_clk=0;
- clock_rst=0;
- clock_rst=1;
- write_clock(add); //寫入要讀數(shù)據(jù)的地址
- dat=read_clock(); //讀出數(shù)據(jù)
- clock_rst=0; //終止數(shù)據(jù)傳送
- clock_clk=1;
- return dat; //返回?cái)?shù)據(jù)
- }
- /**************************設(shè)置初始時間函數(shù)*************************************/
- void set_time()
- {
- write_dat_clock(0x8e,0x00); //允許寫操作
- write_dat_clock(0x8c,0x09); //年
- write_dat_clock(0x8a,0x03); //星期
- write_dat_clock(0x88,0x10); //月
- write_dat_clock(0x86,0x14); //日
- write_dat_clock(0x84,0x21); //小時
- write_dat_clock(0x82,0x56); //分
- write_dat_clock(0x80,0x00); //秒,且振蕩器工作
- //write_dat_clock(0x90,0xa5); //充電
- write_dat_clock(0x8e,0x80); //禁止寫操作
- }
- /*****************************讀取時間******************************************/
- void get_time()
- {
- sec=read_dat_clock(0x81); //讀取秒
- sec=(sec>>4)*10+(sec&0x0f); //秒二進(jìn)制轉(zhuǎn)換
- min=read_dat_clock(0x83); //讀取分鐘
- min=(min>>4)*10+(min&0x0f); //分二進(jìn)制轉(zhuǎn)換
- hour=read_dat_clock(0x85); //讀取小時
- hour=(hour>>4)*10+(hour&0x0f);//小時二進(jìn)制轉(zhuǎn)換
- day=read_dat_clock(0x87); //讀取日期
- day=(day>>4)*10+(day&0x0f); //日期二進(jìn)制轉(zhuǎn)換
- month=read_dat_clock(0x89); //讀取月份
- month=(month>>4)*10+(month&0x0f);//月二進(jìn)制轉(zhuǎn)換
- week=read_dat_clock(0x8b); //讀取星期
- week=(week>>4)*10+(week&0x0f);//星期二進(jìn)制轉(zhuǎn)換
- year1=read_dat_clock(0x8d); //讀取年份
- year1=(year1>>4)*10+(year1&0x0f); //年份二進(jìn)制轉(zhuǎn)換
- }
- /*************************DS18B20各子函數(shù)***************************************/
- /*************************DS18B20延時函數(shù)***************************************/
- void delay_DS18B20(uint i)
- {
- for(;i;i--);
- }
- /*************************DS18B20初始化函數(shù)*************************************/
- void init_DS18B20()
- {
- DQ=1; //DQ復(fù)位
- delay_DS18B20(1); //稍作延時
- DQ=0; //產(chǎn)生復(fù)位脈沖
- delay_DS18B20(160); //精確延時,大于480us
- DQ=1; //拉高總線
- delay_DS18B20(5); //等待20us左右
- while(DQ); //等待DS18B20發(fā)出存在脈沖
- delay_DS18B20(30); //脈沖持續(xù)100us左右
- }
- /*****************************寫一個字節(jié)****************************************/
- void write_onechar(uchar dat)
- {
- uchar i;
- for(i=8;i>0;i--)
- {
- DQ=0;
- DQ=dat&0x01;
- delay_DS18B20(3);
- DQ=1;
- dat>>=1;
- }
- }
- /*****************************讀一個字節(jié)****************************************/
- uchar read_onechar()
- {
- uchar i;
- uchar dat;
- for(i=8;i>0;i--)
- {
- DQ=0; //總線拉低
- dat>>=1; //維持一個指令時間
- DQ=1; //拉高總線
- if(DQ) //讀數(shù)據(jù)
- dat|=0x80;
- delay_DS18B20(20); //維持60us
- }
- return dat;
- }
- /*************************讀取溫度數(shù)值******************************************/
- uchar read_tem()
- {
- uchar ltemp; //定義溫度低字節(jié)
- uchar htemp; //定義溫度高字節(jié)
- uchar t; //定義溫度整數(shù)部分返回值
- init_DS18B20();
- write_onechar(0xcc); //跳過讀序號列號的操作
- write_onechar(0x44); // 啟動溫度轉(zhuǎn)換
- init_DS18B20();
- write_onechar(0xcc); //跳過讀序號列號的操作
- write_onechar(0xbe); //讀取溫度寄存器
- ltemp=read_onechar(); //讀取溫度低字節(jié)
- htemp=read_onechar(); //讀取溫度高字節(jié)
- ltemp=ltemp>>4; //低字節(jié)右移4位,去掉小數(shù)位
- t=htemp<<4; //高字節(jié)左移4位,去掉符號位
- t|=ltemp; //合并整數(shù)部分
- xs=ltemp&0x0f; //小數(shù)部分賦予xs
- xs*=0.625; //計(jì)算小數(shù)部分的數(shù)值
- return t; //返回溫度整數(shù)部分?jǐn)?shù)值
- }
- /******************************************************************************/
- /*****************************按鍵功能函數(shù)*************************************/
- void key_1() //選擇變量函數(shù)
- {
- key1=1;
- if(key1==0)
- {
- delay(10);
- if(key1==0)
- {
- if(++status>5)status=0; //1控制年的變化,2控制月的變化,3控制日的變化
- } //4控制時的變化,5控制分的變化
- while(key1==0);
- }
- }
- /******************************************************************************/
- void key_2() //加函數(shù)
- {
- key2=1;
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- switch(status)
- {
- case 1:if(++year1>99)year1=0;break;
- case 2:if(++month>12)month=1;break;
- case 3:if(++day>31)day=1;break;
- case 4:if(++hour>=24)hour=0;break;
- case 5:if(++min>=60)min=0;break;
- }
- }
- while(key2==0);
- }
- }
- /*****************************************************************************/
- void key_3()//減函數(shù)
- {
- key3=1;
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- switch(status)
- {
- case 1:if((year1--)<=0)year1=99;break;
- case 2:if((month--)<=1)month=12;break;
- case 3:if((day--)<=1)day=31;break;
- case 4:if((hour--)<=0)hour=23;break;
- case 5:if((min--)<=0)min=59;break;
- }
- }
- while(key3==0);
- }
- }
- /*****************************************************************************/
- void key_4() //選擇變量函數(shù)
- {
- key4=1;
- if(key4==0)
- {
- delay(10);
- if(key4==0)
- {
- if(++set>1)set=0;//0顯示首頁,1顯示次頁
- }
- write_code(0x01); //清除一下顯示屏
- while(key4==0);
- }
- }
- /*****************************************************************************/
- void key_time() //按鍵設(shè)置時間的處理
- {
- write_dat_clock(0x8e,0x00); //允許寫操作
- write_dat_clock(0x8c,(year1/10)*16+year1%10); //年
- write_dat_clock(0x8a,(week/10)*16+week%10); //星期
- write_dat_clock(0x88,(month/10)*16+month%10); //月
- write_dat_clock(0x86,(day/10)*16+day%10); //日
- write_dat_clock(0x84,(hour/10)*16+hour%10); //小時
- write_dat_clock(0x82,(min/10)*16+min%10); //分
- write_dat_clock(0x8e,0x80); //禁止寫操作
- }
- /*****************************************************************************/
- /***********************平閏年設(shè)定********************************************/
- bit prp(uchar y)
- {
- uint temp;
- temp=2000+y;
- if(((temp%4)==0)&&((temp%100)!=0)||((temp%400)==0))
- return 1;
- else
- return 0;
- }
- /***********************某年月日星期設(shè)定**************************************/
- void d_week()
- {
- uchar x,y;
- x=year1/4;
- y=year1%4;
- if(month<3)
- week=((x*5+2+(y-1)+(day-1))%7+month_week[month-1])%7;
- else
- week=((x*5+y+(day-1))%7+month_week[month-1])%7;
- }
- /***********************某年月日農(nóng)歷設(shè)定**************************************/
- uchar get_moon_day(uchar m,uint ta)//農(nóng)歷月天數(shù)判定函數(shù)
- {
- uchar temp;
- switch(m)
- {
- case 1:temp=year_code[ta]&0x08;break;
- case 2:temp=year_code[ta]&0x04;break;
- case 3:temp=year_code[ta]&0x02;break;
- case 4:temp=year_code[ta]&0x01;break;
- case 5:temp=year_code[ta+1]&0x80;break;
- case 6:temp=year_code[ta+1]&0x40;break;
- case 7:temp=year_code[ta+1]&0x20;break;
- case 8:temp=year_code[ta+1]&0x10;break;
- case 9:temp=year_code[ta+2]&0x08;break;
- case 10:temp=year_code[ta+2]&0x04;break;
- case 11:temp=year_code[ta+2]&0x02;break;
- case 12:temp=year_code[ta+2]&0x01;break;
- case 13:temp=year_code[ta+2]&0x80;break;
- }
- if(temp==0)
- return 29;
- else
- return 30;
- }
- /**********************某年農(nóng)歷閏月設(shè)定**************************************/
- uchar get_month_r(uchar y)
- {
- uchar temp,ta;
- ta=y*3;
- temp=(year_code[ta]&0xf0)>>4;
- return temp;
- }
- /*********************陽歷轉(zhuǎn)化農(nóng)歷*******************************************/
- void convert_yinyan(uchar year1,uchar month,uchar day)
- {
- uchar month_n1,day_n1;//春節(jié)公歷月日
- uint temp1,temp2; //值轉(zhuǎn)移變量
- table_addr=year1*3;
- month_n1=(year_code[table_addr+2]&0x60)>>5;//農(nóng)歷正月所在月數(shù)
- day_n1=year_code[table_addr+2]&0x1f; //農(nóng)歷正月所在當(dāng)月日數(shù)
- month_r=get_month_r(year1); //計(jì)算當(dāng)年閏月
- if(month_n1==1) //春節(jié)離當(dāng)年元旦天數(shù)
- temp1=day_n1-1;
- else
- temp1=30+day_n1-1;
- if(prp(year1))//次年是否為閏年
- temp2=month_day2[month-1]+day-1;
- else
- temp2=month_day1[month-1]+day-1;
- if(temp2>=temp1)//次月日在春節(jié)后否
- {
- year1_n=year1;
- month_n=1;
- temp2=temp2-temp1;
- temp1=get_moon_day(month_n,table_addr); //當(dāng)月天數(shù)計(jì)算
- while(temp2>=temp1)
- {
- month_n++;
- temp2=temp2-temp1;
- temp1=get_moon_day(month_n,table_addr);
- }
- day_n=temp2+1;
- }
- else
- {
- year1_n=year1-1;
- temp1=temp1-temp2;
- table_addr=table_addr-3;
- month_r=get_month_r(year1-1);
- if(month_r==0) //若當(dāng)年沒有閏月
- month_n=12;
- else
- month_n=13;
- temp2=get_moon_day(month_n,table_addr);
- while(temp1>=temp2)
- {
- month_n--;
- temp1=temp1-temp2;
- temp2=get_moon_day(month_n,table_addr);
- }
- }
-
- }
-
- /***********************特殊功能子函數(shù)***************************************/
- /**************************星期設(shè)定******************************************/
- void xingqi()
- {
- d_week();
- switch(week)
- {
- case 1:write_hz("一");break;
- case 2:write_hz("二");break;
- case 3:write_data(0xc8);write_data(0xfd);break;
- case 4:write_hz("四");break;
- case 5:write_hz("五");break;
- case 6:write_hz("六");break;
- case 0:write_hz("日");break;
- default:break;
- }
- }
- /*************************生肖年設(shè)定*****************************************/
- void shengxiao()
- {
- uchar sx=year1%12;
- switch(sx)
- {
- case 0:write_hz("龍");break;
- case 1:write_hz("蛇");break;
- case 2:write_hz("馬");break;
- case 3:write_hz("羊");break;
- case 4:write_hz("猴");break;
- case 5:write_hz("雞");break;
- case 6:write_hz("狗");break;
- case 7:write_hz("豬");break;
- case 8:write_hz("鼠");break;
- case 9:write_hz("牛");break;
- case 10:write_hz("虎");break;
- case 11:write_hz("兔");break;
- default:break;
- }
- }
- /************************天干地支設(shè)定****************************************/
- void tgdz()
- {
- uchar tiangan=year1_n%10;
- uchar dizhi=year1_n%12;
- switch(tiangan)
- {
- case 4:write_hz("甲");break;
- case 5:write_hz("乙");break;
- case 6:write_hz("丙");break;
- case 7:write_hz("丁");break;
- case 8:write_hz("戊");break;
- case 9:write_hz("己");break;
- case 0:write_data(0xb8);write_data(0xfd);break;
- case 1:write_hz("辛");break;
- case 2:write_hz("壬");break;
- case 3:write_hz("葵");break;
- default:break;
- }
- switch(dizhi)
- {
- case 8:write_hz("子");break;
- case 9:write_hz("丑");break;
- case 10:write_hz("寅");break;
- case 11:write_hz("卯");break;
- case 0:write_hz("辰");break;
- case 1:write_hz("巳");break;
- case 2:write_hz("午");break;
- case 3:write_hz("未");break;
- case 4:write_hz("申");break;
- case 5:write_hz("酉");break;
- case 6:write_hz("戌");break;
- case 7:write_hz("亥");break;
- default:break;
- }
- }
- /*******************農(nóng)歷月設(shè)定**********************************************/
- void nongli_m()
- {
- if(month_n==0)
- {
- switch(month_n)
- {
- case 1: write_hz(" ");write_data(0xd5);write_data(0xfd);break; //正
- case 2: write_hz(" 二");break;
- case 3: write_hz(" ");write_data(0xc8);write_data(0xfd);break; //三
- case 4: write_hz(" 四");break;
- case 5: write_hz(" 五");break;
- case 6: write_hz(" 六");break;
- case 7: write_hz(" 七");break;
- case 8: write_hz(" 八");break;
- case 9: write_hz(" 九");break;
- case 10:write_hz(" 十");break;
- case 11:write_hz(" 十一");break;
- case 12:write_hz(" 十二");break;
- }
- }
- else
- {
- if((month_n-1)==month_r)
- {
- switch(month_n-1)
- {
- case 1: write_hz(" 閏一");break;
- case 2: write_hz(" 閏二");break;
- case 3: write_hz(" 閏");write_data(0xc8);write_data(0xfd);break;
- case 4: write_hz(" 閏四");break;
- case 5: write_hz(" 閏五");break;
- case 6: write_hz(" 閏六");break;
- case 7: write_hz(" 閏七");break;
- case 8: write_hz(" 閏八");break;
- case 9: write_hz(" 閏九");break;
- case 10:write_hz(" 閏十");break;
- case 11:write_hz("閏十一");break;
- case 12:write_hz("閏十二");break;
- }
- }
- else if(month_n<=month_r)
- {
- switch(month_n)
- {
- case 1: write_hz(" ");write_data(0xd5);write_data(0xfd);break;
- case 2: write_hz(" 二");break;
- case 3: write_hz(" ");write_data(0xc8);write_data(0xfd);break;
- case 4: write_hz(" 四");break;
- case 5: write_hz(" 五");break;
- case 6: write_hz(" 六");break;
- case 7: write_hz(" 七");break;
- case 8: write_hz(" 八");break;
- case 9: write_hz(" 九");break;
- case 10:write_hz(" 十");break;
- case 11:write_hz(" 十一");break;
- case 12:write_hz(" 十二");break;
- }
- }
- else
- {
- switch(month_n-1)
- {
- case 2: write_hz(" 二");break;
- case 3: write_hz(" ");write_data(0xc8);write_data(0xfd);break;
- case 4: write_hz(" 四");break;
- case 5: write_hz(" 五");break;
- case 6: write_hz(" 六");break;
- case 7: write_hz(" 七");break;
- case 8: write_hz(" 八");break;
- case 9: write_hz(" 九");break;
- case 10:write_hz(" 十");break;
- case 11:write_hz(" 十一");break;
- case 12:write_hz(" 十二");break;
- }
- }
- }
- }
- /***********************農(nóng)歷日設(shè)定******************************************/
- void nongli_d()
- {
- switch(day_n)
- {
- case 1: write_hz("初一 ");break;
- case 2: write_hz("初二 ");break;
- case 3: write_hz("初");write_data(0xc8);write_data(0xfd);write_hz(" ");break;
- case 4: write_hz("初四 ");break;
- case 5: write_hz("初五 ");break;
- case 6: write_hz("初六 ");break;
- case 7: write_hz("初七 ");break;
- case 8: write_hz("初八 ");break;
- case 9: write_hz("初九 ");break;
- case 10:write_hz("初十 ");break;
- case 11:write_hz("十一 ");break;
- case 12:write_hz("十二 ");break;
- case 13:write_hz("十");write_data(0xc8);write_data(0xfd);write_hz(" ");break;
- case 14:write_hz("十四 ");break;
- case 15:write_hz("十五 ");break;
- case 16:write_hz("十六 ");break;
- case 17:write_hz("十七 ");break;
- case 18:write_hz("十八 ");break;
- case 19:write_hz("十九 ");break;
- case 20:write_hz("廿十 ");break;
- case 21:write_hz("廿十一");break;
- case 22:write_hz("廿十二");break;
- case 23:write_hz("廿十");write_data(0xc8);write_data(0xfd);break;
- case 24:write_hz("廿十四");break;
- case 25:write_hz("廿十五");break;
- case 26:write_hz("廿十六");break;
- case 27:write_hz("廿十七");break;
- case 28:write_hz("廿十八");break;
- case 29:write_hz("廿十九");break;
- case 30:write_data(0xc8);write_data(0xfd);write_hz("十");write_hz(" ");break;
- }
- }
-
- /************************節(jié)日函數(shù)*******************************************/
- void holiday()
- {
- while(1){
- if(status==1) {write_hz(" 調(diào)整年份 ");break;}
- if(status==2) {write_hz(" 調(diào)整月份 ");break;}
- if(status==3) {write_hz(" 調(diào)整日期 ");break;}
- if(status==4) {write_hz(" 調(diào)整小時 ");break;}
- if(status==5) {write_hz(" 調(diào)整分鐘 ");break;}
- if(month==1&&day==1) {write_hz(" 新年元旦 ");break;}
- if(month==2&&day==14) {write_hz(" 今日情人節(jié) ");break;}
- if(month==3&&day==8) {write_hz(" 國際婦女節(jié) ");break;}
- if(month==3&&day==12) {write_hz(" 中國植樹節(jié) ");break;}
- if(month==3&&day==15) {write_hz("世界消費(fèi)者權(quán)益日");break;}
- if(month==4&&day==1) {write_hz(" 愚人節(jié) ");break;}
- if(month==5&&day==1) {write_hz(" 國際勞動節(jié) ");break;}
- if(month==5&&day==4) {write_hz(" 中國青年節(jié) ");break;}
- if(month==5&&day==8) {write_hz(" 世界紅十字日 ");break;}
- if(month==5&&day==12) {write_hz(" 國際護(hù)士節(jié) ");break;}
- if(month==6&&day==1) {write_hz(" 國際兒童節(jié) ");break;}
- if(month==6&&day==26) {write_hz(" 國際禁毒日 ");break;}
- if(month==7&&day==1) {write_hz("中國共產(chǎn)黨誕生日");break;}
- if(month==7&&day==7) {write_hz("抗日戰(zhàn)爭紀(jì)念日 ");break;}
- if(month==8&&day==1) {write_hz(" 中國建軍節(jié) ");break;}
- if(month==8&&day==12) {write_hz(" 國際青年節(jié) ");break;}
- if(month==9&&day==10) {write_hz(" 中國教師節(jié) ");break;}
- if(month==10&&day==1) {write_hz(" 國慶節(jié) ");break;}
- if(month==10&&day==24) {write_hz(" 聯(lián)合國日 ");break;}
- if(month==10&&day==31) {write_hz(" 萬圣節(jié) ");break;}
- if(month==12&&day==1) {write_hz(" 世界艾滋病日 ");break;}
- if(month==12&&day==25) {write_hz(" 圣誕節(jié) ");break;}
- if(hour>=4&&hour<6) {write_hz("凌晨了,ZZZ~~~");break;}
- if(hour>=6&&hour<8) {write_hz("主人,早上好!");break;}
- if(hour>=8&&hour<12) {write_hz("__●__上午▲▲__");break;}
- if(hour==12) {write_hz("午休時間到咯~");break;}
- if(hour>=13&&hour<18) {write_hz("下午茶時間^_^");break;}
- if(hour>=18&&hour<22) {write_hz(" 晚上了額 ~");break;}
- if(hour>=22&&hour<=23) {write_hz("該準(zhǔn)備睡咯~~~");break;}
- if(hour>=0&&hour<4) {write_hz("你,睡了嗎?Z~");break;}
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
(015)基于51單片機(jī)和12864液晶的多功能萬年歷全套資料.rar
(706.53 KB, 下載次數(shù): 264)
2017-5-15 21:08 上傳
點(diǎn)擊文件名下載附件
|
評分
-
查看全部評分
|