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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

一個鬧鐘的單片機程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年11月07日   【字體:

一個鬧鐘的單片機程序。

其中蜂鳴器接P37,我的單片機數碼管是四位共陽數碼管,接P0和P2,K1接P14,K2接P15,K3接P16,K4接P17。晶振采用12MHz。STC89C52

 

代碼如下:

//File: Clock.c
#include <REGX52.H>
const unsigned char LED7Code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned int hour,minute,second,cHour,cMinute;
bit isClick = 0;
unsigned char modify =0x00;//是否處于時間編輯狀態
bit isClock =0;//是否開啟鬧鐘

unsigned char timercount;
void timer0() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    timercount++;
    if(timercount==20)
    {
        timercount=0;
        second++;
        if(second==60)
        {
            minute++;
            second=0;
        }
        if(minute==60)
        {
            hour++;
            minute=0;
        }
        if(hour==24)
        {
            hour=0;
        }
    }   
}
//延遲
void Delay(unsigned int time)
{
    unsigned char a,b;
    for(a=0;a<time;a++)
            for(b=0;b<120;b++);
}

//用于顯示時間
void ShowTime(void)
{   
    unsigned int a,b, tempH,tempM;
    unsigned char showChar;
    if(modify==0x00 || modify ==0x01 || modify ==0x02)
    {
        tempH=hour;
        tempM=minute;
    }
    else
    {
        tempH=cHour;
        tempM=cMinute;
    }   
   
    if(modify==0x00 || modify ==0x01 || modify ==0x03)
    {
        //顯示第4個數碼管
        P0=0xFF;
        P2=0xFF;   
        a=tempH/10;
        showChar=LED7Code[a];
        P0=showChar;
        P2_3=0x00;
        Delay(1);//延遲很短
   
        //顯示第3個數碼管
        P0=0xFF;
        P2=0xFF;   
        b=tempH%10;
        showChar=LED7Code[b];
        P2_2=0x00;
        P0=showChar;
        Delay(1);//延遲很短
    }
   
    if(modify==0x00 || modify ==0x02 || modify ==0x04)
    {
        //顯示第2個數碼管
        P0=0xFF;
        P2=0xFF;   
        a=tempM/10;
        showChar=LED7Code[a];
        P0=showChar;
        P2_1=0x00;
        Delay(1);//延遲很短
   
        //顯示第1個數碼管
        P0=0xFF;
        P2=0xFF;   
        b=tempM%10;
        showChar=LED7Code[b];
        P2_0=0x00;
        P0=showChar;
        Delay(1);//延遲很短
    }
}

//蜂鳴器響
void Beep()    
{
   unsigned char i  ;
   for (i=0  ;i<100  ;i++)
   {
     Delay(100)  ;
     P3_7=!P3_7  ;   //Beep取反
   }
   P3_7=1  ;         //關閉蜂鳴器
   Delay(100);
  }

void main(void)
{
    unsigned int i;
    hour=12;
    minute=30;
    second=0;
    cHour=7;
    cMinute=0;
   
    TMOD=0x01;
    ET0=0x01;//定時器T0可以中斷
    EA=0x01;//表示允許所有的中斷
    TR0=0x01;//開始T0計時
   
    while(1)
    {
        if(P1_4==0x00)//按下了K1鍵,增加小時或分鐘
        {
            if(!isClick)
            {
                switch(modify)
                {
                    case 0x01://調整小時
                        hour++;
                        if(hour==24)
                            hour=0;
                        break;
                    case 0x02://調整分鐘
                        minute++;
                        if(minute==60)
                            minute=0;
                        break;
                    case 0x03://調整鬧鐘的小時
                        cHour++;
                        if(cHour==24)
                            cHour=0;
                        break;
                    case 0x04://調整鬧鐘的分鐘
                        cMinute++;
                        if(cMinute==60)
                            cMinute=0;
                        break;   
                    default:
                        break;
                }
                isClick=1;   
            }
        }
        else if(P1_5==0x00)//按下了K2鍵,減少小時或分鐘
        {
            if(!isClick)
            {
                switch(modify)
                {
                    case 0x01://調整時間的小時                       
                        if(hour==0)
                            hour=23;
                        else
                            hour--;
                        break;
                    case 0x02://調整時間的分鐘                       
                        if(minute==0)
                            minute=59;
                        else
                            minute--;
                        break;
                  case 0x03://調整鬧鐘的小時                       
                        if(cHour==0)
                            cHour=23;
                        else
                            cHour--;
                        break;
                    case 0x04://調整鬧鐘的分鐘                       
                        if(cMinute==0)
                            cMinute=59;
                        else
                            cMinute--;
                        break;
                    default:
                        break;
                }
                isClick=1;   
            }
        }
        else if(P1_6==0x00)//按下了K3鍵,更改模式,第一次修改小時,第二次修改分鐘,第三次恢復
        {
            if(!isClick)
            {
                switch(modify)
                {
                    case 0x00://不是修改狀態,調整小時                   
                        modify=0x01;
                        break;
                    case 0x01://調整分鐘                   
                        modify=0x02;
                        break;
                    case 0x02://調整鬧鐘的小時       
                        modify=0x03;
                        break;
                    case 0x03://調整鬧鐘的分鐘       
                        modify=0x04;
                        break;
                    case 0x04://不修改       
                        modify=0x00;
                        break;               
                    default:
                        break;
                }
                isClick=1;   
            }
        }
        else if(P1_7==0x00)//按下了K4鍵,開啟或關閉鬧鐘
        {
            if(!isClick)
            {
                isClock=~isClock;
                isClick=1;   
            }
        }
        else
            isClick=0;
       
        //鬧鐘是否響了
        if(isClock)
        {
            if(hour==cHour && minute == cMinute)
            {
                Beep();//響
            }
        }
        ShowTime();           
    }   
}
關閉窗口

相關文章

主站蜘蛛池模板: 亚洲精品视频导航 | 亚洲视频在线一区 | 99精品欧美一区二区三区综合在线 | 欧美日韩视频在线第一区 | 97国产在线视频 | 成人福利电影 | 国产色婷婷精品综合在线播放 | 欧美一区二区三区在线观看 | 日本精品视频一区二区 | 97国产精品视频人人做人人爱 | 午夜大片| 美女张开腿露出尿口 | 成人精品| 久久久久久网站 | 亚洲精品在线播放 | 波多野结衣一区二区 | 福利国产| 91精品国产乱码久久久久久久久 | 成人午夜在线 | 国产中文一区二区三区 | 日韩一区二区三区在线视频 | 日韩一级免费电影 | 午夜影视 | 日韩在线免费播放 | 99久久精品国产一区二区三区 | 欧美一区二区成人 | 久久精品无码一区二区三区 | 精品国产乱码一区二区三区a | 在线色网址 | 日本精品久久 | 国产成人综合在线 | 久久www免费视频 | jizjizjiz中国护士18 | 91国内精品久久 | 黑人中文字幕一区二区三区 | 国产精品成人品 | 欧美精品1区 | 色.com| 精品国产一区二区三区性色av | av网站免费在线观看 | av毛片在线播放 |