公歷陽(yáng)歷轉(zhuǎn)陰歷農(nóng)歷C51程序鍵盤數(shù)碼管成功_第1頁(yè)
公歷陽(yáng)歷轉(zhuǎn)陰歷農(nóng)歷C51程序鍵盤數(shù)碼管成功_第2頁(yè)
公歷陽(yáng)歷轉(zhuǎn)陰歷農(nóng)歷C51程序鍵盤數(shù)碼管成功_第3頁(yè)
公歷陽(yáng)歷轉(zhuǎn)陰歷農(nóng)歷C51程序鍵盤數(shù)碼管成功_第4頁(yè)
公歷陽(yáng)歷轉(zhuǎn)陰歷農(nóng)歷C51程序鍵盤數(shù)碼管成功_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、/* 實(shí) 驗(yàn) 名 : 動(dòng)態(tài)顯示數(shù)碼管實(shí)驗(yàn)* 使用的IO : 數(shù)碼管使用P0,P2.2,P2.3,P2.4* 實(shí)驗(yàn)效果 : 數(shù)碼管顯示76543210。* 注 意 :*/#include<reg51.h>#include<stdio.h>#define GPIO_DIG P0/數(shù)碼管顯示#define GPIO_KEY P1/鍵盤sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;sbit K3=P32;/外部中斷unsigned char code DataTab404=/日期差/上大小月/下大小月/閏月月份及大小0x46,0x43,0x21,

2、0x00,/19990x35,0x15,0x51,0x00,/20000x23,0x11,0x52,0x41,0x42,0x12,0x65,0x00,0x31,0x11,0x32,0x00,0x21,0x42,0x52,0x21,0x39,0x52,0x25,0x00,/20050x28,0x25,0x04,0x71,0x48,0x66,0x42,0x00,0x37,0x33,0x22,0x00,0x25,0x15,0x24,0x51,0x44,0x25,0x52,0x00,/20100x33,0x22,0x65,0x00,0x22,0x21,0x25,0x41,0x40,0x24,0x52,

3、0x00,0x30,0x52,0x42,0x91,0x49,0x55,0x05,0x00, /20150x38,0x26,0x44,0x00,0x27,0x53,0x50,0x60,0x46,0x53,0x24,0x00,0x35,0x25,0x54,0x00,0x24,0x41,0x52,0x41, /20200x42,0x45,0x25,0x00,0x31,0x24,0x52,0x00,0x21,0x51,0x12,0x21,0x40,0x55,0x11,0x00,0x28,0x32,0x21,0x61, /20250x47,0x26,0x61,0x00,0x36,0x13,0x31,0x

4、00,0x25,0x05,0x31,0x51,0x43,0x12,0x54,0x00,0x33,0x51,0x25,0x00, /20300x22,0x42,0x25,0x31,0x41,0x32,0x22,0x00,0x30,0x55,0x02,0x71,0x49,0x55,0x22,0x00,0x38,0x26,0x62,0x00, /20350x27,0x13,0x64,0x60,0x45,0x13,0x32,0x00,0x34,0x12,0x55,0x00,0x23,0x10,0x53,0x51,0x42,0x22,0x45,0x00, /20400x31,0x52,0x22,0x00

5、,0x21,0x52,0x44,0x21,0x40,0x55,0x44,0x00,0x29,0x26,0x50,0x71,0x47,0x26,0x64,0x00, /20450x36,0x25,0x32,0x00,0x25,0x23,0x32,0x50,0x44,0x44,0x55,0x00,0x32,0x24,0x45,0x00,0x22,0x55,0x11,0x30, /20500x41,0x33,0x10,0x00,0x31,0x55,0x40,0x81,0x49,0x55,0x50,0x00,0x38,0x46,0x64,0x00,0x27,0x45,0x65,0x60, /20550

6、x45,0x05,0x32,0x00,0x34,0x45,0x15,0x00,0x23,0x26,0x23,0x40,0x42,0x25,0x21,0x00,0x32,0x33,0x21,0x00, /20600x20,0x43,0x21,0x31,0x39,0x15,0x51,0x00,0x28,0x12,0x52,0x71,0x47,0x12,0x65,0x00,0x35,0x11,0x32,0x00, /20650x25,0x50,0x52,0x51,0x44,0x52,0x25,0x00,0x33,0x26,0x22,0x00,0x22,0x52,0x42,0x41,0x41,0x53

