




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 租地合同附屬協(xié)議
- 山東省濟(jì)寧市任城區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 湖南省郴州市2024-2025學(xué)年高一上學(xué)期期末考試生物學(xué)試題(含答案)
- 離婚協(xié)議書條款補(bǔ)充協(xié)議
- 初中數(shù)學(xué)競(jìng)賽指導(dǎo)策略訓(xùn)練課教案
- 水務(wù)工程設(shè)計(jì)與施工合同管理協(xié)議
- 非謂語(yǔ)動(dòng)詞的用法與解析:高中英語(yǔ)語(yǔ)法
- (一模)2025屆安徽省“江南十?!备呷?lián)考地理試卷(含官方答案)
- 電氣物資知識(shí)培訓(xùn)課件
- 水療產(chǎn)品知識(shí)培訓(xùn)課件
- GA 1383-2017報(bào)警運(yùn)營(yíng)服務(wù)規(guī)范
- 高低壓開(kāi)關(guān)柜安裝檢驗(yàn)記錄
- 益生菌精品課件
- 一級(jí)公司向二級(jí)公司授權(quán)管理制度
- 沃爾瑪全國(guó)的分布
- (自考)財(cái)務(wù)管理學(xué)完整版課件全套ppt教程(最新)
- 第四紀(jì)地質(zhì)與環(huán)境:第十一章 第四紀(jì)氣候變遷及其動(dòng)力機(jī)制
- 小學(xué)生心理健康講座-(精)
- 蝴蝶豌豆花(課堂PPT)
- 口腔修復(fù)學(xué)-第七章-牙列缺失的全口義齒修復(fù)
- Y-Y2系列電機(jī)繞組標(biāo)準(zhǔn)數(shù)據(jù)匯總
評(píng)論
0/150
提交評(píng)論