M8廢鼠標(biāo)四位LED做的多功能電子表_第1頁
M8廢鼠標(biāo)四位LED做的多功能電子表_第2頁
M8廢鼠標(biāo)四位LED做的多功能電子表_第3頁
M8廢鼠標(biāo)四位LED做的多功能電子表_第4頁
M8廢鼠標(biāo)四位LED做的多功能電子表_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論