0% found this document useful (0 votes)
2K views16 pages

Seven Segment Based Alarm Clock Using 8051 Microcontroller

This circuit uses an 8051 microcontroller to create a seven segment alarm clock. The clock allows the user to set the time and alarm using buttons. When the alarm time is reached, a buzzer will sound to alert the user. The microcontroller controls the seven segments to display the time and receives input from the buttons to adjust the display.

Uploaded by

Biswajit Sarkar
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
Download as doc, pdf, or txt
0% found this document useful (0 votes)
2K views16 pages

Seven Segment Based Alarm Clock Using 8051 Microcontroller

This circuit uses an 8051 microcontroller to create a seven segment alarm clock. The clock allows the user to set the time and alarm using buttons. When the alarm time is reached, a buzzer will sound to alert the user. The microcontroller controls the seven segments to display the time and receives input from the buttons to adjust the display.

Uploaded by

Biswajit Sarkar
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1/ 16

Seven segment based alarm clock using 8051 microcontroller (AT89C51)

MC010

Summary Description Circuit Diagram Video Code Components Free Circuit Design & Simulation Tool by TI

An alarm clock is a clock that indicates a pre-set time by producing sound at that time. This unctionality o digital clock is used to a!aken people or remind them o something. This circuit is an e"tension to the digital clock !ith time setting option. #ere an e"tra s!itch is pro$ided to set the alarm. %hile the alarm is set& the clock time does not stop and runs in the background. The pro'ect is build around the ()*+ microcontroller ,AT(-C*+.

To pro$ide $arious options in the digital clock& ollo!ing s!itches are used/

S!itch + ,S+. / S!itch 1 ,S1. / S!itch 2 ,S2. / S!itch 3 ,S3. / S!itch * ,S*. /

0eset Select Increment Start Alarm

,to initiate the time set option. ,to select the segment !here $alue is to be changed. ,to increase the $alue at selected segment. ,to start the clock !ith the set time options. ,to initiate the alarm set option.

The option to set alarm is pro$ided by pro$iding an e"tra s!itch S *& !ith the microcontoller At(-C*+& !hich is made acti$e lo!. %hene$er S * is pressed& the time display goes o and only +st segment is acti$ated. 4ut the clock time still runs in the background. In this mode& a segment can be selected in cyclic order by pressing S 1. A ter selecting the desired segment& its $alue can be changed by using S2. 5nce the digits and hence the alarm is set& S 3 is pressed to start the

clock again. As soon as the set alarm time is reached& a bu66er gets signal rom the microcontroller thus producing sound.

The se$en segments are inter aced to port 7 1 o the microcontroller AT(-C*+ through its data pins ,a - h.. The enable pins are connected to pins +-3 o port 7 + ,7+8) 9 7+82.. The s!itches S+S* and bu66er are connected as ollo!ing/ S+ S1 S2 / / / 7+83 7+8: 7+8; S3 S* / / 7282 7+8* 728;

4u66er /

The bu66er is connected to the output pin o microcontroller at the negati$e end and to V cc at the positi$e end.

// Program to make a digital clock with time and alarm setting features

#include<reg51.h> sbit dig_ctrl_4=P1 !" segments sbit dig_ctrl_&=P1 1" sbit dig_ctrl_'=P1 '" sbit dig_ctrl_1=P1 &" sbit bu((er=P& )" sbit resetalarm=P1 5" sbit resetclock=P1 4" sbit start=P& &" setting sbit incr=P1 )" time setting. sbit set=P1 -" //*eset alarm $in to reset the alarm. //*eset clock $in to reset the clock. //#eclare the control $ins for the se%en

// +tart $in for starting the clock after time // ,ncrement $in to increase the digits during // +et $in to set the time.

int sel_seg_to_incr=!" int ret_seg_to_incre=!" int recnt_incr_seg" int begin" unsigned char dig_dis$=!" int min'=!" int min1=!" int sec'=!" int sec1=!" int minalarm'=!" int minalarm1=!" int secalarm'=!" int secalarm1=!" int alarmmin'=!" int alarmmin1=!" int alarmsec'=!" int alarmsec1=!" int kee$min'=!" int kee$min1=!" int kee$sec'=!" int kee$sec1=!" int loo$=!" int mode" char dig_%al.1!/=0!14!2!1342!1'42!1&!2!1142!11'2!1!'2!1352!1!!2!11!6" // 7e1 %alues corres$onding to digits ! to 4

%oid dela89int time:

//3unction to $ro%ide time dela8.

0 int i2;" for9i=!"i<time"i<<: for9;=!";<1')5";<<:" 6

int setfn9: time. 0 while9set==!: 0

// 3unction to select miniute and seconds digit set

switch9recnt_incr_seg: 0

case 1= if9set==!: 0 dig_ctrl_4=1" dig_ctrl_&=!" dig_ctrl_'=!" dig_ctrl_1=!" recnt_incr_seg=1" ret_seg_to_incre=1" P'=dig_%al.minalarm'/" dela891!!:" 6 //+elect the min' digit

case '= if9set==!: 0 dig_ctrl_4=!" dig_ctrl_&=1" dig_ctrl_'=!" dig_ctrl_1=!" recnt_incr_seg='" ret_seg_to_incre='" P'=dig_%al.minalarm1/" dela891!!:" 6 //+elect the min1 digit

case &= if9set==!: 0 dig_ctrl_4=!" dig_ctrl_&=!" dig_ctrl_'=1" dig_ctrl_1=!" recnt_incr_seg=&" ret_seg_to_incre=&" P'=dig_%al.secalarm'/" dela891!!:" 6 //+elect the sec ' digit

