版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、M8廢鼠標(biāo)四位LED做的多功能電子表(說明和源程序)(附上原理圖)做飯總是忘了時間,結(jié)果經(jīng)常吃糊飯,就用M8、四位LED數(shù)碼管和廢鼠標(biāo)做了個電子表。 1.BASCOM編程,有電子表、鬧鐘、倒計時鬧響功能(煮飯時用這個功能,哈哈) 2.四位LED顯示時間,蜂鳴器鬧響 3.廢鼠標(biāo)做外殼,保留鼠標(biāo)三個鍵做模式轉(zhuǎn)換、時間、鬧鐘調(diào)整 4.由于接線少,沒有做PCB板,用導(dǎo)線直接連線,用熱溶膠固定、絕緣。圖片附件: 圖片附件: 圖片附件: '(現(xiàn)在用的這個機(jī)器沒裝protel,沒時間畫電路圖了,作個簡單硬件說明:1、M8(1片),電阻8只(可選1-3k),四位
2、7段led數(shù)碼管1只(共陽),廢鼠標(biāo)1個,28IC座1個,電池1塊,蜂鳴器1只 , 導(dǎo)線若干2、portd口0-7順序接led的A-G和DP,中間串8只電阻,led四個陽腳分別接portc口的1-43、portc.0接speaker;portb的0-2分別接鼠標(biāo)中、左、右的微動開關(guān),開關(guān)共地4、我沒有做pcb板,用熱溶膠絕緣固定,防止短路。幾點說明:1、使用內(nèi)振,穩(wěn)定性難以保證,若要高精度,建議用外振。2、TCNT1的值可根據(jù)試驗誤差重新計算,此程序的是理論值。3、LED數(shù)碼管耗電較大,可選用lcd數(shù)碼管4、本來只想做個倒計時表放在廚房里,補來補去補成這個程序5、程序由ba
3、scom-avr1.11.7.7編譯通過,編譯大小5.14K6、剛學(xué)單片機(jī)很短時間,錯誤和遺漏請批評指點,謝謝!功能說明:1、電子表、鬧鐘、倒計時鬧響(以分鐘為單位)2、中鍵選擇模式,切換電子表和倒計時3、倒計時模式時,左鍵增加時間,右鍵減少時間,鬧響時按鍵停止,重新倒計時,按中間鍵切換到電子表模式4、電子表模式時,按先左后右鍵進(jìn)入調(diào)整鬧鐘時間,小時閃爍,左加右減,按中間鍵切換到調(diào)整分鐘,分鐘閃爍,左加右減,再按中間鍵退出返回電子表模式5、電子表模式時,按先右后左鍵進(jìn)入調(diào)整時間狀態(tài),方法同上。')$regfile = "m8def.dat"$cr
4、ystal = 8000000Config Portb = InputConfig Portc = OutputConfig Portd = OutputConfig Timer1 = Timer , Prescale = 64
5、 '8-1us 64-8us 256-32us 1024-128usDeclare Sub Countdown()Declare Sub Disptime(byval Hh As Byte , Byval Mm As Byte)Declare Sub Settime()Declare Sub P
6、laymusic()Dim Leddig(10) As ByteDim Bsecond As Byte , Timecounter As BitDim Set_minutes As ByteDim S As SingleDim I As Integer , P As Integer , N As IntegerDim
7、K As Bit , Dotflash As Bit , Countmark As Bit , Enalarm As BitDim Timeflash As ByteDim Myhour As Byte , Myminute As ByteDim Alarmhour As Byte , Alarmminute
8、 As ByteDim H As Byte , M As BytePortb = &HFFPortd = &HFFPortc = 0'Tcnt1h = &H0B
9、; '賦定時器初始值 '3036'Tcnt1l = &HDCCounter1 = &H0BDCOsccal = &HB8
10、160; '各芯片有不同校驗值Readeeprom Se
11、t_minutes , 0 '讀已存的倒計時設(shè)定分鐘Restore Leddata &
12、#160; '讀LED 顯示位碼(0-9)For P = 1 To 10
13、60; Read Leddig(p)NextMyhour = 11Myminute = 11Timeflash = 2On Timer1 Tim1_isrEnable Timer1Enable InterruptsDo '=顯示時間= 此部分不要用DIDPTIME子程序,容易出現(xiàn)閃爍感 P = Myminute Mod 10
14、160; P = P + 1 Portc = &B00010 Portd = Leddig(p) &
15、#160; '顯示分鐘個位 Waitms 5 S = Myminute / 10 P = Fix(s) P = P + 1 Portc = &
16、B00100 Portd = Leddig(p) '顯示分鐘
17、十位 Waitms 5 P = Myhour Mod 10 P = P + 1 Portc = &B01000 Portd = Leddig(p) &
18、#160; '顯示小時個位 If Dotflash = 1 Then
19、0; '閃爍小時和分鐘中間兩個分位點 Set Portd.7
20、; '1秒鐘亮滅1次 Else Reset
21、160;Portd.7 End If Waitms 5 S = Myhour / 10 P = Fix(s) P = P + 1 Portc = &B10000 Portd = Leddig(p
22、) '顯示小時十位 Waitms 5
23、;'= 切換倒計時 = If Pinb.0 = 0 Then
24、60; '轉(zhuǎn)換鍵(鼠標(biāo)中間鍵)按下切換倒計時 Do Loop Until Pinb.0 = 1 Call Countdown End If '=鬧時設(shè)置= If Pinb.1
25、60;= 0 Then '先左后右兩鍵同時按下
26、 Do Call Disptime(myhour , Myminute ) Loop Until Pinb.1 = 1 Or Pinb.2 = 0 If Pinb.2 = 0 Then
27、 Do Loop Until Pinb.1 = 1 And Pinb.2 = 1 '等待都抬起
28、160; Readeeprom Alarmhour , 1 '讀存儲的設(shè)定鬧時
29、0; Readeeprom Alarmminute , 2 H = Alarmhour : M = Alarmminute Call Settime()
30、60; 'alarmhour , Alarmminute ) Alarmhour = H : Alarmm
31、inute = M Writeeeprom Alarmhour , 1 '存儲鬧時
32、0; Writeeeprom Alarmminute , 2 End If End If '=時間設(shè)置= If Pinb.2 = 0 Then Do
33、60; Call Disptime(myhour , Myminute ) Loop Until Pinb.1 = 0 Or Pinb.2 = 1 If Pinb.1 = 0 Then
34、; '先右后左兩鍵同時按下 Do
35、 Loop Until Pinb.1 = 1 And Pinb.2 = 1 '等待都抬起 H = Myhour : M = Myminute
36、60; Call Settime() 'myhour
37、60;, Myminute ) Bsecond = 0
38、160; '重置時間 Myhour = H : Myminute = M End If End If '=鬧鐘響= If Alarmhour
39、60;= Myhour And Alarmminute = Myminute Then If Alarmhour <> 0 And Alarmminute <> 0 Then If Enalarm = 0 Then
40、60; '若按鍵退出,防止在本分鐘內(nèi)重復(fù)播放 Call Playmus
41、ic Enalarm = 1 End If End If End IfLoopEndSub Disptime(h As Byte , M
42、As Byte) If Timeflash = 0 Or Timeflash = 2 Then 'TIMEFLASH是時間閃爍設(shè)定特征值 P = Mm&
43、#160;Mod 10 P = P + 1 Portc = &B00010 Portd = Leddig(p) &
44、#160; '顯示分鐘個位 Waitms 5 S = Mm / 10 P
45、;= Fix(s) P = P + 1 Portc = &B00100 Portd = Leddig(p)
46、60; '顯示分鐘十位 Waitms 5 End If If Timeflash = 1 Or Timeflash =
47、60;2 Then P = Hh Mod 10 P = P + 1 Portc = &B01000 Portd = Leddig(p)
48、 '顯示小時個位 If Dotflash = 1 Then
49、60; '閃爍 兩個點 Set Portd.7 &
50、#160; Else Reset Portd.7 End If Waitms 5 S = Hh /
51、0;10 P = Fix(s) P = P + 1 Portc = &B10000 Portd = Leddig(p)
52、; '顯示小時十位 Waitms 5 End IfEnd SubSub Settime()
53、 Do If Pinb.1 = 0 Then
54、160;'設(shè)置小時 Waitms 200 H = H + 1 If H > 23 Then
55、160; '左鍵加,右鍵減。 H = 0
56、0; End If End If If Pinb.2 = 0 Then Waitms 200 If
57、;H = 0 Then H = 24 End If H = H - 1
58、160;End If If Dotflash = 1 Then '
59、設(shè)定小時閃爍 Timeflash = 0 Else Timeflash = 2 End If
60、; Call Disptime(h , M) If Pinb.0 = 0 Then
61、0; '按中間鍵轉(zhuǎn)換為設(shè)置分鐘 Do Loop Until Pinb.0 = 1 Waitms 200
62、160; Do If Pinb.1 = 0 Then
63、0; '左鍵加,右鍵減。 Waitms 200 M = M + 1 &
64、#160; If M > 59 Then M = 0
65、60; End If End If If Pinb.2 = 0 Then
66、60; Waitms 200 If M = 0 Then M = 60
67、; End If M = M - 1 End If
68、160; If Dotflash = 1 Then Timeflash = 1
69、; Else Timeflash = 2 End If Cal
70、l Disptime(h , M) If Pinb.0 = 0 Then
71、160; ' 退出 Do Loop Until Pinb.0 = 1
72、 Waitms 200 Timeflash = 2 Exit Sub
73、60; End If Loop End If LoopEnd SubSub Countdown() &
74、#160; '倒計時子程序
75、160; '以分為單位 Readeeprom
76、 Set_minutes , 0 '本程序設(shè)置最大值為99分鐘
77、; '
78、可根據(jù)自己喜好自行修改 Portc = 0 Portd = 1 Countmark = 1 Do Portc.2 = 0 Portc.1 = 1 P
79、60;= Set_minutes Mod 10 '取余 顯示個位 P =
80、60;P + 1 Portd = Leddig(p) Waitms 10 Portc.1 = 0 S = Set_minutes / 10
81、 '取整 顯示十位 S = Fix(s) P = Sgn
82、(s) Portc.2 = P P = S + 1 Portd = Leddig(p) Waitms 10 If Pinb.1 =
83、;0 Then Waitms 200 Set_minutes = Set_minutes + 1 If Set_minutes > 99 Then
84、60; Set_minutes = 1 End If Writeeeprom Set_minutes , 0 End If
85、0; If Pinb.2 = 0 Then Waitms 200 Set_minutes = Set_minutes - 1 If
86、160;Set_minutes = 0 Then Set_minutes = 99 End If Writeeeprom Set_minutes ,
87、60;0 End If If Pinb.0 = 0 Then &
88、#160; '按中間鍵退出切換到時間模式 Do Loop Until Pinb.0 = 1 Countmark = 0 &
89、#160; Exit Sub End If If Set_minutes = 0 Then K = 1
90、60;Call Playmusic '到時后音樂鬧響
91、160; Readeeprom Set_minutes , 0 Portc = 0 K = 0 End If LoopEnd SubSub Playmusic()
92、 '鬧向音樂子程序 For
93、60;N = 1 To 100 Restore Musicdata Do Read I : I = I * 3
94、160; '調(diào)整兩參數(shù)使音樂聽起來舒服些 Read P : S = P * 0.32 : P = Fix(s)
95、160; If I = 0 And P = 0 Then Exit Do End If
96、 If Pinb.1 = 0 Or Pinb.2 = 0 Then '按左或右鍵退出 Do
97、0; Loop Until Pinb.1 = 1 And Pinb.2 = 1 Waitms 200 Exi
98、t For End If Sound Portc.0 , I , P Waitms 100 If
99、 Countmark = 0 Then Call Disptime(myhour , Myminute) End If Loop W
100、ait 2 Next NEnd SubTim1_isr:
101、 '中斷程序 0.5秒' Tcnt1h = &H0B
102、60; '3036' Tcnt1l = &HDC Counter1 = &H0BDC Dotflash = Not Dotflash Timecounter = N
103、ot Timecounter If Timecounter = 0 Then Incr Bsecond If Bsecond = 60 Then If Countmark = 1 Then
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年08月廣東2024屆廣發(fā)銀行信用卡中心管理培訓(xùn)生(職能類)秋季校園招考筆試歷年參考題庫附帶答案詳解
- 2025年中天建設(shè)集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025年河南省商丘市煙草公司招聘筆試參考題庫含答案解析
- 2025年云南出版集團(tuán)所屬曲靖新華書店有限責(zé)任公司招聘筆試參考題庫附帶答案詳解
- 2025年福建福州市鼓樓區(qū)陽光朵朵家庭服務(wù)有限公司招聘筆試參考題庫附帶答案詳解
- 2025年山東聊城東阿縣綜合行政執(zhí)法局所屬國有企業(yè)招聘筆試參考題庫附帶答案詳解
- 自愿搬遷協(xié)議書
- 年度HF-FB防彈玻璃市場分析及競爭策略分析報告
- 2025年道路貨運從業(yè)資格考
- 二零二五年度建筑企業(yè)工程款結(jié)算借款合同3篇
- JJG 596-2012電子式交流電能表
- GB/T 5237.1-2017鋁合金建筑型材第1部分:基材
- GB/T 2317.1-2000電力金具機(jī)械試驗方法
- 供應(yīng)商ROHs審核表
- JESD22~B117A中文版完整詳細(xì)
- 五大發(fā)電公司及所屬電廠列表及分部精編版
- 小學(xué)數(shù)學(xué)聽課記錄 精選(范文20篇)
- 住宅工程公共區(qū)域精裝修施工組織設(shè)計(217頁)
- 光伏電站設(shè)備監(jiān)造與性能驗收
- 10kV架空線路施工方案
- 2018江蘇蘇州中考英語真題解析
評論
0/150
提交評論