




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省宁波市鄞州区2023-2024学年八年级下学期英语期中考试(含答案)
- 创业计划书:猫咪咖啡店
- 视觉传播设计与制作所需试题及答案
- 考试形式下的2025年小学一年级语文试题及答案
- 2024年食品质检员考试的影响力与说服技巧试题及答案
- 识别不良宠物食品品牌考题及答案
- 2024年计算机基础学习资源评估与使用及试题和答案
- 2024年汽车维修工考试应试技巧试题及答案
- 2025年小学语文新教材试题及答案
- 选择美容师考试资料的误区及试题及答案
- 2025届高考作文备考训练:局中局外人生如棋
- 山东省威海市乳山市银滩高级中学2024-2025学年高一下学期3月月考思想政治试题(含答案)
- 中华武术-太极知到课后答案智慧树章节测试答案2025年春武汉城市职业学院
- 2023-2024学年广东省深圳市龙岗区八年级下学期期中语文试题及答案
- 陕西省部分学校2024-2025学年高三下学期联考物理试卷(原卷版+解析版)
- 2025年开封大学单招职业适应性测试题库附答案
- 幼儿园获奖公开课:中班数学活动《认识8》课件
- 钩机清理合同范文5篇
- 医务人员手卫生培训
- 第6课 隋唐时期的中外文化交流 【公开课一等奖创新教学设计】-【教学评一体化】大单元整体教学
- 幼教培训课件:《幼儿园思维共享的组织与实施》
评论
0/150
提交评论