FRIENDz

FAILURE IS THE SIGN OF SUCCESS!!

Right-left scrolling LEDs


Project description:
 In this project, 8 LEDs are connected to PORT B of a PIC microcontroller. Also a push-button switch is connected to bit 0 of PORT A using a pull-up resistor.. When the switch is pressed the LEDs scroll to the right.

Hardware:
The circuit diagram of the project is shown in Figure 1. The circuit in this project additionally a switch is connected to bit 0 of PORTA to control the direction of scrolling. A PIC16F627 model PIC micro controller is used and the micro controller is operated from its 4 MHz internal clock. The LEDs are connected to 8 pins of PORT B using 330_ current-limiting resistors. An external reset button is connected to MCLR input of the microcontroller.

Figure 1 Circuit diagram

Flow diagram:
The flow diagram of the project is shown in Figure 2. At the beginning of the program the I/O direction is specified. A byte variable called Cnt is used as the loop variable. The program consists of an indefinite loop and at the beginning of the loop the switch is tested. If the switch is logic 1 (i.e. switch is not pressed) then the scrolling is to the left and if the switch is pressed the switch is at logic 0 and scrolling is to the right. A 250 ms delay is used between each output.

Software: Pic Basic
The software for PicBasic language is given in Figure 3. At the beginning of the program PORTA, PORTB, TRISA, TRISB, and CMCON register addresses are defined. TRISA is set to 1 so that bit 0 of PORTA is configured as an input port. Similarly, TRISB is cleared to 0 so that all bits of PORTB are configured as outputs. Push-button switch is connected to bit 0 of PORTA (RA0). Normally this pin is pulled high to logic 1 by using a resistor. When the switch is pressed the pin goes down to logic 0. PORTA pins on the PIC16F627 microcontroller have dual functions and they can either be used as analog comparator inputs, or as digital I/O ports. CMCON register is used to control the function of these pins. Setting CMCON to 7
configures PORTA pins as digital I/O ports. Inside the LOOP, the value of Cnt is sent to PORTB and the PEEK instruction is used to read the switch setting. “Bit0” refers to bit 0 of variable “B0” which is where the switch is connected. When the switch is pressed the program jumps to label PRESSED where the LEDs are scrolled right. When the switch is not pressed the LEDs are scrolled left. This loop is repeated forever with 250 ms delay between each output. Set port directions

Figure 2 Flow diagram

‘*************************************************************************
 ‘ RIGHT-LEFT SCROLLING LEDS
‘ =========================
 ‘ 8 LEDs are connected to PORTB of a PIC microcontroller. This program
‘ scrolls the LEDs to the right or left depending on a switch setting. The switch
‘ is connected to bit 0 of PORT A. If the switch is not pressed the switch
‘ output is at logic 1 and the LEDs scroll to the left. When the switch is
‘ pressed the LEDs scroll to the right. A 250ms delay is used between each
‘ output.
 ‘*************************************************************************

 ‘ SYMBOLS
Symbol TRISA = $85                                              ‘ TRISA address
Symbol TRISB = $86                                              ‘ TRISB address
Symbol PORTA = $05                                             ‘ PORTA address
Symbol PORTB = $06                                            ‘ PORTB address
Symbol CMCON = $1F                                          ‘ CMCON address
Symbol Cnt = B1                                                    ‘ Cnt is a byte variable
Symbol Switch = B0                                                 ‘ Switch is a byte variable
‘ START OF MAIN PROGRAM
POKE CMCON, 7                                                  ‘ RA0-RA3 are digital I/O
POKE TRISA, 1                                                    ‘ Set PORTA bit 0 as input
POKE TRISB, 0                                                    ‘ Set all PORTB pins as outputs
INIT:
CNT = 1                                                                ‘ Initialise Cnt to 1

Figure 3 (Continued)

PicBasic Pro
The software for PicBasic Pro language is given in Figure 4. The PicBasic Pro program is easier to understand. At the beginning of the program TRISB is cleared to 0 to make all PORTB pins as outputs. Also, TRISA is set to 1 so that bit 0 of PORTA is configured as input. CMCON
register is set to 7 to configure PORTA pins as digital I/O. The switch setting is then checked using an IF statement. When the switch is pressed bit 0 of PORTA goes to logic 0 and the program scrolls the LEDs to right. When the switch is not pressed bit 0 of PORTA is at logic
1 and the program scrolls the LEDs to the left.
LOOP:
POKE PORTB, Cnt                                                         ‘ Send Cnt to PORTB
PAUSE 250                                                                      ‘ Wait 250ms
PEEK PORTA, Switch                                                    ‘ Read switch setting
IF Bit0 = 0 THEN PRESSED                                           ‘ If switch is pressed
IF Cnt = 128 THEN INIT
Cnt = Cnt * 2                                                                     ‘ Shift Cnt left
GOTO LOOP
PRESSED:                                                                        ‘ Switch is pressed
IF Cnt = 1 THEN NXT
Cnt = Cnt / 2
GOTO LOOP
NXT:
Cnt = 128
GOTO LOOP
END                                                                                      ‘ End of program

Figure 3 PicBasic program

‘**************************************************************************
 ‘ RIGHT-LEFT SHIFTING LEDS
‘ ========================
 ‘ 8 LEDs are connected to PORTB of a PIC16F627 microcontroller.
‘ This program scrolls the LEDs right or left depending on the mode of a
‘ push-button switch. When the switch is not pressed LEDs are scrolled left.
‘ When the switch is pressed, LEDs are scrolled right. A 250ms delay
‘ is used between each output.

‘*************************************************************************
 ‘ DEFINITIONS
Cnt VAR Byte                                                            ‘ Declare Cnt as a Byte variable
 ‘ START OF MAIN PROGRAM
CMCON _ 7                                                               ‘ Set PORTA as digital I/O
TRISA _ 1                                                                  ‘ Set RA0 as input
TRISB _ 0                                                                  ‘ Set PORTB pins as outputs
INIT:
Cnt _ 1                                                                       ‘ Initialise Cnt to 1
LOOP:
PORTB _ Cnt                                                           ‘ Send Cnt to PORTB
PAUSE 250                                                               ‘ Wait 250ms
IF PORTA.0 _ 0 THEN
IF Cnt _ 1 THEN Cnt _ 128: GOTO LOOP
Cnt = Cnt >> 1                                                               ‘ Shift right
GOTO LOOP
ELSE
IF Cnt _ 128 THEN INIT
Cnt _ Cnt << 1                                                                ‘ Shift left
GOTO LOOP
ENDIF
END                                                                                  ‘ End of program

Figure 4 PicBasic Pro program 

No comments:

Post a Comment