Adjustable/Resetable Digital Alarm Clock using 8051(89s52/89c52) in 7 segment display
Discussion in "Project Addition or Changes" started by adambose1990 Oct 12, 2011.
Wed Oct 12 2011, 10:45 pm
This is a whole new Digital alarm clock in 7-segment display....... Some user interface facility is given here.
This is the circuit diagram....
Components used:
4 7-segment displays
1 AT89s52/AT89c52
28 Resistors of 150 ohm
1 Capacitor 10uF
2 Capacitors 33pF
5 volt Buzzer
1 12MHz crystal
5 Red LEDs
4 DIP switches (push button)
Description:
2 switches 'HOUR' and 'MINUTE' have been used for increasing the hour and minute in display. The clock will show 12:00 AM while switching for the first time. Then adjust the time using those HOUR and MINUTE buttons. If you want to set alarm push SET ALARM button then adjust the hour and minute and then push SAVE ALARM button. When the alarm buzzer is ringing press SET ALARM twice to stop the buzzer. This will ensure your awaking. There are two LEDs for indication AM and PM respectively. Another 2 LEDs are used for second-clock-indication. The lower LED will blink for the first 30 secs and upper one will blink for the rest 30 secs. When you are have set an alarm timing, another LED will glow.
So this is pretty cool na? I think this is much user friendly.
Coding:
Coding is done in BASCOM 8051 V2.0.11.0. Its very easy, you can convert it to its equivalent C program after you understand the code.
or do something funny, just make a .hex file using you notepad and copy these following codes into it.
You also can download following rar file containing everything you need.
.bas //for Bascom
.hex
.jpg
.dsn //for proteus
This is the circuit diagram....
Components used:
4 7-segment displays
1 AT89s52/AT89c52
28 Resistors of 150 ohm
1 Capacitor 10uF
2 Capacitors 33pF
5 volt Buzzer
1 12MHz crystal
5 Red LEDs
4 DIP switches (push button)
Description:
2 switches 'HOUR' and 'MINUTE' have been used for increasing the hour and minute in display. The clock will show 12:00 AM while switching for the first time. Then adjust the time using those HOUR and MINUTE buttons. If you want to set alarm push SET ALARM button then adjust the hour and minute and then push SAVE ALARM button. When the alarm buzzer is ringing press SET ALARM twice to stop the buzzer. This will ensure your awaking. There are two LEDs for indication AM and PM respectively. Another 2 LEDs are used for second-clock-indication. The lower LED will blink for the first 30 secs and upper one will blink for the rest 30 secs. When you are have set an alarm timing, another LED will glow.
So this is pretty cool na? I think this is much user friendly.
Coding:
Coding is done in BASCOM 8051 V2.0.11.0. Its very easy, you can convert it to its equivalent C program after you understand the code.
'--------------------------------------------------------------------------- ' Description: ' ' Compiled by BASCOM 8051 Demo ' ' [url=http://www.mcselec.com]Home - MCS Electronics[/url] ' '=========================================================================== $regfile = "REG51.DAT" '--------------------------------------------------------------------------- ' 7 Segment Pattern Data Const Segpat0 = &B11000000 ' 0 ****A*** Const Segpat1 = &B11111001 ' 1 * * Const Segpat2 = &B10100100 ' 2 F B Const Segpat3 = &B10110000 ' 3 * * Const Segpat4 = &B10011001 ' 4 ****G*** Const Segpat5 = &B10010010 ' 5 * * Const Segpat6 = &B10000010 ' 6 E C Const Segpat7 = &B11011000 ' 7 * * Const Segpat8 = &B10000000 ' 8 ****D*** Const Segpat9 = &B10011000 ' 9 Const Segpblk = &B11111111 ' 10 BLANK '--------------------------------------------------------------------------- Hour10 Alias P1.0 Led_am Alias P1.1 Led_pm Alias P1.2 Piezo Alias P1.3 Sw_alarm Alias P1.4 Sw_exit Alias P1.5 Sw_hour Alias P1.6 Sw_min Alias P1.7 '--------------------------------------------------------------------------- Dim Icount As Word Dim Clock_cent As Byte Dim Clock_second As Byte Dim Clock_min As Byte Dim Clock_hour As Byte Dim Alarm_min As Byte Dim Alarm_hour As Byte Dim Data_min As Byte Dim Data_hour As Byte Dim Tempa As Byte Dim Tempb As Byte Dim Tempc As Byte Dim Beep As Bit Dim Dot_high As Bit Dim Dot_low As Bit Dim Dot_alarm As Bit '=========================================================================== On Timer0 Timebase ' Timer0 Interrupt '--------------------------------------------------------------------------- Config Timer0 = Timer , Gate = Internal , Mode = 2 ' Timer0 Auto Reload Timer Mode Load Timer0 , 200 ' Auto Reload Constant 200 uSec Start Timer0 ' Start Timer0 Enable Timer0 ' Enable Timer0 Enable Interrupts ' Enable All Interrupt '=========================================================================== Icount = 0 Clock_cent = 0 Clock_second = 0 Clock_min = 0 Clock_hour = 0 Alarm_min = 0 Alarm_hour = 0 Beep = 0 Dot_alarm = 1 '--------------------------------------------------------------------------- Main_clock: ' If Clock_cent > 99 Then Clock_cent = 0 Incr Clock_second End If ' If Clock_second > 59 Then Clock_second = 0 Incr Clock_min End If ' If Clock_min > 59 Then Clock_min = 0 Incr Clock_hour End If ' If Clock_hour > 23 Then Clock_hour = 0 End If ' Data_min = Clock_min : Data_hour = Clock_hour ' Gosub Dot_proc Gosub Clock_disp ' If Sw_alarm = 0 Then Gosub Alarm_proc End If ' If Sw_min = 0 Then Clock_second = 0 Incr Clock_min If Clock_min > 59 Then Clock_min = 0 End If Waitms 100 End If ' If Sw_hour = 0 Then Incr Clock_hour If Clock_hour > 23 Then Clock_hour = 0 End If Waitms 100 End If ' If Dot_alarm = 0 Then If Clock_hour = Alarm_hour Then If Clock_min = Alarm_min Then Set Beep Else Reset Beep End If Else Reset Beep End If Else Reset Beep End If ' Goto Main_clock '=========================================================================== Clock_disp: ' Tempa = Data_min Mod 10 : Gosub Patconv If Dot_alarm = 0 Then Tempb = Tempb And &H7F End If P3 = Tempb ' Tempa = Data_min / 10 : Gosub Patconv If Dot_high = 0 Then Tempb = Tempb And &H7F End If P2 = Tempb ' If Data_hour < 12 Then Reset Led_am : Set Led_pm Tempc = Data_hour Else Reset Led_pm : Set Led_am Tempc = Data_hour - 12 End If ' If Tempc = 0 Then Tempc = 12 End If ' Tempa = Tempc Mod 10 : Gosub Patconv If Dot_low = 0 Then Tempb = Tempb And &H7F End If P0 = Tempb ' Tempa = Tempc / 10 ' If Tempa = 1 Then Reset Hour10 Else Set Hour10 End If ' Return ' '=========================================================================== Dot_proc: ' If Clock_second < 30 Then Reset Dot_low If Clock_cent < 50 Then Reset Dot_high Else Set Dot_high End If Else Reset Dot_high If Clock_cent < 50 Then Reset Dot_low Else Set Dot_low End If End If ' Return ' '=========================================================================== Alarm_proc: ' Set Dot_high : Set Dot_low Data_min = Alarm_min : Data_hour = Alarm_hour Gosub Clock_disp Waitms 100 ' Alarm_loop: Data_min = Alarm_min : Data_hour = Alarm_hour Gosub Clock_disp If Sw_min = 0 Then Incr Alarm_min If Alarm_min > 59 Then Alarm_min = 0 End If Waitms 100 End If ' If Sw_hour = 0 Then Incr Alarm_hour If Alarm_hour > 23 Then Alarm_hour = 0 End If Waitms 100 End If ' If Sw_alarm = 0 Then Set Dot_alarm Goto Alarm_ret End If ' If Sw_exit = 0 Then Reset Dot_alarm Goto Alarm_ret End If ' Goto Alarm_loop ' Alarm_ret: ' Waitms 100 ' Return '=========================================================================== Patconv: ' Tempa = Tempa And &H0F Select Case Tempa Case 0 : Tempb = Segpat0 Case 1 : Tempb = Segpat1 Case 2 : Tempb = Segpat2 Case 3 : Tempb = Segpat3 Case 4 : Tempb = Segpat4 Case 5 : Tempb = Segpat5 Case 6 : Tempb = Segpat6 Case 7 : Tempb = Segpat7 Case 8 : Tempb = Segpat8 Case 9 : Tempb = Segpat9 Case Else End Select ' Return '=========================================================================== Timebase: ' Incr Icount ' If Icount > 49 Then ' 49 ' Icount = 0 Incr Clock_cent End If ' If Beep = 1 Then If Piezo = 1 Then Reset Piezo Else Set Piezo End If End If ' If Beep = 0 Then Set Piezo End If ' Return '--------------------------------------------------------------------------- ' '============================ END OF FILE ================================== ' '
or do something funny, just make a .hex file using you notepad and copy these following codes into it.
:1000000002006632000000000000000203700000E1 :10001000000000320000000000000032000000007C :10002000000000320000000000000000000012008C :100030003A60044002E422740122C3EDB50706ECE5 :10004000B50602E422740122F874AD040000000039 :100050000000000070F500D8F022E62401F6FA084E :10006000E63400F64A22787FE4F6D8FD75813075D3 :100070002000C28CE58954F02402F589758A387510 :100080008C38D28CD2A9D2AF75220075230075248A :100090000075250075260075270075280075290054 :1000A000C205D208E524B46302800250030200B501 :1000B0007524000525E525B43B02800250030200AB :1000C000C67525000526E526B43B028002500302D2 :1000D00000D77526000527E527B4170280025003D4 :1000E0000200E675270085262A85272B511A316BD9 :1000F000A294920450030200FB5154A29792045020 :100100000302011C7525000526E526B43B0280028A :10011000500302011875260074641148A2969204D7 :10012000500302013A0527E527B417028002500365 :1001300002013675270074641148A2089204500326 :10014000020166E527B529028003020161E526B5B3 :100150002802800302015CD20502015EC205020191 :1001600063C205020168C2050200A475F00AE52A0F :1001700084C0F0782CD0E0F651CCA2089204500351 :10018000020186532D7F852DB075F00AE52A84C0C3 :10019000E0782CD0E0F651CCA20692045003020184 :1001A000A4532D7F852DA0E52BB40C0280024003C3 :1001B0000201BDC291D292852B2E0201D0C292D2F1 :1001C0009175F00CE52BC395F0C0E0782ED0E0F6E9 :1001D000E52EB4000280030201DD752E0C75F00AD5 :1001E000E52E84C0F0782CD0E0F651CCA207920422 :1001F00050030201F8532D7F852D8075F00AE52EFE :1002000084C0E0782CD0E0F6E52CB4010280030233 :100210000217C290020219D29022E525B41E028074 :1002200002400302023EC207E524B43202800240CB :1002300003020239C20602023BD206020253C20680 :10024000E524B4320280024003020251C2070202D6 :1002500053D20722D206D20785282A85292B316B53 :100260007464114885282A85292B316BA297920442 :10027000500302028A0528E528B43B02800250039D :1002800002028675280074641148A29692045003F5 :100290000202A80529E529B41702800250030202D0 :1002A000A475290074641148A294920450030202B8 :1002B000B6D2080202C7A295920450030202C4C239 :1002C000080202C70202647464114822532C0FE52D :1002D0002CB4000280030202DF752DC002036FE51B :1002E0002CB4010280030202EF752DF902036FE5C1 :1002F0002CB4020280030202FF752DA402036FE5F5 :100300002CB40302800302030F752DB002036FE5C6 :100310002CB40402800302031F752D9902036FE5BC :100320002CB40502800302032F752D9202036FE5A2 :100330002CB40602800302033F752D8202036FE591 :100340002CB40702800302034F752DD802036FE51A :100350002CB40802800302035F752D8002036FE551 :100360002CB40902800302036F752D9802036F22DB :10037000C0D0C2D3C0E0C0F0C083C082C000C00102 :10038000C002C003C004C005C006C007C008C00941 :10039000C00AC00BC00CC00DC00EC00FC010C011F1 :1003A0007822115AAC22AD237E317F00112E6003DA :1003B0000203BB7522007523000524A205920440A8 :1003C000030203D4A293920440030203D2C2930215 :1003D00003D4D293A205920450030203DFD293D038 :1003E00011D010D00FD00ED00DD00CD00BD00AD021 :1003F00009D008D007D006D005D004D003D002D051 :1004000001D000D082D083D0F0D0E0D0D032000034 :00000001FF
You also can download following rar file containing everything you need.
.bas //for Bascom
.hex
.jpg
.dsn //for proteus
Mon Apr 07 2014, 08:47 pm
Dear awesome project but i have some problem. Please send me the details for 7 segment pin configuration, you have not mentioned it on the circuit diagram. My email id [email protected].
Tue Apr 08 2014, 03:03 pm
@jit132, 7-Segment are common Anode. there is no more specification needed.
Tue Apr 08 2014, 11:07 pm
adambose1990 has not visited for a while so don't expect an answer from him.
Looking at the Proteus simulation it looks like the connections to the displays should be labelled
a,b,c,d,e,f,g from the top down (a at the top)
Looking at the Proteus simulation it looks like the connections to the displays should be labelled
a,b,c,d,e,f,g from the top down (a at the top)
Powered by e107 Forum System