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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > C51單片機(jī)模塊化編程萬(wàn)年歷設(shè)計(jì)

          C51單片機(jī)模塊化編程萬(wàn)年歷設(shè)計(jì)

          作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏
          原文地址:歷設(shè)計(jì)作者:給力哈哈




          程序如下:
          main.h

          本文引用地址:http://www.ex-cimer.com/article/201611/320760.htm

          #ifndef __MAIN_H__
          #define __MAIN_H__

          #include
          #include
          #include
          #define uchar unsigned char
          #define uint unsigned int
          #define DQ P3_7
          #endif

          ds18b20.h

          #include "main.h"
          uint sec;
          uint min=41;
          uint hour=18;
          uint day=20;
          uint month=4;
          uint yearl=11;
          uint yearh=20;
          uint tcnt;
          uint cursor=0;
          uchar a=0xff;
          uchar code Seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

          void delay(uint t)
          {
          uint i;
          while(t--)
          {for (i=0;i<125;i++);}
          }
          void Tdelay(unsigned int i)
          {
          while(i--);
          }
          void Kdelay(unsigned int z)
          {
          uchar i,j;
          for(i=0;i for(j=248;j>0;j--);
          }
          Init_DS18B20(void)
          {
          unsigned char x = 0;
          DQ = 1;
          Tdelay(200);
          DQ=0;
          Tdelay(80);
          DQ=1;
          Tdelay(200);
          Tdelay(200);
          }
          //讀一個(gè)字節(jié)
          ReadOneChar(void)
          {
          unsigned char i=0;
          unsigned char dat = 0;
          for (i=8;i>0;i--)
          {
          DQ = 0;
          dat>>=1;
          DQ = 1;
          if(DQ)
          dat|=0x80;
          Tdelay(4);
          }
          return(dat);
          }

          //寫(xiě)一個(gè)字節(jié)
          WriteOneChar(unsigned char dat)
          {
          unsigned char i=0;
          for (i=8; i>0; i--)
          {
          DQ = 0;
          DQ = dat&0x01;
          Tdelay(5);
          DQ = 1;
          dat>>=1;
          }
          }

          //讀取溫度
          ReadTemperature(void)
          {
          unsigned char a=0;
          unsigned char b=0;
          unsigned int t=0;
          float tt=0;
          Init_DS18B20();
          WriteOneChar(0xCC);
          WriteOneChar(0x44);
          Init_DS18B20();
          WriteOneChar(0xCC);
          WriteOneChar(0xBE);
          a=ReadOneChar();
          b=ReadOneChar();
          t=b;
          t<<=8;
          t=t|a;
          tt=t*0.0625;
          t= tt*10+0.5;
          return(t);
          }

          void display(uchar L1,uchar L2,uchar L3,uchar L4,uchar L5,uchar L6,uchar L7,uchar L8,uchar L9,uchar L10,uchar L11,uchar L12,uchar L13,uchar L14,uchar L15,uchar L16)
          {
          P2=0x7F;P0=L1;delay(1); //yearh
          P2=0xBF;P0=L2;delay(1); //yearh
          if(cursor==6){P2=0xDF;P0=L3;delay(1);}else{P2=0xDF;P0=L3;delay(1);} //yearl
          if(cursor==6){P2=0xEF;P0=L4;delay(1);}else{P2=0xEF;P0=L4;delay(1);} //yearl
          if(cursor==5){P2=0xF7;P0=L5;delay(1);}else{P2=0xF7;P0=L5;delay(1);} //month
          if(cursor==5){P2=0xFB;P0=L6;delay(1);}else{P2=0xFB;P0=L6;delay(1);} //month
          if(cursor==4){P2=0xFD;P0=L7;delay(1);}else{P2=0xFD;P0=L7;delay(1);} //day
          if(cursor==4){P2=0xFE;P0=L8;delay(1);}else{P2=0xFE;P0=L8;delay(1);} //day
          P2=0xFF;
          if(cursor==3){P1=0x7F;P0=L9;delay(1);}else{P1=0x7F;P0=L9;delay(1);} //hour
          if(cursor==3){P1=0xBF;P0=L10;delay(1);}else{P1=0xBF;P0=L10;delay(1);} //hour
          if(cursor==2){P1=0xDF;P0=L11;delay(1);}else{P1=0xDF;P0=L11;delay(1);} //min
          if(cursor==2){P1=0xEF;P0=L12;delay(1);}else{P1=0xEF;P0=L12;delay(1);} //min
          if(cursor==1){P1=0xF7;P0=L13;delay(1);}else{P1=0xF7;P0=L13;delay(1);} //sec
          if(cursor==1){P1=0xFB;P0=L14;delay(1);}else{P1=0xFB;P0=L14;delay(1);} //sec
          P1=0xFD;P0=L15;delay(1); //temp
          P1=0xFE;P0=L16;delay(1); //temp
          P1=0xFF;
          }

          main.c

          #include "main.h"
          #include "ds18B20.h"
          void delay(uint t);
          void Tdelay(unsigned int i);
          void Kdelay(unsigned int z);
          Init_DS18B20(void);
          ReadOneChar(void);
          WriteOneChar(unsigned char dat);
          ReadTemperature(void);
          void display(uchar L1,uchar L2,uchar L3,uchar L4,uchar L5,uchar L6,uchar L7,uchar L8,uchar L9,uchar L10,uchar L11,uchar L12,uchar L13,uchar L14,uchar L15,uchar L16);
          main()
          {
          uint i;
          TMOD=0x02; //設(shè)置模式為定時(shí)器T0的模式2 (8位自動(dòng)重裝計(jì)數(shù)初值的計(jì)數(shù)值)
          TH0=0x06; //設(shè)置計(jì)數(shù)器初值,靠TH0存儲(chǔ)重裝的計(jì)數(shù)值X0=256-250=6
          TL0=0x06;
          TR0=1; //啟動(dòng)T0
          ET0=1; //開(kāi)啟定時(shí)器T0中斷允許
          EA=1; //開(kāi)啟中斷總控制
          while(1)
          {
          if(P3_0==0)
          {
          Kdelay(200);
          if(P3_0==0)
          {
          cursor++;
          if(cursor>=7){cursor=0;}
          }
          }
          if(P3_1==0)
          {
          Kdelay(200);
          if(P3_1==0)
          {
          if(cursor==1){sec++;if(sec==60)sec=0;}
          if(cursor==2){min++;if(min==60)min=0;}
          if(cursor==3){hour++;if(hour==24)hour=0;}
          if(cursor==4){day++;if(day==31)day=0;}
          if(cursor==5){month++;if(month==12)month=0;}
          if(cursor==6){yearl++;if(yearl==100)yearl=0;}
          if(cursor==7){yearh++;if(yearh==30)yearh=20;}
          }
          }
          if(P3_2==0)
          {
          Kdelay(200);
          if(P3_2==0)
          {
          if(cursor==1){sec--;}
          if(cursor==2){min--;}
          if(cursor==3){hour--;}
          if(cursor==4){day--;}
          if(cursor==5){month--;}
          if(cursor==6){yearl--;}
          if(cursor==7){yearh--;}
          }
          }
          i=ReadTemperature();
          display(Seg[yearh/10],Seg[yearh],Seg[yearl/10],Seg[yearl],Seg[month/10],Seg[month],Seg[day/10],Seg[day],Seg[hour/10],Seg[hour],Seg[min/10],Seg[min],Seg[sec/10],Seg[sec],Seg[i/100],Seg[i/10]);
          }
          }

          void t0(void)interrupt 1 using 0 //t0的中斷程序
          {
          tcnt++;
          if(tcnt==4000)//定時(shí)器的定時(shí)計(jì)數(shù),4000次250us為1秒
          {
          tcnt=0;
          P3_3=~P3_3;
          a=~a;
          sec++;
          if(sec==60)
          {
          sec=0;
          min++;
          if(min==60)
          {
          min=0;
          hour++;
          if(hour==24)
          {
          hour=0;
          day++;
          if(month==2&&((yearl==0&&yearh%4==0)||(yearl!=0&&yearl%4==0))&&day==30)day=1;
          else if(month==2&&day==29)day=1;
          else if((month==4||month==6||month==9||month==11)&&day==31)day=1;
          else if(day==32)day=1;
          if(day==1)
          {
          month++;
          if(month==13)
          {
          month=1;
          yearl++;
          if(yearl==100)
          {
          yearl=0;
          yearh++;
          if(yearh==100)
          {
          yearh=20;
          }
          }
          }
          }
          }
          }
          }
          }
          }



          評(píng)論


          技術(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); })();