<cite id="nnfl3"><span id="nnfl3"></span></cite>
      <meter id="nnfl3"></meter>

      <track id="nnfl3"></track>
      <del id="nnfl3"><span id="nnfl3"><big id="nnfl3"></big></span></del>

      <nobr id="nnfl3"></nobr>

          電子萬年歷設計

          、電子萬年歷:用C語言設計一個年歷系統,功能要求: (1)輸入任一年將顯示...

          /*
          1、閏年的算法:
          如果某年能被4整除但不能被100整除,
          或者能被400整除,
          則該年是閏年.
          用表達式表示就是
          (year %4 == 0 && year%100 != 0) || (year%400 == 0)
          2、計算某一天是星期幾:
          已知1900年的1月1號為星期一,
          然后就可以用某一天和1900年的1月1號相差的天數對7取余來求星期,
          本題是用的公元1年的1月1號作為基準
          */
          #include <stdio.h>
          #include<conio.h>
          #include<stdlib.h>
          int IsLeapYear(int); //函數定義
          void main()
          {
          int i;
          int day;
          int year;
          int temp;
          int temp_i;
          long int Year_days = 0;
          int Year_Start = 1;
          int Per_Year_Days;
          int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};
          printf("Please enter the year: ");
          scanf("%d",&year); //輸入年份
          while(Year_Start < year) //從公元1年開始執行while循環, 該年的一月一號為星期一
          {
          if( IsLeapYear( Year_Start ) )
          Per_Year_Days = 366; //如果是閏年, 則一年有366天
          else
          Per_Year_Days = 365; //如果不是閏年, 則一年有365天
          Year_days = Year_days + Per_Year_Days; //Year_days為從公元1年到輸入年份的前一年的天數的總和
          Year_Start++;
          }
          for( temp = 1; temp <=12; temp++ ) //temp從1到12, 對應一年內12個月
          {
          switch( temp ) //用switch語句將temp和12個月對應起來
          {
          case 1:
          printf(" January(%d)\n",year); //一月
          break;
          case 2:
          printf(" February(%d)\n",year); //二月
          break;
          case 3:
          printf(" March(%d)\n",year); //三月
          break;
          case 4:
          printf(" April(%d)\n",year); //四月
          break;
          case 5:
          printf(" May(%d)\n",year); //五月
          break;
          case 6:
          printf(" June(%d)\n",year); //六月
          break;
          case 7:
          printf(" July(%d)\n",year); //七月
          break;
          case 8:
          printf(" August(%d)\n",year); //八月
          break;
          case 9:
          printf(" September(%d)\n",year); //九月
          break;
          case 10:
          printf(" October(%d)\n",year); //十月
          break;
          case 11:
          printf(" November(%d)\n",year); //十一月
          break;
          case 12:
          printf(" December(%d)\n",year); //十二月
          break;
          }
          i = Year_days % 7; //每個星期有7天, 故用每年的天數對7取余
          printf("Mon\tTue\tWed\tThu\tFri\tSat\tSun\n");
          if( i != 0 ) //如果余數不為零
          for( temp_i = 0; temp_i < i; temp_i++)
          printf("\t"); //則打印空格(這里用\t代替空格, 更加美觀), 空格數為i
          day = 1; //初始化day為1, 為下面的while循環做準備
          if( IsLeapYear(year) && temp == 2) //如果輸入的年份是閏年, 并且月份為2
          while( day <= month_day[12] ) //day為一循環變量, 取值為1-365(閏年的話為1-366)
          {
          if( day >1 ) //如果天數大于一
          if( Year_days % 7 == 0 ) //如果是星期日, 則換行
          printf("\n");
          if( day >= 10 )
          printf("%d\t",day); //打印天數+空格
          else
          printf("%d\t",day);
          Year_days++;
          day++;
          }
          else //如果不滿足"輸入的年份是閏年, 并且月份為2"
          while (day <= month_day[temp-1])
          {
          if( day > 1 )
          if( Year_days % 7 == 0 )
          printf("\n");
          if( day >=10 )
          printf("%d\t",day);
          else
          printf("%d\t",day);
          Year_days++;
          day++;
          }
          printf("\n");
          if( getch() == 'q' ) //如果輸入為q, 則退出程序
          exit(0);
          }
          getch(); //每按一次鍵, 打印一個月份
          }
          int IsLeapYear( int year )
          {
          //判斷是否是閏年, 是則返回1, 否則返回0
          if ((year %4 == 0) && (year % 100 != 0) ||
          (year % 400 == 0) )
          return 1;
          else
          return 0;
          }

          畢業設計基于STM32的電子萬年歷設計制作?哪位大神知道怎么做,大概步 ...

          stm32本來就帶了rtc,就不用時鐘芯片了,然后找個顯示屏,例如點陣之類的,再移植個萬年歷算法就搞完了


          用51單片機設計萬年歷系統 要求 1.實時顯示當前的時間、包括時分秒...

          我有個做好的可以實現1,2,3,4,6,7的功能,要不??? 至于腦中自己加段程序就OK 了 ,相信你可以完成。。。 需要的話留下郵箱 有仿真文件 和程序 全套 。。。

          c語言設計萬年歷

          這是當時我做的一個小小的課題,希望對你有所幫助
          #include "stdio.h" /* Required for MS-DOS use */
          #define ENTER 0x1C0D /* Enter key */
          int year, month, day;
          static char *days[8] = {" ","Sunday ","Monday ","Tuesday ",
          "Wednesday","Thursday ","Friday ","Saturday "};
          struct TIMEDATE {
          int year; /* year 1980..2099 */
          int month; /* month 1=Jan 2=Feb, etc. */
          int day; /* day of month 0..31 */
          int hours; /* hour 0..23 */
          int minutes; /* minute 0..59 */
          int seconds; /* second 0..59 */
          int hsecs; /* 1/100ths of second 0..99 */
          char dateline[47]; /* date & time toger */
          };
          static struct TIMEDATE today;
          main()
          {
          char cmonth[3];
          char cday[3];
          char cyear[5];
          double getdays();
          double daynumb, numbnow;
          int weekday, retcode, dayer, i;
          dayer = datetime(&today);
          clrscn();
          for (i=0;i<3;++i)cmonth[i]='\0';
          for (i=0;i<3;++i)cday[i]='\0';
          for (i=0;i<5;++i)cyear[i]='\0';
          putstr(5,8,14,"Enter date in MM DD YYYY format:");
          while (retcode != ENTER)
          {
          retcode = bufinp(5,41,13,2,cmonth);
          if (retcode != ENTER) retcode = bufinp(5,44,13,2,cday);
          if (retcode != ENTER) retcode = bufinp(5,47,13,4,cyear);
          }
          year = atoi(&cyear);
          month = atoi(&cmonth);
          day = atoi(&cday);
          daynumb = getdays(year, month, day);
          numbnow = getdays(today.year, today.month, today.day);
          weekday = weekdays(daynumb);
          if (numbnow - daynumb == 0)
          printf("\n\n%02d-%02d-%d is",month, day, year);
          if (numbnow - daynumb > 0)
          printf("\n\n%02d-%02d-%d was",month, day, year);
          if (numbnow - daynumb < 0)
          printf("\n\n%02d-%02d-%d will be",month, day, year);
          printf(" a %s\n",days[weekday]);
          } /* end MAIN */
          /************************************************************
          * GETDAYS - From integer values of year (YYYY), month *
          * (MM) and day (DD) this subroutine returns a *
          * double float number which represents the *
          * number of days since Jan 1, 1980 (day 1). *
          * This routine is the opposite of GETDATE. *
          ************************************************************/
          double getdays(year, month, day)
          int year, month, day;
          {
          int y,m;
          double a,b,d, daynumb;
          double floor(),intg();
          /**********************************
          ** make correction for no year 0 **
          **********************************/
          if (year < 0) y = year + 1;
          else y = year;
          /*********************************************************
          ** Jan and Feb are months 13 and 14 in this calculation **
          *********************************************************/
          m = month;
          if (month < 3)
          {
          m = m + 12;
          y = y - 1;
          }
          /**************************
          ** calculate Julian days **
          **************************/
          d = floor(365.25 * y) + intg(30.6001 * (m + 1)) + day - 723244.0;
          /**********************************************
          ** use Julian calendar if before Oct 5, 1582 **
          **********************************************/
          if (d < -145068.0) daynumb = d;
          /*************************************
          ** otherwise use Gregorian calendar **
          *************************************/
          else
          {
          a = floor(y / 100.0);
          b = 2 - a + floor(a / 4.0);
          daynumb = d + b;
          }
          return(daynumb);
          } /* end GETDAYS */
          /********************************************************
          * GETDATE - This routine takes a double float number *
          * representing the number of days since Jan 1,*
          * 1980 (day 1) and returns the year month and *
          * day as pointer integers *
          * This routine is the opposite of GETDAYS *
          ********************************************************/
          getdate(numb)
          double numb;
          {
          double a,aa,b,c,d,e,z;
          double date;

          date = numb;
          z = intg(date + 2444239.0);
          if (date < -145078.0) a = z;
          else
          {
          aa = floor((z - 1867216.25) / 36524.25);
          a = z + 1 + aa - floor(aa/4.0);
          }
          b = a + 1524.0;
          c = intg((b - 122.1) / 365.25);
          d = intg(365.25 * c);
          e = intg((b - d) / 30.6001);
          day = b - d - intg(30.6001 * e);
          if (e > 13.5) month = e - 13.0;
          else month = e - 1.0;
          if (month > 2) year = c - 4716.0;
          else year = c - 4715.0;
          if (year < 1) --year;
          return;
          } /* end GETDATE */
          /********************************************************
          * WEEKDAYS - This routine takes a double float number *
          * representing the number of days since Jan 1,*
          * 1980 (day 1) and returns the day of the week*
          * where 1 = Sunday, 2 = Tuesday, etc. *
          ********************************************************/
          int weekdays(numb)
          double numb;
          {
          double dd;
          int day;

          dd = numb;
          while (dd > 28000.0) dd = dd - 28000.0;
          while (dd < 0) dd = dd + 28000.0;
          day = dd;
          day = ((day + 1) % 7) + 1;
          return(day);
          }
          /********************************************************
          * FRACT - This routine takes a double float number *
          * and returns the fractional part as a double *
          * float number *
          ********************************************************/
          double fract(numb)
          double numb;
          {
          int inumb;
          double fnumb;

          while (numb < -32767) numb += 32767;
          while (numb > 32767) numb -= 32767;
          inumb = numb;
          fnumb = inumb;
          return(numb-fnumb);
          } /* end FRACT */
          /********************************************************
          * FLOOR - This routine takes a double float number *
          * and returns the next smallest integer *
          ********************************************************/
          double floor(numb)
          double numb;
          {
          double fract(), intg();
          double out;
          out = intg(numb);
          if (numb < 0 && fract(numb) != 0) out -= 1.0;
          return(out);
          } /* end FLOOR */
          /********************************************************
          * INTG - This routine takes a double float number *
          * and returns the integer part as a double *
          * float number *
          ********************************************************/
          double intg(numb)
          double numb;
          {
          double fract();
          return(numb - fract(numb));
          } /* end INTG */

          誰能跟我說說單片機萬年歷的設計思路唄

          仔細研究野火的STM32F103開發板的實時時鐘例程,就會學到很多東西
          這個單片機的實時時鐘只是一個簡單的32位計數器,計的是秒,要換算成年月日時分秒,完全是要根據陽歷的閏年規律計算的,先找一個基準日期,稱為時間戳
          然后根據現今時間與時間戳的差值(以S為單位)計算當前的年月日時分秒鐘星期幾,然后根據表格查每年的農歷有幾個月,幾個大小月,閏月是個月,春節在哪一天,當前日期是在春節前還是春節后,就能計算出農歷日期,然后計算24節氣,由于24節是按陽歷年劃分的,而陽歷的一年只有365天和366天兩種,因此24節的陽歷日期基本固定,找一個標準,然后記下各個節氣和標準日期的正負誤差就可以確定當前節氣的陽歷日期了,還有天干地支,只要有一個基準,求12和10的余數,推算很容易的

          C51系列單片機課程設計:電子鬧鐘和萬年歷的程序

          #include<reg52.h>
          #include<intrins.h>
          #define uchar unsigned char
          #define uint unsigned int
          sbit dq=P3^7; //////18b20
          sbit lcden=P2^7; ////lcd
          sbit rs=P2^6;
          sbit wr=P2^5;
          sbit sck=P3^6; ////1302
          sbit sda=P3^4;
          sbit rst=P3^5;
          sbit a=P1^0;
          sbit b=P1^1;
          sbit c=P1^2;
          sbit d=P1^3;
          sbit kj=P1^4;
          sbit beep=P1^5;
          uchar ritime;
          uchar startflag;
          uchar ridate[33];
          uchar bitnum;
          uchar rireceok;
          uchar ricode[4];
          uchar riprosok;
          uchar dis[8];
          void dis_key(void);
          void riwork(void);
          void ripros(void);
          void keyscan(void);
          void bep(void);
          void timer0init(void);
          void init0init(void);
          uchar key0,key1,key2,key0num,passwordok;
          uchar key,p,m,pnum,sha;
          uchar password[9];
          uchar password1[9]={6,7,4,6,8,8,6,4,6};
          void password_scan();
          void post_key();
          void dj1();
          void dj2();
          //////////////////////函數聲明1302
          void wr1302_byte(uchar byte);
          void wr1302 (uchar add,uchar dat);
          uchar read1302(uchar add);
          uchar time_date[7]={10,3,12,8,21,37,20};////年周月日時分秒
          uchar time_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};////寫入地址
          uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};////讀出地址
          uchar disp[13]; ////將讀出時間裝入
          void set_rtc();
          void read_rtc();
          void timepost(); ////處理時間為10進制
          void display();
          void password_display();
          void timeplay();
          void runnian1(); ///閏年加
          void runnian2(); ///閏年減
          void keypost(); //按鍵處理
          ///////////////////////////// 函數聲明 lcd ////////////////////
          uchar code lcd_tab[]="0123456789- ():c";
          uchar code lcd_tab1[]="Plese Password:";
          uchar code table1[]="key=00-00-00-00";
          uchar code table[]=" QQ:674688646";
          uchar code numtab[]="0123456789ABCDEF";
          uchar code numtab1[]=" 1234567890";
          void delay(uint z);
          void init_lcd();
          void write_com(uchar com);
          void write_date(uchar x);
          ///////////////////////////18b20////////////
          void init18b20(void);
          void wr1820_byte(uchar dat);
          uchar read18b20_byte(void);
          uchar read1820(void);
          void delay1(uint t);
          //////////////////////////////////////////
          void timer0init(void) //開定時器2
          {
          TMOD=0X02;
          TH0=0X00;
          TL0=0X00;
          ET0=1;
          EA=1;
          TR0=1;
          }
          void init0init(void) //外部中斷
          {
          IT0=1;
          EX0=1;
          EA=1;
          }
          void riwork(void)
          {
          dis[0]=ricode[0]/16;
          dis[1]=ricode[0]%16;
          dis[2]=ricode[1]/16;
          dis[3]=ricode[1]%16;
          dis[4]=ricode[2]/16;
          dis[5]=ricode[2]%16;
          dis[6]=ricode[3]/16;
          dis[7]=ricode[3]%16;
          }
          void ripros(void)
          { uchar j,k,i,value;
          k=1;
          for(j=0;j<4;j++)
          {
          for(i=0;i<8;i++)
          {
          value=value>>1;
          if(ridate[k]>6)
          {
          value=value|0x80;
          }
          k++;
          }
          ricode[j]=value;
          }
          riprosok=1;
          }
          void timer0 () interrupt 1
          {
          ritime++;
          }
          void int0() interrupt 0
          {
          if(startflag==1)
          {
          if(ritime>32)//檢測引導碼
          {
          bitnum=0;
          }
          ridate[bitnum]=ritime;
          ritime=0;
          bitnum++;
          if(bitnum==33)
          {
          bitnum=0;
          rireceok=1;
          }
          }
          else
          {
          startflag=1;
          ritime=0;
          }
          }
          void keyscan(void)
          { if(rireceok==1)
          {bep(); //按鍵發聲 但影響蜂鳴器操作
          ripros();
          rireceok=0;
          }
          if(riprosok==1)
          { riwork();
          riprosok=0;
          switch(ricode[2])
          { case 0x46:p=1;pnum++;break;

          case 0x0c:key=1;break;
          case 0x18:key=2;break;
          case 0x5e:key=3;break;
          case 0x08:key=4;break;
          case 0x1c:key=5;break;
          case 0x5a:key=6;break;
          case 0x42:key=7;break;
          case 0x52:key=8;break;
          case 0x4a:key=9;break;
          case 0x16:key=10;break;

          case 0x09:key0=1;key0num++;break;
          case 0x15:key1=1;break;
          case 0x07:sha=1;key2=1;break;
          if(key0==1){if(key0num==1)read_rtc();}
          }
          }
          ////按下設定鍵后讀一次1302保證time_date內數據正常
          }

          void bep(void)
          {
          beep=0;delay(100);beep=1;
          }
          ///////////////////////////////////////////////////////////
          void write_com(uchar com) /////寫命令
          {
          rs=0;
          P0=com;
          lcden=1;
          delay(5);
          lcden=0;
          }
          void write_date(uchar x)/////寫數據
          {
          rs=1;
          P0=x;
          delay(5);
          lcden=1;
          delay(5);
          lcden=0;
          }
          void init_lcd()// ///lcd初始化
          {
          wr=0;
          lcden=0;
          write_com(0x38);
          write_com(0x0c);
          write_com(0x06);
          write_com(0x01);
          }
          void display()
          {timepost();
          write_com(0x80+2);
          write_date(lcd_tab[2]);
          write_date(lcd_tab[0]);
          write_date(lcd_tab[disp[0]]);
          write_date(lcd_tab[disp[1]]);
          write_date(lcd_tab[10]);
          write_date(lcd_tab[disp[3]]);
          write_date(lcd_tab[disp[4]]);
          write_date(lcd_tab[10]);
          write_date(lcd_tab[disp[5]]);
          write_date(lcd_tab[disp[6]]);
          write_date(lcd_tab[11]);
          write_date(lcd_tab[12]);
          write_date(lcd_tab[disp[2]]);
          write_date(lcd_tab[13]);
          write_com(0x80+0x40+4);/////////第二行
          write_date(lcd_tab[disp[7]]);
          write_date(lcd_tab[disp[8]]);
          write_date(lcd_tab[14]);
          write_date(lcd_tab[disp[9]]);
          write_date(lcd_tab[disp[10]]);
          write_date(lcd_tab[14]);
          write_date(lcd_tab[disp[11]]);
          write_date(lcd_tab[disp[12]]);
          write_date(lcd_tab[11]);
          write_date(lcd_tab[read1820()/10]);/////顯示溫度
          write_date(lcd_tab[read1820()%10]);
          write_date(lcd_tab[15]);
          }
          //////////////// 1302 //////////////////////////////
          void wr1302_byte(uchar byte) /////寫入一個字節
          { uchar i;
          for(i=0;i<8;i++)
          { sck=0;
          sda=byte&0x01;
          byte>>=1;
          sck=1;
          }
          }
          void wr1302 (uchar add,uchar dat)/////寫進1302 時間和地址
          { rst=0;
          _nop_();
          sck=0;
          _nop_();
          rst=1;
          _nop_();
          wr1302_byte(add);
          wr1302_byte(dat);
          rst=0;
          //_nop_();
          //sda=1;
          //sck=1;
          }
          uchar read1302(uchar add)
          { uchar i,temp;
          rst=0;
          _nop_();
          sck=0;
          _nop_();
          rst=1;
          _nop_();
          wr1302_byte(add);////////////////////寫入要讀的地址
          for(i=0;i<8;i++)
          {
          if(sda)temp=temp|0x80;
          sck=0;
          temp>>=1;
          _nop_();
          sck=1;
          }
          rst=0; //////// 延時很重要
          _nop_();
          sck=0;
          _nop_();
          sck=1;
          _nop_();
          sda=0;
          _nop_();
          sda=1;
          _nop_();
          return temp;
          }
          void set_rtc()
          {
          uchar i,j;
          for(i=0;i<7;i++)
          {
          j=time_date[i]/10; ///////將10進制變成16進制
          time_date[i]=time_date[i]%10;
          time_date[i]=time_date[i]+j*16;
          }
          wr1302(0x8e,0x00);//////去除寫保護
          for(i=0;i<7;i++)
          {
          wr1302(time_add[i],time_date[i]);
          }
          wr1302(0x8e,0x80);//////加寫保護
          }
          void read_rtc()
          {uchar i,j;
          for(i=0;i<7;i++)
          {
          time_date[i]=read1302(read_add[i]);
          ////將讀到的bcd碼轉化成10進制碼
          j=time_date[i]&0x0f;
          time_date[i]>>=4;
          time_date[i]&=0x0f;
          time_date[i]*=10;
          time_date[i]=time_date[i]+j;
          }
          }
          void timepost()
          { disp[0]=time_date[0]/10;/////年
          disp[1]=time_date[0]%10;
          disp[2]=time_date[1]%10;/////周
          disp[3]=time_date[2]/10;/////月
          disp[4]=time_date[2]%10;/////
          disp[5]=time_date[3]/10;/////日
          disp[6]=time_date[3]%10;////
          disp[7]=time_date[4]/10;////時
          disp[8]=time_date[4]%10;////
          disp[9]=time_date[5]/10;////分
          disp[10]=time_date[5]%10;////
          disp[11]=time_date[6]/10;////秒
          disp[12]=time_date[6]%10;////

          }
          void delay(uint z)
          {
          uint x,y;
          for(x=0;x<20;x++)
          for(y=z;y>0;y--);
          }
          /////////////////////////18b20////////
          void delay1(uint t)
          {
          while (t--);
          }
          void init18b20(void)
          {
          uchar n;
          dq=1;
          delay1(8);
          dq=0;
          delay1(80);
          dq=1;
          delay1(8);
          n=dq;
          delay1(4);
          }
          void wr18b20_byte(uchar dat)
          {
          uchar i;
          for(i=0;i<8;i++)
          {
          dq=0;
          dq=dat&0x01;
          delay1(4);
          dq=1;
          dat>>=1;
          }
          delay1(4);
          }
          uchar read18b20_byte(void)
          {
          uchar i,value;
          for(i=0;i<8;i++)
          { dq=0;
          value>>=1;
          dq=1;
          if(dq)
          value|=0x80;
          delay1(4);
          }
          return value;
          }
          uchar read1820(void)
          { uchar a,b;
          init18b20();
          wr18b20_byte(0xcc);
          wr18b20_byte(0x44);
          delay1(50);
          init18b20();
          wr18b20_byte(0xcc);
          wr18b20_byte(0xbe);
          a=read18b20_byte();
          b=read18b20_byte();
          b<<=4;
          b+=(a&0xf0)>>4;
          return b;
          }
          ///////////////////////////////////////////////////////
          void keypost()
          { uchar n;
          if(key0==1)
          {
          if(key0num==1)
          {write_com(0x80+0x40+10);
          write_com(0x0f);delay(1000);
          if(key1==1)
          { key1=0;n=1;
          time_date[6]++;
          if(time_date[6]==60)time_date[6]=0;
          display();
          }
          if(key2==1)
          {
          key2=0;n=1;
          time_date[6]--;
          if(time_date[6]==-1)time_date[6]=59;
          display();
          }
          }
          if(key0num==2)
          {write_com(0x80+0x40+8);
          write_com(0x0f);delay(1000);
          if(key1==1)
          { key1=0;n=1;
          time_date[5]++;
          if(time_date[5]==60)time_date[5]=0;
          display();
          }
          if(key2==1)
          {
          key2=0;n=1;
          time_date[5]--;
          if(time_date[5]==-1)time_date[5]=59;
          display();
          }
          }
          if(key0num==3)
          {write_com(0x80+0x40+5);
          write_com(0x0f);delay(1000);
          if(key1==1)
          { key1=0;n=1;
          time_date[4]++;
          if(time_date[4]==24)time_date[4]=0;
          display();
          }
          if(key2==1)
          {
          key2=0;n=1;
          time_date[4]--;
          if(time_date[4]==-1)time_date[4]=23;
          display();
          }
          }
          if(key0num==4)
          {write_com(0x80+14);
          write_com(0x0f);delay(1000);
          if(key1==1)
          { key1=0;n=1;
          time_date[1]++;
          if(time_date[1]==8)time_date[1]=1;
          display();
          }
          if(key2==1)
          {
          key2=0;n=1;
          time_date[1]--;
          if(time_date[1]==0)time_date[1]=7;
          display();
          }
          }

          if(key0num==5)
          {write_com(0x80+10);
          write_com(0x0f);delay(1000);
          if(key1==1)
          { key1=0;n=1;
          time_date[3]++;
          runnian1();
          display();
          }
          if(key2==1)
          {
          key2=0;n=1;
          time_date[3]--;
          if(time_date[3]<1)time_date[3]=31;
          runnian2();
          display();
          }
          }
          if(key0num==6)
          {write_com(0x80+7);
          write_com(0x0f);delay(1000);
          if(key1==1)
          { key1=0;n=1;
          time_date[2]++;
          if(time_date[2]>12)time_date[2]=1;
          runnian2();
          display();
          }
          if(key2==1)
          {
          key2=0;n=1;
          time_date[2]--;
          if(time_date[2]==0)time_date[2]=12;
          runnian2();
          display();
          }
          }
          if(key0num==7)
          {write_com(0x80+4);
          write_com(0x0f);delay(1000);
          if(key1==1)
          { key1=0;n=1;
          time_date[0]++;
          if(time_date[0]==100)time_date[0]=0;
          runnian2();
          display();
          }
          if(key2==1)
          {
          key2=0;n=1;
          time_date[0]--;
          if(time_date[0]==-1)time_date[0]=99;
          runnian2();
          display();
          }
          }

          if(key0num==8)
          { key0num=0;key0=0;
          write_com(0x0c);
          if(n){n=0;set_rtc();}

          }
          }
          else
          {
          read_rtc();
          timepost();
          display();
          if(time_date[5]==0) ///整點報時
          {if(time_date[6]==0)beep=0;
          else beep=1;
          }
          }
          }
          void runnian1()////閏年加
          {
          if(time_date[2]==2) /////判斷2月
          { if((time_date[0]+4)%4==0)
          { if(time_date[3]>29)time_date[3]=1;}//判斷閏年
          else
          {if(time_date[3]>28)time_date[3]=1;}
          }
          else
          { if(time_date[2]<8)///判斷月小于8
          {
          if((time_date[2]+1)%2==0)
          {if(time_date[3]>31)time_date[3]=1;}
          else
          {if(time_date[3]>30)time_date[3]=1;}
          }
          if(time_date[2]>7)
          {
          if((time_date[2])%2==0)
          {if(time_date[3]>31)time_date[3]=1;}
          else
          {if(time_date[3]>30)time_date[3]=1;}
          }
          }
          }
          void runnian2()//閏年減
          {
          if(time_date[2]==2) /////判斷2月
          { if((time_date[0]+4)%4==0)
          { if(time_date[3]>29)time_date[3]=29;}//判斷閏年
          else
          {if(time_date[3]>28)time_date[3]=28;}
          }
          else
          {
          if(time_date[2]<8)///判斷月小于8
          {
          if((time_date[2]+1)%2==0)
          {if(time_date[3]>31)time_date[3]=31;}
          else
          {if(time_date[3]>30)time_date[3]=30;}
          }
          if(time_date[2]>7)
          {
          if((time_date[2])%2==0)
          {if(time_date[3]>31)time_date[3]=31;}
          else
          {if(time_date[3]>30)time_date[3]=30;}
          }
          }
          }
          void password_scan() ////////輸入密碼界面
          {uchar l,i,j;
          write_com(0x80);
          for(l=0;l<15;l++)
          {write_date(lcd_tab1[l]);}
          write_com(0x80+0x40+4+i);
          write_com(0x0f);delay(1000);
          if(key!=0)
          {
          password[i]=key;
          write_com(0x80+0x40+4+i);
          write_date(numtab1[key]);
          write_com(0x14);
          i++;key=0;
          }
          if(i>0)
          {if(sha==1)
          {sha=0;i--;
          write_com(0x80+0x40+4+i);
          write_date(numtab1[0]);
          write_com(0x10);
          }
          }
          if(i==9)
          { i=0;
          for(j=0;j<9;j++)
          {
          if(password1[j]==password[j])m++;
          else {init_lcd();m=0;break;}
          }
          if(m==9)
          {
          m=0;passwordok=1;
          p=0;pnum=0;key=0;
          init_lcd();
          for(i=0;i<15;i++)
          {write_date(table[i]);}
          write_com(0x80+0x40);
          for(i=0;i<15;i++)
          {write_date(table1[i]);}
          }
          }
          }
          void dis_key(void) //顯示鍵值
          {
          write_com(0x80+0x40+4);
          write_date(numtab[dis[0]]);
          write_date(numtab[dis[1]]);
          write_com(0x80+0x40+7);
          write_date(numtab[dis[2]]);
          write_date(numtab[dis[3]]);
          write_com(0x80+0x40+10);
          write_date(numtab[dis[4]]);
          write_date(numtab[dis[5]]);
          write_com(0x80+0x40+13);
          write_date(numtab[dis[6]]);
          write_date(numtab[dis[7]]);

          }
          void timeplay()
          {
          if(p==1)
          { uchar v;key0num=0;key0=0;
          if(v==0){v=1;init_lcd();key=0;}
          if(pnum==1)
          {
          password_scan();
          }
          if(pnum==2)
          { p=0;pnum=0;m=0;v=0;
          init_lcd();
          }
          }
          else keypost();
          }
          //////////////////////////主函數////////////////////////
          void main()
          {
          init_lcd(); /////初始化lcd
          timer0init();///// 開定時器中斷
          init0init();///// 開外部器中斷
          key=0;
          while(1)
          {
          keyscan();

          if(passwordok)
          { dis_key();
          post_key();
          if(p==1)
          { if(pnum==1)
          {if(ricode[2]!=0x46)pnum=0;}
          if(pnum==2)
          {pnum=0;m=0;
          passwordok=0;p=0;
          break;
          }
          }
          }
          else timeplay();
          }
          }
          void post_key()
          {
          if(key==1){key=0;kj=0;}
          if(key==2){key=0;kj=1;}
          if(key==3){key=0;dj1();}
          if(key==4){key=0;dj2();}
          }
          void dj1()
          {
          uint i;
          for(i=0;i<512;i++)
          {if(rireceok==1)break;
          a=0;b=0;delay(20);
          a=1;b=0;delay(20);
          b=0;c=0;delay(20);
          b=1;c=0;delay(20);
          c=0;d=0;delay(20);
          c=1;d=0;delay(20);
          d=0;a=0;delay(20);
          d=1;delay(20);
          }
          }
          void dj2()
          { uint i;
          for(i=0;i<512;i++)
          {if(rireceok==1)break;
          d=0;a=0;delay(20);
          a=1;d=0;delay(20);
          c=0;d=0;delay(20);
          c=0;d=1;delay(20);
          b=0;c=0;delay(20);
          c=1;b=0;delay(20);
          a=0;b=0;delay(20);
          a=0;b=1;delay(20);
          }
          }
          使用方法 本程序用于HC6800 V2.6 實驗箱,需要裝上1602液晶屏,18b20 溫度傳感器,紅外接收頭,和步進電機,同時保證遙控器好用(要用配套的小遙控器并且要按鍵值和我的一樣才能準確的操作本程序)
          我的遙控器按鍵值如下
          ch-0x45 ch 0x46 ch+0x47
          << 0x44 >> 0x40 >= 0x43
          - 0x07 + 0x15 EQ 0x09
          0 0x16 100+ 0x19 200+ 0x0d
          1 0x0c 2 0x18 3 0x5e
          4 0x08 5 0x1c 6 0x5a
          7 0x42 8 0x52 9 0x4a
          主要操作鍵為 ch EQ + - 123456789 等鍵,
          程序下進去后 1602會顯示日期 時間 溫度
          用EQ鍵可對日期 時間進行設定
          用+ - 鍵對日期時間進行調節
          調節日期時會自動識別大小月,及閏年并對日期進行相應調整
          按下ch鍵后 會進入輸入密碼界面 依次輸入674688646 會進入按鍵讀值界面 ,輸入錯誤可用 - 鍵退回
          在按鍵讀值界面 連續按兩次ch 鍵后,程序 會退出到時間顯示界面
          在按鍵讀值界面 按1 打開繼電器 按2 關閉繼電器 按3 步進電機正轉一周,按 4 步進電機反轉一周 ,步進電機轉的過程中按其他鍵,步進電機停止

          展開全文
          久久啪狠狠2018中文字幕_大量国产情侣作爱视频_国产欧美另类久久久精品_日本真人真做毛片

              <cite id="nnfl3"><span id="nnfl3"></span></cite>
              <meter id="nnfl3"></meter>

              <track id="nnfl3"></track>
              <del id="nnfl3"><span id="nnfl3"><big id="nnfl3"></big></span></del>

              <nobr id="nnfl3"></nobr>