色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)電子時(shí)鐘完整版

          51單片機(jī)電子時(shí)鐘完整版

          作者: 時(shí)間:2012-08-02 來源:網(wǎng)絡(luò) 收藏

          /******************************ds1820程序***************************************/
          void delay_18B20(unsigned int i)//延時(shí)1微秒
          {
          while(i--);
          }
          void ds1820rst() //ds1820復(fù)位
          {
          unsigned char x=0;
          DQ = 1; //DQ復(fù)位
          delay_18B20(4); //延時(shí)
          DQ = 0; //DQ拉低
          delay_18B20(100); //精確延時(shí)大于480us
          DQ = 1; //拉高
          delay_18B20(40);
          }
          uchar ds1820rd() //讀數(shù)據(jù)
          {
          unsigned char i=0;
          unsigned char dat = 0;
          for (i=8;i>0;i--)
          {
          DQ = 0; //給脈沖信號(hào)
          dat>>=1;
          DQ = 1; //給脈沖信號(hào)
          if(DQ)
          dat|=0x80;
          delay_18B20(10);
          }
          return(dat);
          }
          void ds1820wr(uchar wdata) //寫數(shù)據(jù)
          {
          unsigned char i=0;
          for (i=8; i>0; i--)
          {
          DQ = 0;
          DQ = wdata0x01;
          delay_18B20(10);
          DQ = 1;
          wdata>>=1;
          }
          }
          read_temp() //讀取溫度值并轉(zhuǎn)換
          {
          uchar a,b;
          ds1820rst();
          ds1820wr(0xcc); //跳過讀序列號(hào)
          ds1820wr(0x44); //啟動(dòng)溫度轉(zhuǎn)換
          ds1820rst();
          ds1820wr(0xcc); //跳過讀序列號(hào)
          ds1820wr(0xbe);//讀取溫度
          a=ds1820rd();
          b=ds1820rd();
          tvalue=b;
          tvalue=8;
          tvalue=tvalue|a;
          if(tvalue0x0fff)
          tflag=0;
          else
          {
          tvalue=~tvalue+1;
          tflag=1;
          }
          tvalue=tvalue*(0.625);//溫度值擴(kuò)大10倍,精確到1位小數(shù)
          return(tvalue);
          }
          /*******************************************************************/
          void ds1820disp() //溫度值顯示
          {
          uchar flagdat;
          disdata[0]=tvalue/1000+0x30; //百位數(shù)
          disdata[1]=tvalue%1000/100+0x30; //十位數(shù)
          disdata[2]=tvalue%100/10+0x30; //個(gè)位數(shù)
          disdata[3]=tvalue%10+0x30; //小數(shù)位
          if(tflag==0)
          flagdat=0x20; //正溫度不顯示符號(hào)
          else
          flagdat=0x2d; //負(fù)溫度顯示負(fù)號(hào):-
          if(disdata[0]==0x30)
          {
          disdata[0]=0x20; //如果百位為0,不顯示
          if(disdata[1]==0x30)
          {
          disdata[1]=0x20; //如果百位為0,十位為0也不顯示
          }
          }
          write_add(0x80+0x40+8);
          write_date(flagdat); //顯示符號(hào)位
          write_add(0x80+0x40+9);
          write_date(disdata[0]); //顯示百位
          write_add(0x80+0x40+10);
          write_date(disdata[1]); //顯示十位
          write_add(0x80+0x40+11);
          write_date(disdata[2]); //顯示個(gè)位
          write_add(0x80+0x40+12);
          write_date(0x2e); //顯示小數(shù)點(diǎn)
          write_add(0x80+0x40+13);
          write_date(disdata[3]); //顯示小數(shù)位
          write_add(0x80+0x40+14);
          write_date(0xdf); //顯示"。"
          write_add(0x80+0x40+15);
          write_date(0x63); //顯示"c"
          }
          void init_info(void)
          {
          write_add(0x80+0x00+0);
          for(i=0;i14;i++)
          {
          write_date(stuinfo1[i]);
          delay(5);
          }
          write_add(0x80+0x40+0);
          for(i=0;i14;i++)
          {
          write_date(stuinfo2[i]);
          delay(5);
          }
          }
          void Speak1() //鬧鈴
          {
          alarm = 0;
          smiao = Read1302(r_Sec);
          sfen = Read1302(r_Min);
          sshi = Read1302(r_Hou);
          snian = Read1302(r_Yea);
          syue = Read1302(r_Mou);
          sri = Read1302(r_Day);
          sxi = Read1302(r_xi);
          writefuhao();
          writesfm(0,sshi);
          writesfm(3,sfen);
          writesfm(6,smiao);
          writenyr(0,snian);
          writenyr(3,syue);
          writenyr(6,sri);
          writexi(sxi);
          delay(500);
          alarm = 1;
          delay(500);
          }
          void Speak2()
          {
          alarm=0;
          delay(2000);
          alarm=1;
          }
          void Normal() //正常顯示時(shí)間功能
          {
          smiao = Read1302(r_Sec);
          sfen = Read1302(r_Min);
          sshi = Read1302(r_Hou);
          snian = Read1302(r_Yea);
          syue = Read1302(r_Mou);
          sri = Read1302(r_Day);
          sxi = Read1302(r_xi); //讀取時(shí)間數(shù)據(jù)
          if((nshi==sshi)(nfen==sfen)) //鬧鐘鈴響
          {
          for(i=0;i10;i++)
          {
          Speak1();
          }
          while((k1==1)||(k2==1)||(k3==1)||(k4==1)) //按下任意鍵,鬧鐘停止鬧鈴
          {
          alarm=1;
          }
          }
          //關(guān)閉蜂鳴器
          if((sshi==0||sshi==1||sshi==2||sshi==3||sshi==4||sshi==5||sshi==6||sshi==7
          ||sshi==8||sshi==9||sshi==10||sshi==11||sshi==12||sshi==13||sshi==14||sshi==15||sshi==16
          ||sshi==1||sshi==18||sshi==19||sshi==20||sshi==21||sshi==22||sshi==23)(sfen==0)(smiao==0))
          {
          Speak2(); //整點(diǎn)報(bào)時(shí)
          }
          alarm=1; //關(guān)閉蜂鳴器
          writefuhao();
          writesfm(0,sshi);
          writesfm(3,sfen);
          writesfm(6,smiao);
          writenyr(0,snian);
          writenyr(3,syue);
          writenyr(6,sri);
          writexi(sxi);
          }
          void StopWatch () reentrant //秒表功能
          {
          haomiao=0;
          miao=0;
          fen=0;
          shi=0;
          write_add(0x01); //清屏
          write_add(0x0c);
          write_add(0x80+0x00+0);
          for(i=0;i9;i++)
          {
          write_date(miaobiao[i]);
          delay(5);
          }
          write_add(0x80+0x40+0);
          for(i=0;i11;i++)
          {
          write_date(time2[i]);
          delay(5);
          }
          while(!k4);
          while(k4!=0)
          {
          if(k1==0)
          {
          delay(10); //消抖
          if(k1==0)
          StopWatch();
          }

          haomiao++;
          if(haomiao==100)
          {
          haomiao=0;
          miao++;
          if(miao==60)
          {
          miao=0;
          fen++;
          if(fen==60)
          {
          fen=0;
          shi++;
          if(shi==24)
          {
          shi=0;
          }
          writesfm(0,shi);
          }
          writesfm(3,fen);
          }
          writesfm(6,miao);
          }
          writesfm(9,haomiao);
          }
          /*TR0 = 0;
          menu=3;*/
          }
          void key() //鬧鐘時(shí)的按鍵功能
          {
          if(k1==0)
          {
          delay(10);
          if(k1==0)
          {
          n++;
          while(!k1);
          if(n==1)
          {
          write_add(0x0f);
          write_add(0x80+0x40+4); //寫shi
          }
          if(n==2)
          {
          write_add(0x0f);
          write_add(0x80+0x40+7); //寫fen
          }
          if(n==3)
          {
          n=0;
          nfen=fen;
          nshi=shi; //確認(rèn)
          write_add(0x0c); //光標(biāo)不閃爍
          }
          }
          }
          if(k2==0)
          {
          delay(10);
          if(k2==0)
          {
          while(!k2);
          if(n==1)
          {
          shi++;
          if(shi==24)
          shi=0;
          writesfm(4,shi);
          }
          if(n==2)
          {
          fen++;
          if(fen==60)
          fen=0;
          writesfm(7,fen);
          }
          }
          }
          if(k3==0)
          {
          delay(10);
          if(k3==0)
          {
          while(!k3);
          if(n==1)
          {
          shi--;
          if(shi==-1)
          shi=23;
          writesfm(4,shi);
          }

          51單片機(jī)相關(guān)文章:51單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)視頻教程


          單片機(jī)相關(guān)文章:單片機(jī)工作原理




          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