case 4=

if9set==!: 0

//+elect the sec1 digit

recnt_incr_seg=1" dig_ctrl_4=!" dig_ctrl_&=!" dig_ctrl_'=!" dig_ctrl_1=1" ret_seg_to_incre=4" P'=dig_%al.secalarm1/" dela891!!:" recnt_incr_seg=1" 6 6 6 return9ret_seg_to_incre:" 6

%oid increase9int a: digit 0 while9incr==!: 0 switch9a: 0

//3unction to set the minutes or seconds

case 1=

// +et the min' digit.

P'=dig_%al.minalarm'/"

dela891!!:" minalarm'<<" if9minalarm'==-: minalarm'=!" P'=dig_%al.minalarm'/" dela89'!:" break"

case '=

//+et the min1 digit.

P'=dig_%al.minalarm1/" dela891!!:" minalarm1<<" if9minalarm1==1!: minalarm1=!" P'=dig_%al.minalarm1/" dela89'!:" break"

case &=

// +et the sec' digit.

P'=dig_%al.secalarm'/" dela891!!:" secalarm'<<" if9secalarm'==-: secalarm'=!" P'=dig_%al.secalarm'/" dela89'!:" break"

case 4=

//+et the sec1 digit.

//recnt_incr_seg=4" P'=dig_%al.secalarm1/" dela891!!:" secalarm1<<" if9secalarm1==1!: secalarm1=!" P'=dig_%al.secalarm1/" dela89'!:" break" 6 6 6

%oid resetfn9mode: set mode. 0 begin=1" dig_ctrl_4=1" dig_ctrl_&=!" dig_ctrl_'=!" dig_ctrl_1=!" if9mode==!: 0 ,>=!155" clock.

// 3unction to bring the clock to reset or

//>nable the min' digit and disable others

//?heck if clock is in set alarm mode

//#isable @imer! interru$t to sto$ the dis$la8 of

sel_seg_to_incr=1"

recnt_incr_seg=1" P'=dig_%al.kee$min'/" dela891!!:" minalarm'=kee$min'" minalarm1=kee$min1" secalarm'=kee$sec'" secalarm1=kee$sec1" 6 if9mode==1: 0 ,>=!15!" //#isable @imer! interru$t to sto$ the clock. //?heck if clock is in set clock mode

minalarm'=min'" minalarm1=min1" secalarm'=sec'" secalarm1=sec1" sel_seg_to_incr=1" recnt_incr_seg=1" P'=dig_%al.min'/" dela891!!:" 6 while91: 0 if9start==!: 0 if9mode==!: 0 kee$min'=minalarm'" //?heck if start $in is $ressed

kee$min1=minalarm1" kee$sec'=secalarm'" kee$sec1=secalarm1" alarmmin'=minalarm'" alarmmin1=minalarm1" alarmsec'=secalarm'" alarmsec1=secalarm1" 6 if9mode==1: 0 min'=minalarm'" min1=minalarm1" sec'=secalarm'" sec1=secalarm1" 6 @AB#=!111" @C!=!1f-" @7!=!13f" ,>=!15D" clock @*!=1" break" 6 if9set==!: //?heck if set $in is $ressed //>nabling @imer! interru$t to start the dis$la8 of //*eset the timer!

sel_seg_to_incr=setfn9:" if9incr==!: //?heck if incr $in is $ressed

increase9sel_seg_to_incr:"

6 6

%oid dis$la89: interru$t 1 // 3unction to dis$la8 the digits on se%en segment using the conce$t of se%en segment multi$le1ing. 0 @C!=!1&-" //*eload @imer!

@7!=!1f-" P'=!133" dig_ctrl_1 = dig_ctrl_& = dig_ctrl_' = dig_ctrl_4 = !" dig_dis$<<" dig_dis$=dig_dis$E4" switch9dig_dis$: 0 case != P'=dig_%al.sec1/" dig_ctrl_1 = 1" break"

case 1= P'= dig_%al.sec'/" dig_ctrl_' = 1" break"

case '= P'= dig_%al.min1/" dig_ctrl_& = 1"

break"

case &= P'= dig_%al.min'/" dig_ctrl_4 = 1" break" 6 6

%oid mo%eclock9: interru$t & digits 0 loo$<<" if9loo$=='!: 0 sec1<<" if9sec1==1!: 0 sec1=!" sec'<<" if9sec'==-: 0 sec1=!" sec'=!" min1<<" if9min1==1!: 0

// 3unction to increment clock

sec1=!" sec'=!" min1=!" min'<<" if9min'==-: 0 sec1=!" sec'=!" min1=!" min'=!" 6 6 6 6 loo$=!" 6 6

%oid main9: 0 mode=!" set=1" //,nitiali(e set2 reset2 start and incr $ins as in$ut

resetalarm=1" resetclock=1" start=1" incr=1" begin=!"

@AB#=!111" @C!=!1f-" @7!=!13f" ,>=!15D" @*!=1"

//,ntiali(e @imer ! //Coad timer!

//>nable @imer! interru$t //+tart @imer!

@C1=!13#" @71=!14F" @*1=1" while91: 0 h if9resetalarm==!: 0 resetfn9!:" 6 if9resetclock==!://?heck if reset clock $in is $ressed 0 resetfn91:" 6 if9min'==alarmmin'GGmin1==alarmmin1GGsec'==alarmsec'GGsec1==alarm sec1GGbegin==1:// ?heck for Dlarm condition 0 bu((er=!" dela895!!:" bu((er=1" 6 6 //?heck if reset alarm $in is $ressed // +tart @imer1

You might also like