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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8941|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)電子鬧鐘程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:83249 發(fā)表于 2015-6-17 12:13 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
//****************頭文件及宏定義*******************************
#include <reg51.h>
#define   uchar  unsigned char
#define   uint   unsigned int
//****************軟件延時(shí)程序*********************************
void delay(uint ii)
        { while(--ii); }
//****************定義數(shù)碼管驅(qū)動(dòng)碼******************************
uchar duan[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,
0XBF,0XFF,0X7F}; //段選,0  1  2  3  4  5  6  7  8  9  -  滅 .
uchar  wei[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//位選,共陽,從右至左
//****************定義變量**************************************
uchar t=0,sec=0,min=0,hour=0;        //正常走時(shí)時(shí)間變量
uchar sec1=0,min1=0,hour1=0;     //時(shí)間設(shè)定值變量
uchar sec2=0,min2=0,hour2=0;     //鬧鐘設(shè)定值變量
uchar alarm_en=0;                //鬧鐘開關(guān)變量
uchar alarm_flag=0;              //鬧鐘定時(shí)到達(dá)標(biāo)志變量
uchar p3=0,moshi=0,mov=0;        //P3口查詢,模式值,調(diào)整位
//顯示緩沖區(qū),依次為正常、調(diào)時(shí)、鬧鐘設(shè)定、調(diào)整位帶點(diǎn)標(biāo)記
uchar temp[8],temp1[8],temp2[8],temp3[8];
//****************函數(shù)聲明*************************************
void  initialize(void);          //初始化
void  show(void);                //正常走時(shí)顯示
void  show1(void);               //時(shí)間設(shè)定顯示
void  show2(void);               //鬧鐘設(shè)定顯示
void  show3(void);               //調(diào)整位標(biāo)記
void  show4(void);               //鬧鐘開關(guān)標(biāo)記
void  keyscan(void);             //鍵盤掃描
void  add(void);                 //調(diào)時(shí)調(diào)鬧鐘加數(shù)程序
void  confirm(void);             //調(diào)時(shí)確認(rèn),鬧鐘開關(guān)
void  alarm_judge(void);         //鬧鐘定時(shí)到達(dá)判定
void  beep(void);                //鬧鐘響鈴程序
//******************主函數(shù)***************************
void main()
{
   initialize();
   while(1)
       {
              keyscan();
                 alarm_judge();
                 switch(moshi)
                       {
                              case 0:show(); show4();break;         //顯示正常走時(shí)
                                 case 1:show1();show3();break;    //顯示設(shè)置時(shí)間
                                 case 2:show2();show3();break;    //顯示鬧鐘時(shí)間
                           }
                 if(alarm_flag==1 && alarm_en==1)                 //定時(shí)時(shí)間到達(dá)且鬧鐘打開
                       {  beep(); }
           }
}
//*****************定時(shí)器初始化**************************
void initialize(void)
{
   TMOD = 0x01;
    TH0 = 0X3C;
    TL0 = 0XB0;           //50ms
    ET0 = 1;
     EA = 1;
TR0 = 1;

        P1=0X7F;         //初始化時(shí)關(guān)掉蜂鳴器
    alarm_flag=alarm_en=0;
}
//*****************定時(shí)器T0中斷服務(wù)程序****************
void Timer0(void) interrupt 1
{   
   TL0 = 0XB0;
   TH0 = 0X3C;

   t++;
   if(t==20)                // (50ms*20=1s)
          { t=0;   sec++; }      
   if(sec==60)              // 秒為60,則清零,分加1
          { sec=0; min++; }
   if(min==60)              // 分為60,則清零,時(shí)加1
          { min=0; hour++;}
   if(hour==24)             // 時(shí)為24,則清零
          { hour=0;}

   if(sec1==60)  
          { sec1=0; min1++; }
   if(min1==60)  
          { min1=0; hour1++;}
   if(hour1==24)
          { hour1=0;}

   if(sec2==60)  
          { sec2=0; min2++; }
   if(min2==60)  
          { min2=0; hour2++;}
   if(hour2==24)
          { hour2=0;}
}
//******************正常時(shí)間顯示程序*******************
void show(void)
{
    uchar i=0;

     temp[0]=sec%10;
        temp[1]=sec/10;
        temp[2]=10;
     temp[3]=min%10;
     temp[4]=min/10;
        temp[5]=10;
        temp[6]=hour%10;
        temp[7]=hour/10;

    for(i=0;i<8;i++)
        {
              P2=wei[i];
              P0=duan[temp[i]];
              delay(100);
        }
}
//******************調(diào)時(shí)模式顯示程序*******************
void show1(void)
{
    uchar i=0;
         
     temp1[0]=sec1%10;
        temp1[1]=sec1/10;
        temp1[2]=10;
     temp1[3]=min1%10;
     temp1[4]=min1/10;
        temp1[5]=11;
        temp1[6]=hour1%10;
        temp1[7]=hour1/10;

    for(i=0;i<8;i++)
        {
              P2=wei[i];
              P0=duan[temp1[i]];
              delay(100);
        }
}

//******************鬧鐘設(shè)定模式顯示程序*******************
void show2(void)
{
    uchar i=0;

     temp2[0]=sec2%10;
        temp2[1]=sec2/10;
        temp2[2]=11;
     temp2[3]=min2%10;
     temp2[4]=min2/10;
        temp2[5]=10;
        temp2[6]=hour2%10;
        temp2[7]=hour2/10;

    for(i=0;i<8;i++)
        {
              P2=wei[i];
              P0=duan[temp2[i]];
              delay(100);
        }
}

//******************調(diào)整位標(biāo)記顯示程序*******************
void show3(void)
{
     uchar movv=0;
     switch(mov)
               {
                     case 0:movv=0;        break;
                         case 1:movv=3;        break;
                         case 2:movv=6;        break;
                   }
     P2=wei[movv];
        P0=duan[12];
        delay(100);
}
//*********************鬧鐘開閉顯示程序*******************
void show4(void)
{
   if(alarm_en==1)
     {
        P2=wei[2]+wei[5];
           P0=duan[12];  
           delay(100);
         }   
}
//******************鍵盤掃描程序***********************
void keyscan(void)
{
          P3=0XFF;
       p3=P3;
   if(p3==0XFF) return;

   if(p3==0XFE)                //key_mode鍵
      {
            delay(10);
                if(p3==0XFE)
                  {
                    moshi++;
                        if(moshi>=3) moshi=0;                       
                  }
                while(p3==0XFE)   // key_mode鍵按下到彈起期間
                   {
                     p3=P3;
                         switch(moshi)
                       {
                             case 0:show(); break;           //顯示正常走時(shí)
                                 case 1:show1();break;    //顯示設(shè)置時(shí)間
                                 case 2:show2();break;    //顯示鬧鐘時(shí)間
                           }
                   }             
          }

   if(p3==0XFD)            //key_add鍵
      {
            delay(10);
                if(p3==0XFD)
                  {
                        add();
                  }

                while(p3==0XFD)    // key_add鍵按下到彈起期間
                   {
                         p3=P3;
                         switch(moshi)
                       {
                             case 0:show(); break;           //顯示正常走時(shí)
                                 case 1:show1();break;    //顯示設(shè)置時(shí)間
                                 case 2:show2();break;    //顯示鬧鐘時(shí)間
                           }
                   }            
          }

   if(p3==0XFB)                 //key_move鍵
      {
            delay(10);
                if(p3==0XFB)
                  {
                         mov++;
                         if(mov>=3) mov=0;                         
                  }
                while(p3==0XFB)   // key_move鍵按下到彈起期間
                    {
                          p3=P3;
                          switch(moshi)
                       {
                              case 0:show(); break;           //顯示正常走時(shí)
                                 case 1:show1();break;    //顯示設(shè)置時(shí)間
                                 case 2:show2();break;    //顯示鬧鐘時(shí)間
                           }
                    }            
          }

   if(p3==0XF7)            //key_confirm鍵
      {
            delay(10);
                if(p3==0XF7)
                  {
                        confirm();
                  }
                while(p3==0XF7)       // key_confirm鍵按下到彈起期間
                   {
                     p3=P3;
                         switch(moshi)
                       {
                             case 0:show(); break;           //顯示正常走時(shí)
                                 case 1:show1();break;    //顯示設(shè)置時(shí)間
                                 case 2:show2();break;    //顯示鬧鐘時(shí)間
                           }
                   }             
          }
}  

//******************調(diào)時(shí)調(diào)腦鐘增數(shù)程序***********************
void  add(void)
{
  //模式1,調(diào)時(shí)模式,調(diào)時(shí)增數(shù)
  if(moshi==1 && mov==0)
    {sec1++;}  
  if(moshi==1 && mov==1)
    {min1++;}
  if(moshi==1 && mov==2)
    {hour1++;}

  //模式2,鬧鐘設(shè)定模式,鬧鐘增數(shù)                
  if(moshi==2 && mov==0)
    {sec2++;}  
  if(moshi==2 && mov==1)
    {min2++;}
  if(moshi==2 && mov==2)
    {hour2++;}         
}



//******************確認(rèn)鍵服務(wù)函數(shù)***************************
void  confirm(void)
{
  if(moshi==1)                 //模式1,調(diào)時(shí)環(huán)境下校正時(shí)間
    {
          t=TF0=0;
          sec=sec1;
      min=min1;
      hour=hour1;
      sec1=min1=hour1=0;
        }

  alarm_en++;         //開閉鬧鐘
  if(alarm_en>1) alarm_en=0;
}

//******************鬧鐘判斷函數(shù)******************************
void  alarm_judge(void)
{
   if(hour==hour2 && min==min2 && sec==sec2 )         //定時(shí)到達(dá)設(shè)定標(biāo)志
          { alarm_flag=1; }
   if(hour==hour2 && min==min2+1)                  //常規(guī)響鈴一分鐘
          { alarm_flag=0; }          
}

//******************鬧鐘響鈴函數(shù)******************************
void  beep(void)
{
        P1=!P1;
}


評(píng)分

參與人數(shù) 2威望 +2 黑幣 +51 收起 理由
1677012963 + 2 + 1 贊一個(gè)!
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:83328 發(fā)表于 2015-6-18 09:07 | 只看該作者
樓豬有沒有仿真圖
回復(fù)

使用道具 舉報(bào)

板凳
ID:69408 發(fā)表于 2015-6-20 11:52 | 只看該作者
不錯(cuò)!學(xué)習(xí)學(xué)習(xí),有仿真圖就更好了.
回復(fù)

使用道具 舉報(bào)

地板
ID:83478 發(fā)表于 2015-6-21 20:30 | 只看該作者
樓主這程序有點(diǎn)小問題啊!上電后,按下鬧鈴鍵后鬧鐘立馬就響了。我找了一下問題可能是初次掃描時(shí) hour==hour2 && min==min2 && sec==sec2, 導(dǎo)致alarm_flag=1; 因?yàn)樵诙x和初始化時(shí) t=0,sec=0,min=0,hour=0;        
uchar sec1=0,min1=0,hour1=0;     
uchar sec2=0,min2=0,hour2=0;
不知道對(duì)不對(duì)!求指教~~~
回復(fù)

