久久久久久久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();           
    }   
}
關閉窗口

相關文章

主站蜘蛛池模板: 亚洲麻豆 | 999久久久| 精品中文在线 | 欧美综合自拍 | 成人免费视频在线观看 | 久久性色| 成年人免费看 | 欧美在线色 | 欧美黄色一区 | 天堂久 | 日韩av电影在线观看 | 亚洲一区欧美 | 久久久久久国模大尺度人体 | 精品熟人一区二区三区四区 | 亚洲综合无码一区二区 | 成人午夜黄色 | 日韩一区二区视频 | 91精品国产一区二区在线观看 | 亚洲综合在线视频 | 蜜桃av一区二区三区 | 日韩在线免费播放 | 欧美精品一区二区三区一线天视频 | 一区二区成人 | 中文字幕高清一区 | 精品国产乱码久久久久久a丨 | 91亚洲国产成人精品一区二三 | 伊人免费视频二 | 九色在线观看 | 在线āv视频 | 午夜爽爽男女免费观看hd | 成人一区二区三区视频 | 天堂av影院| 日韩中文字幕在线观看 | 视频一区二区三区在线观看 | 欧美日韩在线观看视频 | 亚洲天堂精品一区 | 欧美日韩亚洲一区二区 | 国产亚洲精品久久久久动 | 2018天天干天天操 | 一区二区高清在线观看 | 欧美日韩精品一区二区三区四区 |