<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用單片機(jī)制作月份計(jì)算器

          用單片機(jī)制作月份計(jì)算器

          作者: 時(shí)間:2012-09-14 來(lái)源:網(wǎng)絡(luò) 收藏

          /*yy C program
          *硬件描述:P0口接,a-P0.0……dp-P0.7,P1.7、P1.6、P1.5、P1.4為位碼,
          輸出低電平有效,s41接P3.4,切換鍵,s40接P3.3,輸入鍵。
          功能:輸入年份和月份后計(jì)算該月的天數(shù),s41鍵做狀態(tài)設(shè)定(輸入年、月、顯示天數(shù)的切換,
          s40鍵用作輸入鍵。開(kāi)機(jī)后按s40輸入年份低兩位,按下s41鍵,輸入年份的高兩位,再按下s41鍵
          輸入月份,再按下s41鍵,顯示該月份的天數(shù)。
          參考:《電子制作2006》
          完整代碼下載地址: http://www.51hei.com/ziliao/file/yuef.rar */

          #include reg51.h>#define uchar unsigned char#define uint unsigned intuchar code SEG7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};sbit P17=P1^7;//千位sbit P16=P1^6;//百位sbit P15=P1^5;//十位sbit P14=P1^4;//個(gè)位sbit P33=P3^3;sbit P34=P3^4;uchar ACT[4]={0xef,0xdf,0xbf,0x7f};//數(shù)碼管的位選碼//=================================uchar status_flag;uint year;uchar month;uchar day;uchar temp_year_l,temp_month;uchar temp_year_h;//=================================void delay(uint k){uint i,j;for(i=0;ik;i++){for(j=0;j121;j++){;}}}//=================================void key_s41(){P3=0xff;if(P3==0xef)status_flag++;if(status_flag>3)status_flag=0;//status變化范圍0~3(只能輸入年份低位、年份高位、月份和顯示天數(shù)4種狀態(tài))}//=================================void key_s40(){P3=0xff;if(P3==0xf7){switch(status_flag){case 0:temp_year_l++; //status_flag為0,為年份低兩位輸入狀態(tài)if(temp_year_l>99)temp_year_l=0;break;case 1:temp_year_h++; //status_flag為1,為年份高兩位輸入狀態(tài)if(temp_year_h>99)temp_year_h=0;break;case 2:temp_month++;  //status_flag為2,為月份輸入狀態(tài)if(temp_month>12)temp_month=1;break;default:break;     }  }}uchar conv(uint year,uchar month){uchar len;switch(month){case 1:len=31;break;case 3:len=31;break;case 5:len=31;break;case 7:len=31;break;case 8:len=31;break;case 10:len=31;break;case 12:len=31;break;case 4:len=30;break;case 6:len=30;break;case 9:len=30;break;case 11:len=30;break;case 2:if(year%4==0year%100!=0||year%400==0)len=29;else len=28;break;default:return 0;break;//如果輸入月份出錯(cuò),天數(shù)返回0}return len;}void main(){uchar i;uint temp1,temp2;while(1){key_s41();//P41(p3.4)切換鍵,為0時(shí)輸入年份低兩位,為1時(shí)輸入年份高兩位,為2時(shí)輸入月份switch(status_flag){case 0:key_s40();//p3.3,輸入鍵temp1=temp_year_l;case 1:key_s40();temp2=temp_year_h;case 2:key_s40();month=temp_month;break;default:break;}year=temp1+(temp2*100);day=conv(year,month);for(i=0;i40;i++){switch(status_flag){case 0: case 1: P0=SEG7[year%10];P1=ACT[0];delay(1);P0=SEG7[(year%100)/10];P1=ACT[1];delay(1);P0=SEG7[(year/100)%10];P1=ACT[2];delay(1);P0=SEG7[year/1000];P1=ACT[3];delay(1);break;case 2:P0=SEG7[month%10];P1=ACT[0];delay(1);P0=SEG7[month/10];P1=ACT[1];delay(1);break;case 3:if(day){ P0=SEG7[day%10];P1=ACT[2];delay(1);P0=SEG7[day/10];P1=ACT[3];delay(1);break;}else {P0=0x00,P1=0x0f;delay(400);P0=0xff,P1=0xff;delay(400);P0=0x00,P1=0x0f;delay(400);P0=0xff,P1=0xff;delay(400);}break;//返回天數(shù)為說(shuō)明出錯(cuò),數(shù)碼管閃爍default :break;//一項(xiàng)也不符合,則直接退出} }}}


          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();