使用道具 舉報(bào)

5#
ID:83478 發(fā)表于 2015-6-21 20:40 | 只看該作者
1677012963 發(fā)表于 2015-6-21 20:30
樓主這程序有點(diǎn)小問題啊!上電后,按下鬧鈴鍵后鬧鐘立馬就響了。我找了一下問題可能是初次掃描時(shí) hour==hou ...

不好意思!!新人沒多少黑幣~
回復(fù)

使用道具 舉報(bào)

6#
ID:82937 發(fā)表于 2015-6-22 12:01 | 只看該作者
你有更詳細(xì)的資料嗎》?
回復(fù)

使用道具 舉報(bào)

7#
ID:83649 發(fā)表于 2015-6-22 22:11 | 只看該作者
贊一個(gè)
回復(fù)

使用道具 舉報(bào)

8#
ID:83478 發(fā)表于 2015-6-24 00:19 | 只看該作者
謙虛請(qǐng)教 發(fā)表于 2015-6-22 12:01
你有更詳細(xì)的資料嗎》?

什么意思啊?程序不都在上面立嗎,注釋得很詳細(xì)~
回復(fù)

使用道具 舉報(bào)

9#
ID:83784 發(fā)表于 2015-6-24 14:32 | 只看該作者
仿真圖有嗎
回復(fù)