7、,0x22,0x00, /20700x30,0x25,0x44,0x81,0x49,0x25,0x52,0x00,0x37,0x22,0x65,0x00,0x26,0x22,0x25,0x61,0x45,0x24,0x52,0x00, /20750x35,0x52,0x45,0x00,0x23,0x25,0x05,0x41,0x42,0x26,0x44,0x00,0x32,0x53,0x24,0x00,0x21,0x23,0x30,0x31, /20800x39,0x45,0x54,0x00,0x28,0x43,0x14,0x71,0x47,0x45,0x25,0x00,0x36,0x24,0

8、x52,0x00,0x25,0x55,0x12,0x50, /20850x44,0x55,0x11,0x00,0x33,0x26,0x50,0x00,0x23,0x52,0x61,0x41,0x40,0x13,0x31,0x00,0x29,0x05,0x51,0x81, /20900x48,0x12,0x55,0x00,0x37,0x11,0x25,0x00,0x26,0x45,0x25,0x60,0x45,0x52,0x22,0x00,0x35,0x55,0x21,0x00, /20950x24,0x25,0x42,0x41,0x42,0x26,0x62,0x00,0x31,0x13,0x5

9、2,0x00,0x20,0x03,0x32,0x21 /2099;unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼unsigned char code so_m_d12=31,28,31,30,31,30,31,31,30,31,30,31;/公歷該月的天數(shù)unsigned char DisplayData8;/用來(lái)存放要顯示的8位數(shù)的值unsigned

10、 char TempData8;unsigned char TurnData4;/轉(zhuǎn)換用于取出數(shù)據(jù)表的四個(gè)數(shù)據(jù)unsigned char KeyValue;/用來(lái)存放讀取到的鍵值unsigned char KV;char year_soH;char year_so;/公歷年月日char month_so;char day_so;int SumDar_so;/char型位數(shù)不夠,出現(xiàn)瓶頸char year_lu;/農(nóng)歷年月日char month_lu;char day_lu;int SumDar_lu;int n,H;void DigDisplay(); /動(dòng)態(tài)顯示函數(shù)void Delay10m

11、s(); /延時(shí)10msvoid KeyDown(); /檢測(cè)按鍵函數(shù)void KeyShow(); /檢測(cè)鍵值并顯示void Turn();/陽(yáng)歷轉(zhuǎn)換陰歷/int LMP(int LP);int month12_lu(int month_a ,unsigned char month_b,unsigned char month_c);/* 函 數(shù) 名 : main* 函數(shù)功能 : 主函數(shù)* 輸 入 : 無(wú)* 輸 出 : 無(wú)*/void main()year_lu=0;/農(nóng)歷年月日month_lu=0;day_lu=0;KeyShow(); /設(shè)置INT0IT0=1;/跳變沿出發(fā)方式(下降沿)E

12、X0=1;/打開(kāi)INT0的中斷允許。EA=1;/打開(kāi)總中斷while(1) DigDisplay();/顯示if(KV=1)/進(jìn)中斷Turn(); /轉(zhuǎn)換程序 /* 函 數(shù) 名 : KeyShow* 函數(shù)功能 : 檢測(cè)有按鍵按下并顯示鍵值* 輸 入 : 無(wú)* 輸 出 : 無(wú)*/void KeyShow()unsigned char i=0;int j=0;int q,u=0;SumDar_so=0;LSA=0; /給一個(gè)數(shù)碼管提供位選LSB=0;LSC=0;while(i<=7)GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)/讀取按鍵是否按下Delay10ms();/延

13、時(shí)10ms進(jìn)行消抖if(GPIO_KEY!=0x0f)/再次檢測(cè)鍵盤是否按下KeyDown();/讀取鍵值if(KeyValue<=9)/鍵值有效TempDatai=KeyValue;/將按鍵輸入的8位數(shù)存在寄存器中DisplayDatai=DIG_CODEKeyValue;/將查到的值送到顯示數(shù)據(jù)寄存器i+;DigDisplay();/顯示DigDisplay();/顯示 DigDisplay();/顯示year_soH=(int)(TempData0); /從寄存器中讀取公歷年份year_soH=year_soH*10+(int)(TempData1);year_so=(int)(T

14、empData2); /從寄存器中讀取公歷年份year_so=year_so*10+(int)(TempData3);month_so=(int)(TempData4);month_so=month_so*10+(int)(TempData5);/讀取公歷月day_so=(int)(TempData6);day_so=day_so*10+(int)(TempData7);/讀取公歷月j=month_so-1;for(q=0;q<j;q+)u=so_m_dq;SumDar_so=SumDar_so+u;SumDar_so=SumDar_so+day_so;H=SumDar_so;if(j&

15、gt;1)/J>1需要考慮公歷閏年if(year_so%4=0)SumDar_so=SumDar_so+1; /* 函 數(shù) 名 : Turn* 函數(shù)功能 : 陽(yáng)歷轉(zhuǎn)陰歷* 輸 入 : 無(wú)* 輸 出 : 無(wú)*/ void Turn() unsigned char Temp;unsigned char L_Temp;unsigned char y;unsigned char sy;unsigned char xy;unsigned char L_y;unsigned char L_sy;unsigned char L_xy;unsigned char ry;unsigned char Z;u

