久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
寫了個數碼管時鐘的單片機代碼,但是不知道怎么實現按鍵可調的鬧鐘的功能
[打印本頁]
作者:
xieyuxing
時間:
2023-12-18 21:00
標題:
寫了個數碼管時鐘的單片機代碼,但是不知道怎么實現按鍵可調的鬧鐘的功能
用的板是德飛萊的mini80e開發板,芯片是AT89S52,求助怎么實現鬧鐘功能
數碼管時鐘.zip
2023-12-18 21:00 上傳
點擊文件名下載附件
113.41 KB, 下載次數: 4
作者:
飛云居士
時間:
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單片機的示例代碼,其他型號的單片機也可以根據自己的實際情況進行相應的調整
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
91综合在线
|
亚洲一二区
|
国内精品久久久久久久久
|
中文字幕在线观看第一页
|
亚洲区视频
|
日本女人性生活视频
|
日韩一级在线
|
天天干天天弄
|
中文字幕免费av
|
亚洲影视在线
|
激情小说在线视频
|
久久久久九九九
|
久久免费小视频
|
国产精品国产三级国产aⅴ浪潮
|
日本国产视频
|
国产激情小视频
|
中文字幕第一
|
www.夜夜
|
一级淫片观看
|
成人a级片
|
少妇福利视频
|
日韩毛片网
|
日本中文字幕一区
|
久久久久精
|
狠狠躁日日躁夜夜躁2022麻豆
|
天天综合影院
|
成人精品在线
|
午夜xxx
|
日本人の夫妇交换
|
国产中文一区
|
精品一区二区三
|
欧美视频一区
|
www.色com
|
中文字幕偷拍
|
91久久精品日日躁夜夜躁欧美
|
婷婷在线视频
|
99一区二区
|
国产三级视频在线播放
|
福利视频网址
|
国产欧美另类
|
国产在线免费
|