使用道具 舉報(bào)

10#
ID:83784 發(fā)表于 2015-6-24 14:32 | 只看該作者
需要一個(gè) 期末作品覺得你這個(gè)挺好的
回復(fù)

使用道具 舉報(bào)

11#
ID:94340 發(fā)表于 2015-11-1 20:02 | 只看該作者
為什么沒有原理圖呢
回復(fù)

使用道具 舉報(bào)

12#
ID:191450 發(fā)表于 2017-5-1 16:29 | 只看該作者

 樓主能分享一下原理圖嗎?
回復(fù)

使用道具 舉報(bào)

13#
ID:218694 發(fā)表于 2017-7-12 11:05 | 只看該作者
請(qǐng)問有原理圖嗎?
回復(fù)

使用道具 舉報(bào)

14#
ID:775574 發(fā)表于 2020-6-11 14:10 | 只看該作者
有沒有仿真圖?
回復(fù)

使用道具 舉報(bào)

15#
ID:1136663 發(fā)表于 2024-11-24 23:02 | 只看該作者
1677012963 發(fā)表于 2015-6-21 20:40
**** 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽 ****

當(dāng)時(shí)的新人如今已經(jīng)是大佬了,感覺是這樣的
回復(fù)

使用道具 舉報(bào)

16#
ID:961114 發(fā)表于 2024-11-25 09:18 | 只看該作者
最近好多同學(xué)都在跟郭老師學(xué) 神奇鬧鐘啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 蜜桃av人人夜夜澡人人爽 | 日日天天 | 欧洲一区二区在线 | 亚洲网站在线观看 | 国产激情视频网 | 91福利在线观看视频 | www网站在线观看 | 免费在线观看一区二区 | 亚洲视频一区在线观看 | 亚洲视频免费观看 | 一级做受毛片免费大片 | 国产成人精品久久二区二区91 | 视频一区二区中文字幕 | 国产精品久久久久久影视 | 国产91综合一区在线观看 | 69精品久久久久久 | 日本一道本视频 | 久久精品欧美一区二区三区不卡 | 日韩第一夜| 久久精品一级 | 爱操av | 国产精品美女 | 在线播放一区二区三区 | 精品一区二区三区四区五区 | 午夜影视在线观看 | 久久久久www | 午夜精品久久久 | 国产真实精品久久二三区 | 欧美中文 | 日韩精品在线免费观看 | av黄色网| 精品一区二区三区在线观看 | 中文字幕第三页 | 天堂色区| 99小视频 | 超碰免费在 | 亚洲九九色 | 精品中文字幕一区二区 | 黄色毛片大全 | 国产精品久久亚洲 | 欧美精品一区二区免费视频 |