新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 時鐘+溫度計(jì)的數(shù)碼管顯示

時鐘+溫度計(jì)的數(shù)碼管顯示

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

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

說明:

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

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

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

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

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

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

限于篇幅以下是部分源代碼,完整版本請到http://www.51hei.com/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};/******延時程序*******/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); //稍做延時DQ = 0;          //單片機(jī)將DQ拉低delay(80); //精確延時 大于 480usDQ = 1;          //拉高總線  delay(4);x=DQ;            //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗delay(20);}/***********ds18b20讀一個字節(jié)**************/uchar ReadOneChar(){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 高電平拉成低電平時讀周期開始dat>>=1;DQ = 1; // 給脈沖信號if(DQ)dat|=0x80;   //delay(4);}return(dat);}/*************ds18b20寫一個字節(jié)****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;          //從高電平拉至低電平時,寫周期的開始DQ = dat0x01;   //數(shù)據(jù)的最低位先寫入delay(5);        //60us到120us延時DQ = 1;       dat>>=1;         //從最低位到最高位傳入}}/**************讀取ds18b20當(dāng)前溫度************/void ReadTemperature(){unsigned char a=0;unsigned  b=0;unsigned  t=0;Init_DS18B20();WriteOneChar(0xCC);   // 跳過讀序號列號的操作WriteOneChar(0x44);   // 啟動溫度轉(zhuǎn)換delay(10);            // this message is wery importantInit_DS18B20();WriteOneChar(0xCC);   //跳過讀序號列號的操作WriteOneChar(0xBE);   //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度delay(10);a=ReadOneChar();      //讀取溫度值低位 b=ReadOneChar();      //讀取溫度值高位   temp1=b4;           //高8位中后三位數(shù)的值temp1+=(a0xf0)>>4;   //低8位中的高4位值加上高8位中后三位數(shù)的值 temp1室溫整數(shù)值temp2=a0x0f;         //小數(shù)的值temp=((b*256+a)>>4);  //當(dāng)前采集溫度值除16得 實(shí)際溫度值    zhenshu   xs=temp2*0.0625*10;   //小數(shù)位,若為0.5則算為5來顯示  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;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////**** 端口定義******/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)時程序***************/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;///////////////////////////////////////////**********報警聲音**************/bi(uint t){int c,n;for(c=0;ct;c++){for(n=0;n50;n++);BEEP=~BEEP;      //按位取反BEEP}return(t);}////////////////////////////////////////////////********定時器初始化*************/void init(){TMOD=0x01; //定義定時器0,工作方式1 TH0=(65536-50000)/256;   //高8位 TL0=(65536-50000)%256;   //低8位 EA=1;     //開全局中斷 ET0=1;   TR0=1;    //打開定時器 }///////////////////////////////////////////////  /***********定時器中斷函數(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==2bai==4){qian=0;bai=0;    }} }                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////**********時間顯示***************/    void shijianxianshi()    //時間顯示{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 )    //選擇個位{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è)置/////////////////////////**********調(diào)時間功能選擇**********/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();}}

c++相關(guān)文章:c++教程


蜂鳴器相關(guān)文章:蜂鳴器原理


評論


相關(guān)推薦

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

關(guān)閉