M8废鼠标四位LED做的多功能电子表_第1页
M8废鼠标四位LED做的多功能电子表_第2页
M8废鼠标四位LED做的多功能电子表_第3页
M8废鼠标四位LED做的多功能电子表_第4页
M8废鼠标四位LED做的多功能电子表_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、M8废鼠标四位LED做的多功能电子表(说明和源程序)(附上原理图)做饭总是忘了时间,结果经常吃糊饭,就用M8、四位LED数码管和废鼠标做了个电子表。 1.BASCOM编程,有电子表、闹钟、倒计时闹响功能(煮饭时用这个功能,哈哈) 2.四位LED显示时间,蜂鸣器闹响 3.废鼠标做外壳,保留鼠标三个键做模式转换、时间、闹钟调整 4.由于接线少,没有做PCB板,用导线直接连线,用热溶胶固定、绝缘。图片附件: 图片附件: 图片附件: '(现在用的这个机器没装protel,没时间画电路图了,作个简单硬件说明:1、M8(1片),电阻8只(可选1-3k),四位

2、7段led数码管1只(共阳),废鼠标1个,28IC座1个,电池1块,蜂鸣器1只 , 导线若干2、portd口0-7顺序接led的A-G和DP,中间串8只电阻,led四个阳脚分别接portc口的1-43、portc.0接speaker;portb的0-2分别接鼠标中、左、右的微动开关,开关共地4、我没有做pcb板,用热溶胶绝缘固定,防止短路。几点说明:1、使用内振,稳定性难以保证,若要高精度,建议用外振。2、TCNT1的值可根据试验误差重新计算,此程序的是理论值。3、LED数码管耗电较大,可选用lcd数码管4、本来只想做个倒计时表放在厨房里,补来补去补成这个程序5、程序由ba

3、scom-avr1.11.7.7编译通过,编译大小5.14K6、刚学单片机很短时间,错误和遗漏请批评指点,谢谢!功能说明:1、电子表、闹钟、倒计时闹响(以分钟为单位)2、中键选择模式,切换电子表和倒计时3、倒计时模式时,左键增加时间,右键减少时间,闹响时按键停止,重新倒计时,按中间键切换到电子表模式4、电子表模式时,按先左后右键进入调整闹钟时间,小时闪烁,左加右减,按中间键切换到调整分钟,分钟闪烁,左加右减,再按中间键退出返回电子表模式5、电子表模式时,按先右后左键进入调整时间状态,方法同上。')$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                                  '读已存的倒计时设定分钟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子程序,容易出现闪烁感   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;  '转换键(鼠标中间键)按下切换倒计时      Do      Loop Until Pinb.0 = 1      Call Countdown   End If   '=闹时设置=   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                           '读存储的设定闹时       

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   '=时间设置=   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;                               '若按键退出,防止在本分钟内重复播放            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是时间闪烁设定特征值      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;'设置小时         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、设定小时闪烁           Timeflash = 0         Else           Timeflash = 2      End If  

60、;    Call Disptime(h , M)      If Pinb.0 = 0 Then                           

61、0;        '按中间键转换为设置分钟         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                               '本程序设置最大值为99分钟           

77、;                                                 '

78、可根据自己喜好自行修改   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;                      '调整两参数使音乐听起来舒服些         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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论