<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 可自定義小時(shí)、分鐘的1602鬧鐘程序

可自定義小時(shí)、分鐘的1602鬧鐘程序

作者: 時(shí)間:2012-10-11 來(lái)源:網(wǎng)絡(luò ) 收藏
程序還是在原有基礎上小修改了一下,去掉了星期顯示,把原來(lái)整點(diǎn)鬧鐘改成了可自由設定小時(shí)+分鐘的鬧鐘,其他的功能還是不變。

功能:時(shí)間,時(shí)分鬧鐘設置,上下限溫度設置,溫度顯示。

鬧鐘可設置到分鐘,響鈴時(shí)間還是10秒鐘。

可擴展功能:,一個(gè)星期中的任何一天鬧鐘設定,需要添加或者修改一下程序即可,程序只是簡(jiǎn)單的整理了一下,很多地方很亂,需要程序的朋友最好有較好的編程能力,否者很難理解程序的寫(xiě)作思維。


仿真圖
點(diǎn)擊瀏覽下一頁(yè)
完整的源代碼下載: http://www.51hei.com/ziliao/file/_naoz.rar

#include"reg51.h"#define uchar unsigned char #define uint unsigned int sbit BEEP=P3^7;    //// 定義蜂鳴器口unsigned char L,H,Z,Y;     //// 定義高低溫度變量//////////////////////////////////////////////////////**********報警聲音**************/bi(uint t){int c,n;for(c=0;ct;c++){for(n=0;n50;n++);BEEP=~BEEP;      //按位取反BEEP}return(t);}//////////////////////////////////////////////**********18b20溫度程序**********/ sbit DQ=P3^6;       //定義溫度數據口int xs;      //定義小數 unsigned int temp,temp1,temp2;  //定義溫度轉換變量     ///////////////////////////////////////////////////*********18B20延時(shí)程序************/void delay_18B20(unsigned int i){while(i--);}//////////////////////////////////////////////////////*********ds18b20初始化函數*********/void Init_DS18B20(void)  {unsigned char x=0;DQ = 1;          //DQ復位 ds18b20通信端口 delay_18B20(8);  //稍做延時(shí)DQ = 0;          //單片機將DQ拉低 delay_18B20(80); //精確延時(shí) 大于 480usDQ = 1;          //拉高總線(xiàn)delay_18B20(4);x=DQ;            //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗delay_18B20(20);}/////////////////////////////////////////////////////////********ds18b20讀一個(gè)字節**********/unsigned char ReadOneChar(void){unsigned char i=0,dat = 0;for (i=8;i>0;i--){DQ = 0;    //高電平拉成低電平時(shí)讀周期開(kāi)始dat>>=1;DQ = 1;    //給脈沖信號if(DQ)dat|=0x80;  delay_18B20(4);}return(dat);}//////////////////////////////////////////////////*************ds18b20寫(xiě)一個(gè)字節****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;         //從高電平拉至低電平時(shí),寫(xiě)周期的開(kāi)始DQ = dat0x01;  //數據的最低位先寫(xiě)入delay_18B20(5); //60us到120us延時(shí)DQ = 1;        dat>>=1;        //從最低位到最高位傳入}}////////////////////////////////////////////////////////////**************讀取ds18b20當前溫度************/void ReadTemperature(void){unsigned char a=0,b=0,t=0;Init_DS18B20 ( );WriteOneChar ( 0xCC );       // 跳過(guò)讀序號列號的操作WriteOneChar ( 0x44 );       // 啟動(dòng)溫度轉換delay_18B20  ( 100  );       // this message is wery importantInit_DS18B20 ( );WriteOneChar ( 0xCC );       //跳過(guò)讀序號列號的操作WriteOneChar ( 0xBE );       //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度delay_18B20  ( 100  );a=ReadOneChar( );            //讀取溫度值低位b=ReadOneChar( );            //讀取溫度值高位temp1 = b4;                //高8位中后三位數的值temp1+= ( a0xf0 )>>4;       //低8位中的高4位值加上高8位中后三位數的值   temp1室溫整數值temp2 = a0x0f;              //小數的值temp  = ( ( b*256+a ) >>4 ); //當前采集溫度值除16得 實(shí)際溫度值    zhenshu    xs=temp2*0.0625*10;          //小數位,若為0.5則算為5來(lái)顯示   xs小數    xiaoshu      }/////////////////////////////////////////////////////////////////////*********************液晶程序********************//******定義液晶控制口*******/ sbit lcdrs=P2^5;   //定義液晶三個(gè)控制口sbit lcdrw=P2^6;sbit lcden=P2^7;sbit K1=P3^0;     //定義三個(gè)開(kāi)關(guān)sbit K2=P3^1;sbit K3=P3^2;////////////////////////////////////////////////////////////******定義變量*******/uchar count,shi,fen,miao,xq,K1num;   //定義時(shí)間程序里所需要的變量///////////////////////////////////////////////////////////////////******定義數組*******/// uchar code table [ ]= "H:38 L:25 00 Q:7";    //液晶界面顯示的內容// uchar code table1[ ]= "23:59:55    .  C";uchar code table [ ]= "01:00:55   01-01";    //液晶界面顯示的內容uchar code table1[ ]= "H:38 L:25   .  C";//////////////////////////////////////////////////////////////******延時(shí)程序*******/ void delay(uint m)    //液晶延時(shí)程序{uint i,j;for(i=m;i>0;i--)for(j=110;j>0;j--);}////////////////////////////////////////////////////////////////////////////////////////////// /**********寫(xiě)指令*************/ void write_com(uchar com){lcdrs=0;lcdrw=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}////////////////////////////////////////////////////////************寫(xiě)數據*************/ void write_data(uchar date){lcdrs=1;lcdrw=0;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////***************液晶顯示程序***************/  /*********時(shí)分秒數的分離**********/ void write_sfm(uchar add,uchar date){ uchar shi,ge;     //分離數字,如35,分成3和5  shi=date/10;     ge=date%10;     write_com  ( 0x80+add  );    write_data ( 0x30+shi  );       write_data ( 0x30+ge   );       }///////////////////////////////////////////////////////////////////**********星期***********/ void write_xq(uchar add1,uchar date1){uchar ge;      //星期只需要一個(gè)數字顯示   ge=date1%10;    write_com  ( 0x80+add1 );    write_data ( 0x30+ge   );      }/////////////////////////////////////////////////////////////////************高溫低溫數的分離************/void write_HL(uchar add2,uchar date2){uchar shi,ge;   shi=date2/10;     ge=date2%10;      write_com(0x80+0x40+add2);     write_data(   0x30+shi  );  write_data(   0x30+ge   );   }/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////***************按鍵調時(shí)程序***************/ void keycan(){/**********功能選擇**********/ if( K1==0    ) { K1num++; delay(1); if( K1==0 ) {  while(!K1);bi(200);if( K1num==1 ) { TR0=0; write_com ( 0x80+1 ); write_com(0x0f); }  //時(shí)if( K1num==2 ) { write_com ( 0x80+4 ); }        //分if( K1num==3 ) { write_com ( 0x80+7 );  }       //秒//if( K1num==4 ) { write_com ( 0x80+11 );  }       //星期if( K1num==4 ) { write_com ( 0x80+12 );  }       //鬧鐘if( K1num==5 ) { write_com ( 0x80+15 );  }if( K1num==6 ) { write_com ( 0x80+0x40+3 );  }      //上限if( K1num==7 ) { write_com ( 0x80+0x40+8 );  }      //下限if( K1num==8 ) { K1num=0; write_com(0x0c); TR0=1; }     //退出設置} }///////////////////////////////////////////////////////////////////////*********功能加*********/ if( K1num!=0 ) {if( K2==0    ) { delay(1);if( K2==0    ) { while(!K2);bi(200);if( K1num==1 ) { shi++;    if(  shi==24 )   shi=0;  write_sfm ( 0,shi );  write_com ( 0x80+1 ); }      if( K1num==2 ) { fen++;    if(  fen==60 )   fen=0;  write_sfm ( 3,fen );  write_com ( 0x80+4 ); }if( K1num==3 ) { miao++;   if( miao==60 )  miao=0;  write_sfm ( 6,miao);  write_com ( 0x80+7 ); }//if( K1num==4 ) { xq++;     if(   xq==8  )    xq=1;  write_xq  (11,xq  );  write_com ( 0x80+11); }if( K1num==4 ) {  Z++;     if(    Z==24 )     Z=0;  write_sfm (11,Z   );  write_com ( 0x80+12); }if( K1num==5 ) {  Y++;     if(    Y==60 )     Y=0;  write_sfm (14,Y   );  write_com ( 0x80+15); }if( K1num==6 ) {  H++;     if(    H==100)     H=0;  write_HL  ( 2,H   );  write_com ( 0x80+0x40+3);}if( K1num==7 ) {  L++;     if(    L==100)     L=0;  write_HL  ( 7,L   );  write_com ( 0x80+0x40+8);}}}} ////////////////////////////////////////////////**********功能減************/ if(K1num!=0)  {if(K3==0   )  { delay(1);if(K3==0   )  { while(!K3); bi(200);if( K1num==1 ) { shi--;    if(  shi==-1 )   shi=23;  write_sfm ( 0,shi );  write_com ( 0x80+1 ); }      if( K1num==2 ) { fen--;    if(  fen==-1 )   fen=59;  write_sfm ( 3,fen );  write_com ( 0x80+4 ); }if( K1num==3 ) {miao--;    if( miao==-1 )  miao=59;  write_sfm ( 6,miao);  write_com ( 0x80+7 ); }// if( K1num==4 ) { xq--;     if(   xq==0  )     xq=7;  write_xq  (11,xq  );  write_com ( 0x80+11); }if( K1num==4 ) {  Z--;     if(    Z==-1 )     Z=23;  write_sfm (11,Z   );  write_com ( 0x80+12); }if( K1num==5 ) {  Y--;     if(    Y==-1 )     Y=59;  write_sfm (14,Y   );  write_com ( 0x80+15); }if( K1num==6 ) {  H--;     if(    H==-1 )     H=99;  write_HL  ( 2,H   );  write_com ( 0x80+0x40+3);}if( K1num==7 ) {  L--;     if(    L==-1 )     L=99;  write_HL  ( 7,L   );  write_com ( 0x80+0x40+8);}}}}}////////////////////////////////////////////////////////////*************初始化**************/void init(){uchar num;  //定義一個(gè)變量num,用于下面數組的初始化//  lcden=0;write_com ( 0x38 );write_com ( 0x0c );   //不顯示光標  write_com ( 0x06 );   //光標向右邊自動(dòng)移位  write_com ( 0x01 );   //清屏  shi=1; fen=00; miao=55;  //xq=7; H=38; L=25; Z=1; Y=1;write_com ( 0x80 );     for( num=0; num16; num++ ){ write_data( table[num]  );  delay(5); }write_com ( 0x80+0x40 );       for( num=0; num16; num++ ){ write_data( table1[num] );  delay(5); }////////////////////////////////////////////////////////////********定時(shí)器初始化*************/ 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í)器中斷函數************/void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if( count==20 ) { count=0;    miao++;if(  miao==60 ) {  miao=0;     fen++; }  if(   fen==60 ) {   fen=0;     shi++; }  if(   shi==24 ) {   shi=0;      //xq++;//if(    xq==8  ) {    xq=1;    }  }      }}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*****************************************/uchar code mytab[8]={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};/*  設定顯示位置           /**************************************/void lcd_pos(uchar pos){                          write_com(pos | 0x80) ;  //數據指針=80+地址變量}//////////////////////////////////////////////*自定義字符寫(xiě)入CGRAM   /*********************************/void  writetab()  {  unsigned char i ;write_com(0x40) ;            //寫(xiě)CGRAMfor (i = 0 ; i 8 ; i++)       write_data(mytab[ i ]) ;        }/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void wendu()  /////溫度顯示程序/////   {writetab(   ) ;          //自定義字符寫(xiě)入CGRAMdelay   ( 5 ) ;lcd_pos   ( 0x4e ) ;      //顯示圈圈write_data( 0x00 ) ;    //顯示自定義字符 write_com ( 0x0c );ReadTemperature();    write_com  ( 0x80+0x40+10 ); write_data ( 0x30+temp/10 );write_com  ( 0x80+0x40+11 );write_data ( 0x30+temp%10 );write_com  ( 0x80+0x40+13 );write_data ( 0x30+xs%10   );/////時(shí)間顯示地址/////  write_sfm( 0,shi  ); write_sfm( 3,fen  );write_sfm( 6,miao );// write_xq (11,xq   ); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////溫度報警程序//////void baojing(){  if(H==temp){bi(500);}if(L==temp){bi(500);}if((Z==shi)(Y==fen)(miao10))   //設定報警,響10秒鐘結束。{   {  bi(500);}}}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////***************主函數***************/ void main(){init();while(1)  {keycan();wendu(); baojing();}}

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


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


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


關(guān)鍵詞: 1602 鬧鐘程序 音樂(lè )響鈴

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>