16、nsigned char F;unsigned char Z_y;unsigned char F_y;unsigned char Z_r;unsigned char F_r;int j,k,m,p,T;int l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,LastMonth;p=year_soH*100+year_so;/年份20*年Temp=(p-2000+1)*4;/公歷年份*4再去查表,存入轉(zhuǎn)化暫存器y=DataTabTemp;/上半年的數(shù)據(jù)Temp+;sy=DataTabTemp;Temp+;/下半年的數(shù)據(jù)xy=DataTabTemp;Temp+;/閏月

17、的月份和大小ry=DataTabTemp;/BCD碼轉(zhuǎn)十進(jìn)制,求出差值n=10*(int)(y&0xf0)>>4)+(int)(y&0x0f);/天數(shù)差值SumDar_lu=SumDar_so-n; /農(nóng)歷總天數(shù)k = (int)(ry&0xf0)>>4);/閏月月份m =30 - (int)(ry&0x0f);/閏月的天數(shù)l1=month12_lu(1,sy,xy);/農(nóng)歷1月多少天l2=month12_lu(2,sy,xy);/農(nóng)歷1月多少天l3=month12_lu(3,sy,xy);/農(nóng)歷1月多少天l4=month12_lu(4,

18、sy,xy);/農(nóng)歷1月多少天l5=month12_lu(5,sy,xy);/農(nóng)歷1月多少天l6=month12_lu(6,sy,xy);/農(nóng)歷1月多少天l7=month12_lu(7,sy,xy);/農(nóng)歷1月多少天l8=month12_lu(8,sy,xy);/農(nóng)歷1月多少天l9=month12_lu(9,sy,xy);/農(nóng)歷1月多少天l10=month12_lu(10,sy,xy);/農(nóng)歷1月多少天l11=month12_lu(11,sy,xy);/農(nóng)歷1月多少天l12=month12_lu(12,sy,xy);/農(nóng)歷1月多少天T=SumDar_so;if(T<n) /如果跨年L_T

19、emp=(p-2000)*4;/去年公歷年份*4再去查表,存入轉(zhuǎn)化暫存器L_y=DataTabL_Temp;/上半年的數(shù)據(jù)L_Temp+;L_sy=DataTabL_Temp;L_Temp+;/下半年的數(shù)據(jù)L_xy=DataTabL_Temp;if (n-T)>31)month_lu=11; /跨年到去年的11月LastMonth=month12_lu(12,L_sy,L_xy);day_lu=n-SumDar_so-LastMonth;LastMonth=month12_lu(1,L_sy,L_xy);day_lu=LastMonth-day_lu; day_lu=day_lu+1;2

20、if(n)>0)&&(n-T)<=31)month_lu=12; /跨年到去年的12月LastMonth=month12_lu(12,L_sy,L_xy);day_lu=LastMonth-(n-T);else /沒(méi)有跨年if(SumDar_lu-l1)>0)if(SumDar_lu-l2-l1)>0)if(SumDar_lu-l3-l2-l1)>0)if(SumDar_lu-l4-l3-l2-l1)>0)if(SumDar_lu-l5-l4-l3-l2-l1)>0) if(SumDar_lu-l6-l5-l4-l3-l2-l1)>

21、;0)if(SumDar_lu-l7-l6-l5-l4-l3-l2-l1)>0)if(SumDar_lu-l8-l7-l6-l5-l4-l3-l2-l1)>0)if(SumDar_lu-l9-l8-l7-l6-l5-l4-l3-l2-l1)>0)if(SumDar_lu-l10-l9-l8-l7-l6-l5-l4-l3-l2-l1)>0)if(SumDar_lu-l11-l10-l9-l8-l7-l6-l5-l4-l3-l2-l1)>0)month_lu=12;day_lu=SumDar_lu-l11-l10-l9-l8-l7-l6-l5-l4-l3-l2-l1;

