基于單片機的萬年歷設計,Arduino

            抖帥宮 362 2023-10-09

            基于單片機的萬年歷設計,Arduino-第1張-觀點-玄機派

            來源頭條作者:海椰人

            轉自:@小五義

            常常聽到老媽在做飯時說“開鍋15分鐘后叫我一下”,為何不做個定時器,來提醒老媽呢?結合前面學習的知識,再加上1302時間模塊,我決定自己做一個。

            一、本次實驗所需器材1、Arduino UNO板

            2、1602LCD 屏幕

            3、DS1302實時時鐘模塊:DALLAS 公司推出的涓流充電時鐘芯片,內含有一個實時時鐘/日歷和31 字節靜態RAM ,通過簡單的串行接口與單片機進行通信。實時時鐘/日歷電路提供秒、分、時、日、周、月、年的信息,每月的天數和閏年的天數可自動調整。時鐘操作可通過 AM/PM 指示決定采用24 或12 小時格式。DS1302 與單片機之間能簡單地采用同步串行的方式進行通信,僅需用到三個口線:(1)RST 復位(2)I/O 數據線(3)SCLK串行時鐘。

            DS1302主要性能指標★ 實時時鐘具有能計算2100 年之前的秒、分、時、日、星期、月、年的能力,還有閏年調整的能力★ 31 8 位暫存數據存儲RAM★ 串行 I/O 口方式使得管腳數量最少★ 寬范圍工作電壓2.0 5.5V★ 工作電流 2.0V 時,小于300nA★ 讀/寫時鐘或RAM 數據時有兩種傳送方式單字節傳送和多字節傳送字符組方式★ 8 腳DIP 封裝或可選的8 腳SOIC 封裝根據表面裝配★ 簡單 3 線接口★ 與 TTL 兼容Vcc=5V★ 可選工業級溫度范圍-40 +85★ 雙電源管用于主電源和備份電源供應

            接線方法(以本實驗程序為例)VCC→+5V/3.3VGND→GNDCLK→5DAT→3RST→2

            4、按鈕開關一個:按鈕開關在連接時,需要接一個1KΩ電阻做為下拉電阻。具體關于按鈕的使用可參考(http://www.geek-workshop.com/forum.php?mod=viewthread&tid=74)

            5、蜂鳴器一個

            6、電阻:1KΩ電阻、10KΩ電阻

            二、硬件連接方法DS1602 的連接主要采用四位連接法。端口為12,11,9,8,7,6。DS1302 的連接方法上面已給出,另外按鈕開關、蜂鳴器等的連接具體見下圖。

            三、程序代碼具體代碼如下:

            // DS1302: RST pin ->Arduino Digital 2 // DAT pin ->Arduino Digital 3 // CLK pin ->Arduino Digital 5 #include #include LiquidCrystal lcd(12, 11, 9, 8, 7, 6); DS1302 rtc(2, 3, 5); int j=0;//記錄定時設定分鐘數 int time=0;//remine the last time int button=13;//13口控制按鈕 boolean onoff= LOW; //記錄按鈕狀態 boolean timefix=LOW;//記時器開關,LOW表示未定時,HIGH表示定時 unsigned long buttonHoldTime = 0;//按鈕按下持續時間 int buttonStateOld;//按鈕上一時刻狀態 int buttonState;//按鈕本時刻狀態 void ting()//控制蜂鳴器發聲 { int checkstate = digitalRead(button); for(int i=0;i<80;i++)//輸出一個頻率的聲音 { digitalWrite(10,HIGH);//發聲音 delay(1);//延時1ms digitalWrite(10,LOW);//不發聲音 delay(1);//延時ms } for(int i=0;i<100;i++)//輸出另一個頻率的聲音,這里的100與前面的80一樣,用來控制頻率,可以自己調節 { digitalWrite(10,HIGH); delay(2); digitalWrite(10,LOW); delay(2); } } void clockdate()//1602顯示時間 { lcd.clear(); //清屏 lcd.setCursor(0,0); lcd.print(rtc.getDateStr(FORMAT_LONG,FORMAT_BIGENDIAN, '-'));//從1302的庫文件可以看出,這里有下面幾種格式FORMAT_BIGENDIAN:2010-01-01;FORMAT_LITTLEENDIAN:01-01-2010 lcd.setCursor(11,0); lcd.print(rtc.getDOWStr()); lcd.setCursor(14,0); lcd.print(" "); lcd.setCursor(0, 1) ; lcd.print(rtc.getTimeStr()); } void setup() { lcd.begin(16, 2); //初始化LCD pinMode(10,OUTPUT);//設置數字IO腳模式,OUTPUT為輸出 pinMode(button,INPUT);//設置引腳為輸入模式 // 設置時鐘初始值 rtc.halt(false); rtc.writeProtect(false); rtc.setDOW(SATURDAY); // 設置星期 rtc.setTime(22, 56,00); //設置時間 rtc.setDate(9, 11, 2013); // 設置日期2013年11月9日 rtc.writeProtect(true); } void loop() { buttonState = digitalRead(button); delay(20); if (buttonState==HIGH && buttonStateOld==LOW)//按鈕狀態發生變化 { buttonHoldTime = millis();//用millis()時間函數來記時,該函數最長記錄時間為9小時22分,由于本程序最多記錄60分鐘,所以可以使用 buttonStateOld =buttonState; if (onoff==HIGH)//當進入定時設置狀態時 { if (j>59) { j=0; timefix=LOW; } else { j=j+1; timefix=HIGH; } lcd.setCursor(11,0); lcd.print(j); } } else if (buttonState ==HIGH && buttonStateOld==HIGH)//判斷按鈕是否持續按下 { if (millis()-buttonHoldTime>3000)//當按鈕持續按下3秒種進入定時狀態 { buttonStateOld=LOW; if (onoff==LOW)//進入 { j=0; timefix=LOW; lcd.clear(); //清屏 lcd.setCursor(0,0); lcd.print("Fixed Time:"); lcd.setCursor(11,0); lcd.print(j); lcd.setCursor(13,0); lcd.print("min"); onoff=HIGH; } else//退出 { clockdate(); // Serial.println(rtc.getTimeStr()); buttonHoldTime = millis(); onoff= LOW; } } else { buttonStateOld =buttonState; } } else { buttonStateOld =buttonState; } if (onoff==LOW) { clockdate(); } if (timefix==HIGH && j>0 && onoff==LOW) { unsigned long delaytime=j*60000;//把分鐘計算成秒 if ((millis()-buttonHoldTime)>=delaytime ) { do { buttonState = digitalRead(button); ting(); }while (buttonState==LOW);//當按下按鈕后,停止蜂鳴 j=0; } else { clockdate(); } } delay(1000); }這個代碼中,初始時間是設定好的,即2013年11月9日22點56分,因此本程序沒有加入時鐘時間設定功能,也可以再加上幾個按鈕,加上時間調節功能。另外在判斷按鈕按下時間這里,本程序的方法自我感覺有時笨,但也沒想出更好的方法,哪位有更好的方法,請給指導一下,謝謝。

            四、實現效果實現過程中,發現存在兩個問題,一個是按鈕不是很靈敏,另一個是最后再退出調時狀態時,長按3秒,時間會增加1分鐘。如原本設定12分鐘,退出時長按3秒會依然會變成13分鐘。

            上一篇:貓咪吃什么好,盤點貓咪能吃的幾種人食
            下一篇:眼角發紅疼是怎么回事,醫生憑典型癥狀判斷是此病
            相關文章

             發表評論

            暫時沒有評論,來搶沙發吧~

            返回頂部小火箭
            亚洲丁香色婷婷综合欲色啪| 亚洲AV无码专区在线观看成人 | 亚洲精品国产日韩| 亚洲三级电影网址| 亚洲伦理一区二区| 亚洲综合婷婷久久| 99久久亚洲综合精品成人网| 91亚洲精品视频| 91亚洲精品视频| 亚洲国产成AV人天堂无码| 亚洲三级在线免费观看| 亚洲六月丁香六月婷婷蜜芽| 亚洲乱码无限2021芒果| 国内精品久久久久影院亚洲| 亚洲日韩久久综合中文字幕| 亚洲av乱码一区二区三区按摩| 男人的天堂亚洲一区二区三区 | 亚洲熟妇无码一区二区三区 | 亚洲s色大片在线观看| 亚洲国产一区国产亚洲 | 亚洲福利电影在线观看| 亚洲二区在线视频| 亚洲日韩国产欧美一区二区三区 | 亚洲色图古典武侠| 亚洲一区二区三区久久| 亚洲午夜成人精品无码色欲| 久久亚洲精品无码网站| 亚洲国产主播精品极品网红| 亚洲午夜久久久久久久久电影网| 亚洲不卡中文字幕无码| 亚洲综合激情六月婷婷在线观看| 亚洲成A∨人片在线观看无码| 丁香婷婷亚洲六月综合色| 亚洲成a人片在线不卡一二三区 | 亚洲国产视频久久| 亚洲乱码中文字幕在线| 亚洲Av无码乱码在线znlu| 亚洲综合国产一区二区三区| 亚洲人成在线电影| 77777亚洲午夜久久多喷| 亚洲精品无码国产片|