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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1244|回復: 1
打印 上一主題 下一主題
收起左側

寫了個數碼管時鐘的單片機代碼,但是不知道怎么實現按鍵可調的鬧鐘的功能

[復制鏈接]
跳轉到指定樓層
樓主
ID:1105003 發表于 2023-12-18 21:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用的板是德飛萊的mini80e開發板,芯片是AT89S52,求助怎么實現鬧鐘功能

數碼管時鐘.zip

113.41 KB, 下載次數: 4

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

使用道具 舉報

沙發
ID:404160 發表于 2023-12-19 11:22 | 只看該作者
通過使用定時器模塊來實現按鍵可調的鬧鐘功能。具體操作如下:

定義一個變量alarm_time用于存儲用戶設置的鬧鐘時間戳;
當按下鬧鐘鍵時,啟動定時器并設置定時器的計時時間為alarm_time;
每次定時器中斷發生時,判斷是否已經超過設定的時間點,如果超過了則響鈴提示;
如果沒有超過設定的時間點,則重新設置定時器的計時時間為當前時刻加上一段延時時間,以便下次定時器中斷時再次響鈴提示。
另外還需要添加一個按鈕來停止鬧鐘。當按下該按鈕時,終止定時器循環并將alarm_time置為-1表示取消鬧鐘。
同時需要添加一些顯示界面來讓用戶可以查看當前的鬧鐘狀態以及修改鬧鐘時間等操作。
具體的代碼實現可以參考下面的示例:
// 定義一個變量保存用戶設置的鬧鐘時間戳
unsigned int alarm_time = -1; // 初始值為未設鬧鐘

void timer() {
    if (alarm_time != -1) {     // 若設置了鬧鐘,則響鈴提示
        if ((int)(millis()) > alarm_time) {         // 已到設定的時間點
            beep();                                // 響鈴提示
            alarm_time = -1;                       // 清空鬧鐘時間戳
        } else {
            delay(ALARM_INTERVAL);               // 延時一定時間后再次響鈴提醒
        }
    }
}

void setup() {
    pinMode(BUTTON, INPUT);           // 配置按扭傳感器引腳為輸入模式
    attachInterrupt(digitalPinToInterruptNumber(BUTTON), buttonPressed, FALLING);   // 注冊按鍵觸發的中斷函數
    setAlarmTime(-1);                      // 初始化鬧鐘時間戳為未設鬧鐘
}

void loop() {
    while (!buttonPressed());          // 直到按下按鈕才跳出循環體
    clearButtonPressedFlag();             // 釋放按鍵觸發的中斷標志位
    setAlarmTime(userInputGetCurrentDateTime()); // 根據用戶的選擇設置新的鬧鐘時間
    startTimer();                              // 開啟定時器循環
    displaySetText("");                       // 清除顯示屏上的內容
    displayClearDisplay();                     // 清除顯示屏上所有的字符
    displayPrintf("%d", userInputGetCurrentDateTime().hour);
    displayPrintf(":%d", userInputGetCurrentDateTime().minute);
    displayPrintf(":%d", userInputGetCurrentDateTime().second);
    displayPrintf(" ");
    displayPrintf("%s", "Alarm Time");
    displayPrintf(" %d ", getAlarmTime());
    displayUpdateScreen();                    // 刷新顯示屏的內容
    stopTimer();                              // 關閉定時器循環
}

void buttonPressed() {
    return !digitalRead(BUTTON);           // 按扭傳感器輸出高電平即為按下按鈕
}

void setAlarmTime(uint8_t time) {
    uint8_t old_value = alarm_time;
    alarm_time = time;
    if (old_value == -1 && alarm_time != -1) {     // 從未設鬧鐘變為設了鬧鐘
        startTimer();                              // 打開定時器循環
    } else if (old_value != -1 && alarm_time == -1) { // 從有鬧鐘變成無鬧鐘
        stopTimer();                              // 關閉定時器循環
    }
}

void startTimer() {
    noInterrupts();
    TCNT0 = (F_CPU / ALARM_CLOCK)/PRESCALE;
    ICR1 |= _BV(ICIE1);
    interrupts();
}

void stopTimer() {
    noInterrupts();
    IC1R &= ~(_BV(ICEN1));
    interrupts();
}
以上是使用ATmega328p單片機的示例代碼,其他型號的單片機也可以根據自己的實際情況進行相應的調整

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区四区三区四 | 性色综合 | 亚洲 自拍 另类 欧美 丝袜 | 在线播放第一页 | 精品精品视频 | 中文字幕成人av | 五月天婷婷综合 | 欧美日韩国产综合在线 | 亚洲成人一区二区三区 | 国产精品无码专区在线观看 | 羞羞视频网站免费观看 | 99re6在线视频 | 欧美激情一区二区 | 欧美激情在线观看一区二区三区 | 国产伦精品一区二区三区高清 | 成人亚洲 | 久久在线免费 | 国产福利二区 | 亚洲喷水 | 亚洲福利一区二区 | av在线播放网 | 国产欧美日韩精品一区 | 色婷婷综合久久久中文字幕 | 亚洲一区二区三区四区五区午夜 | 久久久精品一区 | 亚洲视频中文字幕 | 中文字幕在线一区二区三区 | 久久久精品一区二区 | 国产第一页在线观看 | 色永久 | 中文在线视频 | 日本不卡免费新一二三区 | 久久精品91久久久久久再现 | 91精品久久 | 99草免费视频 | 99re在线视频 | 欧美一区日韩一区 | 国产精品乱码一区二区三区 | 热re99久久精品国99热观看 | 精品一级| 午夜视频在线免费观看 |