久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

最新制作:時(shí)鐘+溫度計(jì) 數(shù)碼管顯示

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年08月22日   【字體:

2010年11月2日

      花了幾個(gè)小時(shí),完成“時(shí)鐘溫度計(jì)” 的程序,在此感謝“康哥”的支持!

      功能:時(shí)鐘顯示,溫度顯示,可調(diào)時(shí)間,按鍵發(fā)聲。

      說(shuō)明:

           1 功能選擇鍵:按下功能選擇鍵,時(shí)間停止,秒鐘指示燈長(zhǎng)滅,選擇千位,百位,十位,個(gè)位,相對(duì)應(yīng)的每位數(shù)碼管的小數(shù)點(diǎn)亮。

           2 “加”:按一下“加”按鍵,對(duì)應(yīng)的數(shù)字會(huì)加一。

           3 “減”:按一下“減”按鍵,對(duì)應(yīng)的數(shù)字會(huì)減一。

           4 繼續(xù)按功能選擇鍵到第五次,退出時(shí)間設(shè)置,秒鐘指示燈閃爍,時(shí)鐘繼續(xù)運(yùn)行。

           5 初始化時(shí)間為早上6點(diǎn)30分,時(shí)間為24小時(shí)制。

           6 其他功能:添加指示燈。正常運(yùn)行時(shí),綠色指示燈亮,當(dāng)進(jìn)入調(diào)整時(shí)間時(shí),紅色指示燈亮。

 

限于篇幅以下是部分源代碼,完整版本請(qǐng)到http://www.zg4o1577.cn/f/shiz5.rar 去下載

#include"reg51.h"

  #define uchar unsigned char
  #define uint unsigned int
 


/****溫度 端口定義******/
  sbit wx5=P2^5;
  sbit wx6=P2^6;
  sbit wx7=P2^7;

  sbit DQ=P2^0;

  uint temp, temp1,temp2, xs;

  uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
       0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};


/******延時(shí)程序*******/
 void delay1(unsigned int m)
    {
      unsigned int i,j;
    for(i=m;i>0;i--)
   for(j=110;j>0;j--);
    }


 void delay(unsigned int m)
    {
      while(m--);
     }

 void Init_DS18B20() 
   {
     unsigned char x=0;
     DQ = 1;          //DQ復(fù)位 ds18b20通信端口
     delay(8); //稍做延時(shí)
     DQ = 0;          //單片機(jī)將DQ拉低
     delay(80); //精確延時(shí) 大于 480us
     DQ = 1;          //拉高總線  
     delay(4);
     x=DQ;            //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
     delay(20);
    }

 


/***********ds18b20讀一個(gè)字節(jié)**************/
  uchar ReadOneChar()
   {
     unsigned char i=0;
     unsigned char dat = 0;
     for (i=8;i>0;i--)
     {
      DQ = 0; // 高電平拉成低電平時(shí)讀周期開(kāi)始
      dat>>=1;
      DQ = 1; // 給脈沖信號(hào)
      if(DQ)
      dat|=0x80;   //
      delay(4);
      }
     return(dat);
   }

 

/*************ds18b20寫(xiě)一個(gè)字節(jié)****************/
  void WriteOneChar(unsigned char dat)
  {
   unsigned char i=0;
   for (i=8; i>0; i--)
    {
      DQ = 0;          //從高電平拉至低電平時(shí),寫(xiě)周期的開(kāi)始
      DQ = dat&0x01;   //數(shù)據(jù)的最低位先寫(xiě)入
      delay(5);        //60us到120us延時(shí)
      DQ = 1;       
      dat>>=1;         //從最低位到最高位傳入
    }
  }


/**************讀取ds18b20當(dāng)前溫度************/
void ReadTemperature()
  {
    unsigned char a=0;
    unsigned  b=0;
    unsigned  t=0;

    Init_DS18B20();
    WriteOneChar(0xCC);   // 跳過(guò)讀序號(hào)列號(hào)的操作
    WriteOneChar(0x44);   // 啟動(dòng)溫度轉(zhuǎn)換
    delay(10);            // this message is wery important
    Init_DS18B20();
    WriteOneChar(0xCC);   //跳過(guò)讀序號(hào)列號(hào)的操作
    WriteOneChar(0xBE);   //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
    delay(10);
    a=ReadOneChar();      //讀取溫度值低位 
    b=ReadOneChar();      //讀取溫度值高位   
    temp1=b<<4;           //高8位中后三位數(shù)的值
    temp1+=(a&0xf0)>>4;   //低8位中的高4位值加上高8位中后三位數(shù)的值   temp1室溫整數(shù)值
    temp2=a&0x0f;         //小數(shù)的值
    temp=((b*256+a)>>4);  //當(dāng)前采集溫度值除16得 實(shí)際溫度值    zhenshu   
    xs=temp2*0.0625*10;   //小數(shù)位,若為0.5則算為5來(lái)顯示  xs小數(shù)    xiaoshu
   }

 

