Archive for May 2013
Timer based on 7 segment using 8051
This is the circuit diagram of timer on proteus software. We can use this circuit to know the duration of a particular event. You are just required to know about 7 segment interfacing. Its very simple circuit.
I have interfaced four 7-segment display to port 2. First two digit will show the minute and the last two digit will show the second. Minute will increase by one each time after completing 60 second. After pressing reset pin, it will start again.
In this circuit i have interfaced four 7-segment to port 2. You can see in the figure that each 7 segment displays different digit even if it is connected to a single port. As per rule it should all four 7-segment should display the same digit at a time. Think!!!!!!!!!
How it is possible???????
It is possible by multiplexing all the 7-segment display through one port. We can also connect each 7-segment to different port but it will require large number of pin. So that we have multiplexed them to a single port. Here we have provided delay of 0.1ms. between each 7-segment display. It cant be detected by human eye. It means only one 7-segment glows at a time. We can control it by the control pin given in each 7-segment. I have connected these control pin to p1.0, p1.1, p1.2 and p1.3. Seven segment display will not activate until its control pin is high.
If you are facing any kind of problem relate to this project then comment!!!!!
CLICK HERE TO SEE THE PROGRAM IN ASSEMBLY LANGUAGE
Program for Calculator in assembly language
This is the assembly language program for Calculator. It can perform operation like addition, subtraction, multiplication, division for one digit.
You are just required to know about LCD and keyboard interfacing.
/************************************************************************************/
// PROGRAM TO DEMONSTRATE INTERFACING OF HEX DISPLAY WITH MCS51
/************************************************************************************/
ORG 0000H
/************************************************************************************/
/* I/O PIN INITIALISATIONS AND DECLARATIONS */
/************************************************************************************/
C1 EQU P2.0
C2 EQU P2.1
C3 EQU P2.2
C4 EQU P2.3
ROW1 EQU P2.4
ROW2 EQU P2.5
ROW3 EQU P2.6
ROW4 EQU P2.7
LCD EQU P0
RS EQU P1.0
RW EQU P1.1
EN EQU P1.2
MOV LCD,#80H
ACALL CMD
ACALL DELAY
MOV LCD,#08H
ACALL CMD
ACALL DELAY
ERROR: MOV LCD,#01H
ACALL CMD
ACALL DELAY
MOV LCD,#0EH
ACALL CMD
ACALL DELAY
MOV LCD,#80H
ACALL CMD
ACALL DELAY
MOV P2,#00H
MOV P0,#00H
MOV DPTR,#MSG
CLR A
MOV B,#00H
MOV R3,#00H
MOV R0,#04
SLR: ACALL KEYPAD
DJNZ R0,SLR
MOV A,R4
CJNE R7,#'=',ERROR
CJNE R5,#'+',CO1
SJMP ADDITION
CO1: CJNE R5,#'-',CO2
SJMP SUBST
CO2: CJNE R5,#'*',CO3
SJMP MULTI
CO3: CJNE R5,#'/',ERROR
SJMP DIVIDE
SUBST: SUBB A,R6
JC NEGATIVE
JZ ZERO
SACK: SJMP GOM
NEGATIVE: MOV LCD,#'-'
ACALL DISP
ACALL DELAY
MOV A,R6
SUBB A,R4
INC A
SJMP SACK
ZERO: MOV LCD,#'0'
ACALL DISP
ACALL DELAY
SJMP ALT
MULTI: MOV B,R6
MUL AB
MOV R6,A
SUBB A,#10
JC STAR3
MOV A,R6
MOV B,#10
DIV AB
MOV DPTR,#MSG
MOVC A,@A+DPTR
MOV LCD,A
ACALL DISP
ACALL DELAY
MOV A,B
SJMP GOM
STAR3: MOV A,R6
MOV DPTR,#MSG
MOVC A,@A+DPTR
MOV LCD,A
ACALL DISP
ACALL DELAY
SJMP ALT
DIVIDE: MOV B,R6
DIV AB
MOV DPTR,#MSG
MOVC A,@A+DPTR
MOV LCD,A
ACALL DISP
ACALL DELAY
MOV LCD,#' '
ACALL DISP
ACALL DELAY
MOV A,B
SJMP GOM
ADDITION: ADD A,R6
MOV R6,A
SUBB A,#10
JC STAR
JZ STAR2
MOV LCD,#'1'
ACALL DISP
ACALL DELAY
GOM: MOV DPTR,#MSG
MOVC A,@A+DPTR
MOV LCD,A
ACALL DISP
ACALL DELAY
SJMP ALT
STAR2: MOV LCD,#'1'
ACALL DISP
ACALL DELAY
MOV LCD,#'0'
ACALL DISP
ACALL DELAY
SJMP ALT
STAR: MOV A,R6
MOV DPTR,#MSG
MOVC A,@A+DPTR
MOV LCD,A
ACALL DISP
ACALL DELAY
ALT: SJMP ALT
/************************************************************************************/
/* READING COLUMN VALUE */
/************************************************************************************/
KEYPAD: ACALL DELAY
MOV P2, #0FH
ACALL DELAY
K1: MOV A,P2
CJNE A,#0FH,KK1
SJMP K1
KK1: JB C1,N1
MOV B,#00h
ACALL DELAY
N1: JB C2,N2
MOV B,#01h
ACALL DELAY
N2: JB C3,N3
MOV B,#02h
ACALL DELAY
N3: JB C4,N4
MOV B,#03h
ACALL DELAY
/************************************************************************************/
/* READING ROW VALUE */
/************************************************************************************/
N4: MOV P2, #0F0H
K11: MOV A,P2
CJNE A,#0F0H,KK11
SJMP K11
KK11: ACALL DELAY
JB ROW1,NR1
MOV R3,#00h
ACALL DELAY
NR1: JB ROW2,NR2
MOV R3,#04h
ACALL DELAY
NR2: JB ROW3,NR3
MOV R3,#08h
ACALL DELAY
NR3: JB ROW4,NR4
MOV R3,#0Ch
ACALL DELAY
NR4: MOV A,R3
/************************************************************************************/
/* SENDING KEYVALUE TO PORT 0 AND SERAIL PORT */
/************************************************************************************/
ADD A,B
CJNE R0,#04,SL1
MOV R4,A
SL1: CJNE R0,#02,SL2
MOV R6,A
SL2: MOVC A,@A+DPTR
CJNE R0,#03,SL3
MOV R5,A
SL3: CJNE R0,#01,SL4
MOV R7,A
SL4: MOV LCD,A
ACALL DISP
ACALL DELAY
CLR A
RET
/************************************************************************************/
/* DELAY SUBROUTINE */
/************************************************************************************/
DELAY: MOV R2,#5FH
a1: MOV R1,#0FEH
a2: DJNZ R1,a2
DJNZ R2,a1
RET
CMD: CLR RS
CLR RW
SETB EN
NOP
CLR EN
RET
DISP: SETB RS
CLR RW
SETB EN
NOP
CLR EN
RET
/************************************************************************************/
/* LOOKUP TABLE W.R.T 0-15 SWITCHES IN HEX KEYPAD */
/************************************************************************************/
MSG: DB '0','1','2','3','4','5','6','7','8','9','+','-','*','/','=','F',0
END
If you have any problem then comment!!!!!!!!!!!!!!