22、elsemonth_lu=11;day_lu=SumDar_lu-l10-l9-l8-l7-l6-l5-l4-l3-l2-l1;elsemonth_lu=10;day_lu=SumDar_lu-l9-l8-l7-l6-l5-l4-l3-l2-l1;elsemonth_lu=9;day_lu=SumDar_lu-l8-l7-l6-l5-l4-l3-l2-l1; elsemonth_lu=8;day_lu=SumDar_lu-l7-l6-l5-l4-l3-l2-l1;elsemonth_lu=7;day_lu=SumDar_lu-l6-l5-l4-l3-l2-l1;elsemonth_lu=6;d

23、ay_lu=SumDar_lu-l5-l4-l3-l2-l1;elsemonth_lu=5;day_lu=SumDar_lu-l4-l3-l2-l1;elsemonth_lu=4;day_lu=SumDar_lu-l3-l2-l1;elsemonth_lu=3;day_lu=SumDar_lu-l2-l1;elsemonth_lu=2;day_lu=SumDar_lu-l1;elsemonth_lu=1;day_lu=SumDar_lu;if(k!=0)/有農(nóng)歷閏月if(month_lu-k)>=1)/在第二個(gè)閏月,月減一,日不變if(day_lu>m) /跨月 day_lu=1;

24、else/沒(méi)夸,月減一,日不變month_lu=month_lu-1;/正好在第一個(gè)閏月,月份不變/顯示程序T=SumDar_so;/if(SumDar_so<n) /如果跨年if(T<n) /如果跨年if(year_so=0)/是2000年 DisplayData0=DIG_CODE1; DisplayData1=DIG_CODE9; DisplayData2=DIG_CODE9; DisplayData3=DIG_CODE9;else /公歷不是2000年year_lu=year_so-1;DisplayData0=DIG_CODE2;DisplayData1=DIG_CODE

25、0;Z= year_lu/10;F= year_lu%10;DisplayData2=DIG_CODEZ;DisplayData3=DIG_CODEF;else/沒(méi)跨年year_lu=year_so; DisplayData0=DIG_CODE2;DisplayData1=DIG_CODE0;Z= year_lu/10;F= year_lu%10;DisplayData2=DIG_CODEZ;DisplayData3=DIG_CODEF;Z_y= month_lu/10;F_y= month_lu%10;Z_r=day_lu/10;F_r=day_lu%10;DisplayData4=DIG_

26、CODEZ_y;DisplayData5=DIG_CODEF_y;DisplayData6=DIG_CODEZ_r;DisplayData7=DIG_CODEF_r; /* 函 數(shù) 名 : Int0()interrupt 0* 函數(shù)功能 : 外部中斷0的中斷函數(shù)* 輸 入 : 無(wú)* 輸 出 : 無(wú)*/void Int0()interrupt 0/外部中斷0的中斷函數(shù)Delay10ms();/延時(shí)10ms進(jìn)行消抖if(K3=0) KV=1;/* 函 數(shù) 名 : month12_lu* 函數(shù)功能 : 查出那個(gè)農(nóng)月多少天* 輸 入 : 農(nóng)歷的月份,查表所得農(nóng)歷月份數(shù)據(jù)* 輸 出 : 返回該農(nóng)歷月份天

27、數(shù)*/int month12_lu(int month_a, unsigned char month_b,unsigned char month_c)switch(month_a)case 1:if(month_b&0x40) return 29; else return 30;case 2:if(month_b&0x20) return 29; else return 30;case 3:if(month_b&0x10) return 29; else return 30;case 4:if(month_b&0x04) return 29; else retu

28、rn 30;case 5:if(month_b&0x02) return 29; else return 30;case 6:if(month_b&0x01) return 29; else return 30;case 7:if(month_c&0x40) return 29; else return 30;case 8:if(month_c&0x20) return 29; else return 30;case 9:if(month_c&0x10) return 29; else return 30;case 10:if(month_c&0

29、x04) return 29; else return 30;case 11:if(month_c&0x02) return 29; else return 30;case 12:if(month_c&0x01) return 29; else return 30;case 13:return 1000;default:return 0; /* 函 數(shù) 名 : KeyDown* 函數(shù)功能 : 檢測(cè)有按鍵按下并讀取鍵值* 輸 入 : 無(wú)* 輸 出 : 無(wú)*/void KeyDown(void)char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)/讀取按鍵是否按下Delay10ms();/延時(shí)10ms進(jìn)行消抖if(GPIO_KEY!=0x0f)/再次檢測(cè)鍵盤是否按下/測(cè)試列GPIO_KEY=0X0F;switch(GPIO_KEY)case(0X07):KeyValue=0;break;case(0X0b):KeyValue=1;break;case(0X0d):

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論