//////////////////////////////////////////////////////////////////////////////
/***********溫度顯示********************/
void wenduxianshi()    //溫度顯示
   { 
     wx5=1;
        P0=table[temp/10];
        delay1(3);
        wx5=0;

        wx6=1;
        P0=table[temp%10];
        delay1(3);
        wx6=0;

        wx7=1;
        P0=table[12];
        delay1(3);
        wx7=0;
 }

 

 

 

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
/****時(shí)鐘 端口定義******/
  sbit wx1=P2^1;
  sbit wx2=P2^2;
  sbit wx3=P2^3;
  sbit wx4=P2^4;

  uchar  qian,bai,shi,ge,miao1,miao2,count;

  sbit LED1=P3^3;

  ////////////////////////////////////////////
  /***************按鍵調(diào)時(shí)程序***************/

   sbit K1=P3^0;
   sbit K2=P3^1;
   sbit K3=P3^2;

   sbit LVSE   =P3^4;  //綠色運(yùn)行燈
   sbit HONGSE =P3^5;  //紅色停止燈
   sbit HUANGSE=P3^6;  //黃色調(diào)鬧鐘燈

   sbit BEEP=P3^7;    //// 定義蜂鳴器口

   uchar K1num,K2num;


  

  //////////////////////////////////////////
    /**********報(bào)警聲音**************/

   bi(uint t)
   {
      int c,n;
      for(c=0;c<t;c++)
      {
      for(n=0;n<50;n++);
      BEEP=~BEEP;      //按位取反BEEP
      }
   return(t);
   }

 


  ///////////////////////////////////////////////
/********定時(shí)器初始化*************/

  void init()
    {
      TMOD=0x01; //定義定時(shí)器0,工作方式1 
      TH0=(65536-50000)/256;   //高8位 
      TL0=(65536-50000)%256;   //低8位 
      EA=1;     //開(kāi)全局中斷 
      ET0=1;   
      TR0=1;    //打開(kāi)定時(shí)器 

     }
 ///////////////////////////////////////////////  
/***********定時(shí)器中斷函數(shù)************/
  void timer0() interrupt 1
   {
     TH0=50;
     TL0=50;
     count++;
   if( count==20 ) { count=0; LED1=~LED1;  miao1++;
       
   if( miao1==10 ) { miao1=0;  miao2++; }
   if( miao2== 6 ) { miao2=0;     ge++; }
   if(    ge==10 ) {    ge=0;    shi++; }
   if(   shi== 6 ) {   shi=0;    bai++; }
   if(   bai==10 ) {   bai=0;   qian++; }
   if(  qian== 3 ) {  qian=0;     }
   if(qian==2&&bai==4){qian=0;bai=0;    }
     } }                

 

 


  //////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////
/**********時(shí)間顯示***************/    
    
   void shijianxianshi()    //時(shí)間顯示
    {
     if( K1num==0 )      //復(fù)位
      {
     TR0=1;LVSE=0; HONGSE=1;HUANGSE=1;
     wx1=1;
        P0=table[qian];
        delay1(3);
        wx1=0;

        wx2=1;
        P0=table[bai];
        delay1(3);
        wx2=0;
       
        wx3=1;
        P0=table[shi];
        delay1(3);
        wx3=0;

  wx4=1;
        P0=table[ge];
        delay1(3);
  wx4=0;
  }
/**************************************/

if( K1num==1 )  //選擇千位
     {
     TR0=0;LED1=1;LVSE=1; HONGSE=0; HUANGSE=1;
     wx1=1;
        P0=table[qian]+0x80;
        delay1(3);
        wx1=0;

        wx2=1;
        P0=table[bai];
        delay1(3);
        wx2=0;
       
        wx3=1;
        P0=table[shi];
        delay1(3);
        wx3=0;

  wx4=1;
        P0=table[ge];
        delay1(3);
  wx4=0;
  }

/**************************************/
if( K1num==2 )  //選擇百位
     {
   
     wx1=1;
        P0=table[qian];
        delay1(3);
        wx1=0;

        wx2=1;
        P0=table[bai]+0x80;
        delay1(3);
        wx2=0;
       
        wx3=1;
        P0=table[shi];
        delay1(3);
        wx3=0;

  wx4=1;
        P0=table[ge];
        delay1(3);
  wx4=0;
  }
/**************************************/
if( K1num==3 )    //選擇十位
     {
    
     wx1=1;
        P0=table[qian];
        delay1(3);
        wx1=0;

        wx2=1;
        P0=table[bai];
        delay1(3);
        wx2=0;
       
        wx3=1;
        P0=table[shi]+0x80;
        delay1(3);
        wx3=0;

  wx4=1;
        P0=table[ge];
        delay1(3);
  wx4=0;
  }

/**************************************/
if( K1num==4 )    //選擇個(gè)位
     {
    
     wx1=1;
        P0=table[qian];
        delay1(3);
        wx1=0;

        wx2=1;
        P0=table[bai];
        delay1(3);
        wx2=0;
       
        wx3=1;
        P0=table[shi];
        delay1(3);
        wx3=0;

  wx4=1;
        P0=table[ge]+0x80;
        delay1(3);
  wx4=0;
   }
 }

 

 

 
