I've been looking for a project that would be suitable for young Boy Scouts, and have decided that one of these DIY clock kits would be something that even the youngest could put together.
Most of the kits appear to come with an AT89C2051 (they all seem to come with the same pcb as well), so I've also searched out code that the older scouts could program additional AT89C2051s with. I'll reach out to the local university to see if they've got a programmer that we can use, but the boys won't have access to one after we're done making these. I think having a couple extra chips to swap around with different programs would be cool to them.
The clock comes with a standard clock program, but I'm still looking for a simple countdown timer and a simple stopwatch. By "simple" I mean something that I can show the scouts, and explain commented snippets of the code.
The code that I've found has been on forums where the members haven't been active for years, so I can't ask them followup questions.
If anyone could help me out with simplified code for two projects, I would greatly appreciate it. I can reassign pins in the code if the boards end up being pinned slightly different than what is pictured (you never know with these things).
Countdown Timer:
- button1 == cancel timer / cancel buzzer
- button2 == add time to countdown
- button1 held >2sec == enter/exit setup mode.
- button1 in setup mode == toggle buzzer duration between: 60sec / 300sec / 600sec / 9999sec
- button2 in setup mode == toggle button2 "value" between: 30sec / 60sec / 180sec / 240sec / 300sec
Timer counts down in seconds from 9999 - 0 (in base10)
Digits blink at 500ms intervals while <=10sec
Button2 push adds value to current countdown at any time
Buzzer sounds at 500ms interval.
Stopwatch:
- button1 == clear
- button2 == start/pause
- button1 + button2 == switches between hh:mm / mm:ss / ss:ms ("Hr: " / " :S " / " S: ")
Time counts up (in base 60)
Time stops at 99:59 (i.e. 99hr:59min / 99min:59sec / 99sec:59ms)
I think there are some good learning opportunities between the two programs. Showing them the code and having them customize values in their code (like the available "values" for button1&2) will help them feel ownership in the project.
TheCustomGeek shared some code for one of his projects, and is what I used as the base for my attempts to make the Countdown Timer and Stopwatch described above. Here's a link Multiplexing for a 7 year old | The Custom Geek
I've attached the code, too, mainly so that the multiplexing can be similar in both projects (easier to explain to the scouts). Using a better method is fine too. I've removed this, and attached the assembly code that I had initially started with -prior to finding TheCustomGeek's project. We do have access to a C compiler and linker for the 8051s (AT89C2051 included), though.
I'm still muddling through this on my own, but I'm hoping that one (or more) of you would be able to put together some code much faster/better/cleaner than I.