//////////////////////////////////////////////////////////////////////////////////// 
///////////////////按鍵功能設(shè)置///////////////////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////////// 
  void keycan()
  {
 ///////////////////時(shí)鐘功能設(shè)置////////////////////////
  
      /**********調(diào)時(shí)間功能選擇**********/
                
     if( K1==0   )   { K1num++; delay(5); if( K1==0 )
                  {        while(!K1);     bi(200);
     if(K1num==5 )   { K1num=0;TR0=1;}
       }
      }          
 ///////////////////////////////////////////////////
        /*********功能加*********/
    
       if( K1num!=0 ) {
         if( K2==0    ) { delay(5);
         if( K2==0    ) { while(!K2);bi(200);
   if( K1num==1 ) { qian++; if(qian==3 ) qian=0;   }     
         if( K1num==2 ) {  bai++; if( bai==10)  bai=0;   }
      if( K1num==3 ) {  shi++; if( shi==6 )  shi=0;   }
      if( K1num==4 ) {   ge++;  if(  ge==10)   ge=0;   }   
    }
      }
     }     
 //////////////////////////////////////////////////////////
         /**********功能減************/

   if( K1num!=0 ) {
         if( K3==0    ) { delay(5);
         if( K3==0    ) { while(!K3);bi(200);
   if( K1num==1 ) { qian--; if(qian==-1) qian=2;   }     
         if( K1num==2 ) {  bai--; if( bai==-1)  bai=9;   }
      if( K1num==3 ) {  shi--; if( shi==-1)  shi=5;   }
      if( K1num==4 ) {   ge--; if(  ge==-1)   ge=9;   }  
     }
    }
   }
     }
  
         

 

 

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
/***********主函數(shù)********************/
////////////////////////////////////////////////////////////
 void main()
 {
    init();
    qian=0;bai=6;shi=3;ge=0;miao2=0;miao1=0;
    while(1)
     {        
       ReadTemperature();
       wenduxianshi();
    keycan();
       shijianxianshi();
     }
  }
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 日本欧美国产在线观看 | 久久久观看 | 久久一热 | 国产极品车模吞精高潮呻吟 | 欧美一二三区 | 久久久中文| 亚洲小视频在线播放 | 国产精品乱码一区二三区小蝌蚪 | 91亚洲国产成人精品一区二三 | 99精品久久久久久中文字幕 | 欧美一区二区三区 | 欧美日在线 | 成人精品国产 | 午夜影院官网 | 免费观看成人性生生活片 | 亚洲国产欧美国产综合一区 | 国产一区二区欧美 | 国产区免费视频 | 夜夜爽99久久国产综合精品女不卡 | 成人午夜精品 | 精品久久久久久久久久久久 | 九九久久精品 | 精品网 | 精品久久久久久久久久久久久 | 欧美日韩国产高清 | h视频免费观看 | 久久久久国产精品一区二区 | 99热欧美| 成人黄色在线观看 | 欧美精品一区在线发布 | 免费在线观看黄色av | 亚洲精品一二三 | 国产午夜精品一区二区三区嫩草 | 91久久精品国产91久久 | 羞羞的视频免费观看 | 国产免费一区二区三区 | 亚洲黄色国产 | 国产欧美一区二区三区日本久久久 | 欧洲一区二区视频 | 亚洲中国字幕 | 九九精品在线 |