Open navigation menu
Close suggestions
Search
Search
en
Change Language
Upload
Sign in
Sign in
Download free for days
0 ratings
0% found this document useful (0 votes)
27 views
LCD + Keypad
Uploaded by
Mina Fadi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF or read online on Scribd
Download now
Download
Save LCD + Keypad For Later
Download
Save
Save LCD + Keypad For Later
0%
0% found this document useful, undefined
0%
, undefined
Embed
Share
Print
Report
0 ratings
0% found this document useful (0 votes)
27 views
LCD + Keypad
Uploaded by
Mina Fadi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF or read online on Scribd
Download now
Download
Save LCD + Keypad For Later
Carousel Previous
Carousel Next
Save
Save LCD + Keypad For Later
0%
0% found this document useful, undefined
0%
, undefined
Embed
Share
Print
Report
Download now
Download
You are on page 1
/ 22
Search
Fullscreen
Chapter 3: LCD and Keyboard Interfacing tn this chapter we show interfacing to two real-world devices: LCD and Keyboard. They are widely used in different embedded systems Section 3.1: Interfacing to an LCD This section describes the operation modes of the LCDs, then describes how to program and interface an LCD to the Tiva LaunchPad. LCD operation In revent years the LCD is replacing LEDs (seven-segment LEDs or other mul This is due to the following reasons: segment LEDS). The declining prices of LCDs. The ability to display numbers, characters, and graphics. This isin contrast to LEDS, which are limited to numbers and a few characters.( The new OLED panels are relatively much more expensive except the very small ones. But their prices are dropping. The interface and programming to OLED are similar to graphic LCD.) 3, Incorporation of the refreshing controller into the LCD itself, thereby relieving the CPU of the task of refreshing the LCD. 4, Ease of programming for both characters and graphics. 5. The extremely low power consumption of LCD {when backlight is not used). In this Chapter we will fimit the discussions to the character LCD modules. The graphic LCD modules will be discussed ina later | chapter. [3° VEE = Power supply to control LCD module pin descriptions fess i ee COS 4 RS RS = O to select command For many years, the use of Hitachi | HD44780 LCD controller dominated the register, character LCD modules. Even today, most of RS=1toselect data the character LCD modules still use HD44780 or register a Variation of it. The HD44780 controller has a RAW= Ofor write, 14 pin interface for the microprocessor. We will discuss this 14 pin interface in this section, The function of each pin is given in Table 3-1. Figure 3-1 shows the pin positions for various LCD modules. “140870 The abit data bus. ‘aie 3 Pin Destine ToeTD 51pmc20261 buczaaa7 ncs6250 Mozai38 Ditcanais omes2192 ‘omcsa6 fomca2239 omereraxs micaoi3t DMCZD4S4. Meenas Figure 3-1: Pin Positions for Various LCDs from Optrex \VCC, VSS, and VEE: While VCC and VSS provide #5V power supply and ground, respectively, VEE is used for controlling the LCD contrast. RS, register select: There are two registers Inside the LCD and the RS pin is used for their selection as follows, If RS = 0, the instruction command code register is selected, allowing the user to send a command such as clear display, cursor at home, and so on (or query the busy status bit of the controller). IF RS = 4, the data register is selected, allowing the user to send data to be displayed on the LCD (or to retrieve data from the LCD controller). R/W, read/write: R/W input allows the user to write information into the LCD controller or read Information from it. R/W = 2 when reading and R/W = 0 when writing, E, enable: The enable pin is used by the LCD to latch information presented to its data pins. When data is supplied to data pins, a High-to-Low pulse must be applied to this pin in order for the LCD ‘to latch in the data present at the data pins. This pulse must be a minimum of 230 ns wide, according to Hitachi datasheet, D0-D7: The 8-bit data pins are used to send information to the LCD or read the contents of the LCD's internal registers. The LCD controller is capable of operating with 4-bit data and only D4-D7 are used. We will discuss this in more details later. rae inked 1 Clear display screen Return cursor home “Force cursor to beginning of 2nd line 2ilines and 5x7 character (8-bit 52To display letters and numbers, we send ASCII codes for the letters A~Z, 2-2, numbers 0-9, and ‘the punctuation marks to these pins while making RS There are also instruction command codes that can be sent to the LCD in order to clear the ay, force the cursor to the home position, or blink the cursor. Table 3-2 lists some commonly used ‘command codes. For detailed command codes, see Table 3-4. Sending commands to LCDs To send any of the commands to the LCD, make pin RS = 0 and send a High-to-Low pulse on the pin to enable the internal latch of the LCD. The connection of an LCD to the microcontroller is shown in 10K Por Figure 3-2: LCD Connection to Microcontroller Notice the following for the connection in Figure 3-2: ‘The LCD's data pins are connected to PORTx of the microcontroller. ‘The LCD's RS pin is connected to Pin 5 of PORTY of the microcontroller. ‘The LCD's R/W pin is connected to Pin 6 of PORTy of the microcontroller. ‘The LCD's E pin is connected to Pin 7 of PORTy of the microcontroller. Both Ports x and y are configured as output ports. Sending data to the LCD In order to send data to the LCD to be displayed, we must set pin RS ‘o-Low pulse to the E pin to enable the internal latch of the LCD. , and also send a High- Because of the extremely low power feature of the LCD controller, it runs much slower than the ‘microcontroller. The first two commands in Table 3-2 take up to 1.64 ms to execute and all the other Commands and data take up to 40 us. (At the highest clock speed, TM4C123GHGPM can execute more than 3,000 instructions in 40 us.) After one command or data is written to the LCD controller, one must. wait until the LCD controller is ready before issuing the next command/data otherwise the second comrand/data will be ignored. An easy way (not as efficient though) is to delay the microcontroller for 53the maximal time it may take for the previous command. We will use this method in the following examples. All the examples in this chapter follow the original HD44780 datasheet (see Table 3-4). You ‘may have to adjust the delay time for the LCD module you use. [+ pi_L.et Initialize and display "Hello" on the LCD using =bit data mode. */ f* ata pine use Port 8, control pins use Port A */ /* this program strictly follows 1044780 datasheet for timing. You may want to adjust the amount of delay for your LCD controller. */ Binclude "mMac123GHePM.h* Sdefine LcD_OATA GPIOB define UcD_CTRL GPIOA define RS 0x20 /* PORTA BITS mack */ Hdefine RW 0x20 /* PORTA BITE mask */ define EN 0x80 /* PORTA BITT mask */ void delays (int a}: void delays (int n void LCD_conmand unsigned char command) : vold LeD data (unsigned char data); void LCD_init (void); int main(void) ( nep_init 0); Fortra) 1 eD_command (1) 5 J* clear display */ cD command (x60): /* Led cursor location */ delays (500): LeD_data ("8"); EoD data(‘e'); EoD data ("1"); ep data ("1"); Lcd _data(to"}; aeLayts (500) ' void Lcb_init (void) ( SYSCTL->REGCGPIO |= 0x01: /¥ enable clock to GPIOR *+/ SYSCTL-SRCGCGPIO |= 0x02; /* enable clock to GPIOB */ LCD_CTRL->DIR |= OxED; /* set PORTA pin 7-5 ag output for control */ LCD_CTRL->DEN i= OXED; —/* set PORTA pin 7-5 as digital pins */ ECD_DATA->DIR = OxEF? 7+ set all PORTE pine as output for data */ LCD_OATA->DEN ~ OxPF; 7+ set all PORTE pins as digital pins */ deiayts (20); /* initialization sequence */ LLCD_comnand (0x30) + derayeis (5); “LCD _command (0X30) + eiayys (100) 84Lep_conmand (030) ¢ cp _conmand (0x38) 5 J+ set O-bit data, 2-Line, 5x7 font */ ico command (0x08) + Y* move cursor right */ e0_comand (0x01) ¢ /* clear screen, move cursor to home */ {ico “commana (0x08) z 7+ turn on display, cursor blinking */ yoid LCD_conmand (unsigned char command) LCD_CTRL-SOATA = 0; /* BS = 0, B/W = 0 4+/ eD_DATA->DATA = command Hep_eSRL DATA EN; /* puloe © +/ delays (0) ECD_CTRL=>DATA = 05 if (command < 4) delays (2); /* command 1 and 2 needs up to 1.64ms */ delays (40) : /* all others 40 us */ void LeD_data(unsigned char data) 1 RS; /# RS = 1, R/M = 0 +/ data: EN IRS: /* pulse 8 */ Lcb_OTRL-SORTA LcD_DATA~>DATA LCD_CTRL~>DATA delays (0) ; LCD_CTRL=>DATA ~ delayls (40) /* delay n milliseconds (16 MHz CPU clock) */ void delays (int a} int iy 3s for(i 07 i
RCGCGPIO |= 0x02; /* enable clock to GPIB */ 1CD_PORT->DIR = OXF? 7+ set all PORTB pins as output */ LCD_PORT-SDEN = OxFF; /* set ail PORTB pins as digital pins */ delays (20): /* initialization sequence */ LCD _nibble write (0x30, 0); delays (517 LED_nibble write (0x30, 9)7 selayue(100) Leb_nibble write (0x30, 0); aelayus(40)7 Lcb_nibble_write(0x20, 0); /* use é-bit data mode */ delays (40); LCD_command (0x28) ; J+ set 4-dit data, 2-Line, 5x7 font */ Lc” command (0x06) 7 V+ move cursor right */ LCD command (0x01) 7 7* clear screen, move cursor to hone */ co _conmand (OX0F} : /* turn on display, cursor blinking */ 7void LeD_nibble_writefunsigned char data, unsigned char control) i data b= OXF; J+ clear lower nibble for control */ control &= 0x08; /* clear upper nibble for data */ ECD_PORT->DATA ~ date | control; J RS = 0, RW OFS LCD_PORT->DATA = data | control | EN; /* pulse & */ dotayus (0); Lcb_PORT->DATA = data; LCD_PORT->OATA = 07 : void LCD_command uneigned chaz command) { Lcb_nibble_write{command & 0x®0, 0); /* upper nibble first +/ Lep_nibble_write(command << 4, 0); /* then lower nibble */ Lf (command < 4) delays (2); /* commands 1 and 2 need up to 1.64ms */ else delays (40); /* all others 40 us */ 1 void LCb_data{unsigned char data) 1 LeD_nibble write(data & OxF0, RS}; /* upper nibble first */ Lcb_nibble write(data << 4, RS); (+ then lower nibble */ delays (40); J+ delay p milliseconds (16 Miz CPU clock) */ void delayMs (int n} ‘ int i, 34 fori = 0; i< ny itty forij = 07 5 < 31807 544) (f+ Qo nothing tor 1 ms */ ) 7+ delay n microseconds (16 milz CPU clock) */ void delayls(int n} 1 int 1, 33 for(i 0p 1 < ny iH) for(} = 0; 3 < 34 344) th 7+ Go notnang tor 1 us */ ) /* This fonction is called by the startup assembly code to perform system specific initialization tasks. */ void Systeminit (void) 1 J+ Grant coprocessor access */ /* This is required since TMAC1236 has a floating point coprocessor */ 58ce->cPACR |= 0x00#00000; ES LCD cursor position In the LCD, one can move the cursor to any location in the display by issuing an address command. The next character sent will appear at the cursor position. For the two-line LCD, the address command for the first location of line 1 is Ox80, and for line 2 itis xCO. The following shows address locations and how they are accessed: RS_ RW. 067 DBs 085 DBs DBI EZ DBI DB0 Of ey ean aa Ae PAT A where AcAcAsAsAvArAg~ 0000000 to 0100111 for line 1 and AgAsAyAxAzA:Ao = 1000000 to 1100111 for line 2. See Table 3-3. Table 23: LCD Addressing Commands Line 4 (min) 1 0 0 0 0 0 0 ° ~ tne 1 (max) 1 ° 1 0 ° 1 1 1 “Line 2 (min) 1 1 0 0 0 0 o 0 Line 2 (max) 2 i 1 0 ° 1 1 1 ‘The upper address range can go as high as 0100111 for the 40-character-wide LCD while for the 20-character-wide LCD the address of the visible positions goes up to 010011 (19 decimal = 10011 binary). Notice that the upper range 0100111 (binary) = 39 decimal, which corresponds to locations 0 to 39 for the LCDs of 40 x 2 size, Figure 3-4 shows the addresses of cursor positions for various sizes of LcDs. All the addresses are in hex. Notice the starting addresses for four line LCD are not in sequential order. ‘As an example of setting the cursor at the fourth location of line 1 we have the following LCD_command (0283) ; and for the sixth location of the second line we have: LCD_command (0xC5) ; Notice that the cursor location addresses are in hex and starting at O as the first location. 59Figure 3-4: Luror Adresses for Some LCDs LCD timing and data sheet Figures 3-5 and 3-6 show timing diagrams for LCD write and read timing, respectively, 60RS team = Enable pulse width = 230 ns (eninimum) tosw = Data setup time = 80 ns (minimum) ‘y= Data hold time = 10 ns (minimum) tas = Sotup time prior to E (going high) for both RS and RAW = un = Hold time after E has come down for both RS and RAW = 10 ns (minimum) Figure 35:10 Write Timing Do-D7 tp = Data output delay time ‘Setup time prior to E (going high) for both RS and RAW = 40 ns (minimum) Note: Read requires an t-to-H pulse for the E pin. Figure 3-6:LCD Read Timing 61Notice that the write operation happens on the H-to-t transition of the E pin. The microcontroller must have data ready and stable on the data lines before the H-to-L transition of E to satisfy the setup time requirement. 3 ‘The read operation is activated by the L-to-H pulse of the E pin. After the delay time, the LCD controller will have the data available on the data bus if the R/W line is high. The microcontroller should _ read the data from the data lines before lowering the E pulse. Table 3-4 provides a more detailed list of LCD instructions. Clears entire display and sets, DD RAM address Oin address | 2.64 ms counter Sets DD RAM address to 03s, address counter. Also returns display being shifted to | 1.64 ms_ original positions. DD RAM 3 contents remain unchanged. i ‘Sets cursor move direction ‘and specifies shift of display. These operations are 4ous | performed during data write and read. Sets On/Off of entire display (0), cursor On/Off (C), and blink of cursor position character (8) ‘Moves cursor and shifts display without changing DD | 40us 40ps RAM contents. Sets interface data length (DL), number of display lines (L), | 40ns x and character font (F) Sete “Sets CG RAM address. CG RAM ram [ojojo|i Acc data is sent and received after | 40's. Address _ this setting. ‘Set DD Sets DD RAM address. DD Ram |o|o|1 ‘ADD RAM data is sent and received | 405 after this setting. Reads Busy flag (BF) internal operation is being a K pele le : performed and reads address | “°H® counter contents. Write Data | i | 0 Weite Data “Writes data into DD oré | 40usRAM. Reads data from DD or CG a[a Read Data Ae 40ys ‘Abbreviations: DD RAM: Display data RAM CG RAM: Character generator RAM AGC: CG RAM address ADD: DD RAM address, corresponds to cursor address ‘AC: address counter used for both DD and CG RAM addresses increment, 0: Decrement. : Accompanies display shift S/C: 1 = Display shift, 0: Cursor move : 1: Shift to the right, 0: Shift to the left bits x7 dots internal operation, 0 = Can accept instruction Table 3-4 list of LCD instructions Review Questions 1. The RS pinis an input, output) pin for the LCD. 2. The Epinisan (input, output) pin for the LCD. 3. The E pin requires an (H-to-L, Lto-H) transition to latch in information at the data pins of the LCD. 4. For the LCD to recognize information at the data pins as data, RS must be set to__(high, low) 5. Give the command codes for line 1, first character, and line 2, first character. Section 3.2: Interfacing the Keyboard to the CPU To reduce the microcontroller /O pin usage, keyboards are organized in a matrix of rows and ‘columns. The CPU accesses both rows and columns through ports; therefore, with two &-bit ports, an 8 x 8 matrix of 64 keys can be connected to a microprocessor. When a key is pressed, a row and a column make @ contact; otherwise, there is no connection between rows and columns. In a PC keyboards, an embedded microcontroller in the keyboard takes care of the hardware and software interfacing of the keyboard. In such systems, it is the function of programs stored in the ROM of the microcontroller to scan the keys continuously, identify which one has been activated, and present it to the main CPU on. the motherboard. In this section, we look at the mechanism by which the microprocessor scans and identifies the key. For clarity some examples are provided. Scanning and identifying the key Figure 3-6 shows a 4 x 4 matrix connected to two ports. The rows are connected to an output Port and the columns are connected to an input port. All the input pins have pull-up resistor connected. l¥no key has been pressed, reading the input port will yield 4s forall columns. if ll the rows are driven 63low and a key is pressed, the column of that key will read back a 0 since the key pressed shorted that column to the row that is driven low. It is the function of the microprocessor to scan the keyboard continuously to detect and identify the key pressed. How it is done is explained next, Figure 3-7: Matrix Keyboard Connection to Ports Key press detection To detect the key pressed, the microprocessor drives all rows low, then it reads the columns. If the data read from the columns is D7-D4 = 1111, no key has been pressed and the process continues Until a key press is detected. However, if one of the column bits has a zero, this means that a key was pressed. For example, if 07-D4= 1101, this means that a key in the D5 column has been pressed, The following program detects whether any of the keys is pressed. J+ to be used in conju sion with program 3-2 */ void keypad_init (void); unsigned char keypad, Xbhit (vold); int main(void) [ 64unsigned char key: keypad_init (); LeD_init 0; whileta) t Leb_commana {0x80) J* LeD cursor location */ if (keypad_konit() != 0) /* if a key is pressed */ EeD_data("P*}? /* display "Pt */ else LeD_data('n'); J+ ateplay ¢Rt+/ delays (10); /* wait for a while */ ' Acefine KEYPAD_ROW GPIOR fdetine KEYPAD_COL GPrOc /* this function initializes the ports connected to the keypad */ yoid keypad_init (void) 1 SYSCPL->RCGOGPIO |= 0x04; /* enable clock to GPIOC */ SYSCTL-DRCGCGPIO |= 0x10; /* enable clock to GPIOE */ KEYERD_FOW->DIR |= Ox0F; /* set row pins 3-0 as output */ KEYPAD_RON-DDEN |= Ox0F; /* set row pins 3-0 as digital pins */ KEYPAD_RON-DODR j= Ox0F; /* set row pins 3-0 as open drain */ KEYPAD COLM>DIR G= ~OxFO; —/* get column pin 7-4 as input */ KBYPAD_COL->DEN |= 0x60; /* set column pin 7-4 as digital pins */ KEYPAD_COL->PUR |= 0x0; /# enable pull-ups for pin 7-4 f+ this 49 a no /* If a key is pressed, it returns 1. */ / Otherwise, it returns a 0 (not ASCII 0).*/ signed char keypad_kbbit (void) int cols J+ check to see any key pressed */ KEYEAD_ROW->DATA = 0; /* enable ali rows */ col = KEYPAD COL->OATA & OxFO; /* read all colunns */ Lf {col == OxFO) return 07 /* no key pressed +/ else return 1; /* a key is pressed */ EES Key identification After @ key press is detected, the microprocessor will o through the process of identifying the key. Starting from the top row, the microprocessor drives one row low at 2 time; then it reads the 65columns. If the data read is all 1s, no key in that row is activated and the process is moved to the next row. It drives the next row low, reads the columns, and checks for any zero. This process continues until row is identified with a zero in one of the columns. The next task is to find out which column the pressed key belongs to. This should be easy since each column is connected to a separate input pin, Look at Example 3-1. ee Example 3-1. From Figure 3-7, identify the row and column of the pressed key for each of the following. (a) D3-D0 = 1110 for the row, D7-D4- 1011 for the column (b) D3-D0 = 1101 for the row, D7-D4= 0111 for the column Solution: From Figure 3-7 the row and column can be used to identify the key. (a) The row belongs to DO and the column belongs to D6; therefore, the key number 2 was pressed, (b) The row belongs to Di and the column belongs to D7; therefore, the key number 7 was pressed, Figure 3-8 is the flowchart for the detection and identification of the key activation. Program 3-4 provides an implementation of the detection and identification algorithm in C language. Next, we will examine it in detail, First for the initialization of the ports, Port E pins 3-0 are used for rows and configured as output digital pin. These pins are also configured as open drain output, ‘which means they are driven low actively but not driven high. Open drain output prevents port damage ‘when two keys of the same column are pressed at the same time. If output pins are driven high and low ‘and two keys of the same column are pressed, it will short the output low to output high of the adjacent pin and cause damages to the output pins. The Port C pins 7-4 are configured as input digital pin with the internal pull-up resistors enabled, This will ensure that the input pins read 1 when no key is pressed. ‘The key scanning function is a non-blocking function, meaning the function returns regardless of whether there is @ key pressed or not. The function first drives all rows low and check to see if any key pressed. if no key is pressed, a zero is returned. Otherwise the code will proceed to check one row at a ‘time by driving only one row low at a time and read the columns. If one of the columns is active, it will find out which column itis. With the combination of the active row and active column, the code will find out the key that is pressed and using the lookup table keymapl | return the ASCII key label. 66EPasseld Key, EE i SenOURON et Figure 3-8: The Flowchart for Key Press Detection and identifiation /* to be used in conjunction with Program 3-2 */ void keypad_init (void); unsigned char keypad_getkey (void): int mainiveia) 1 unsigned char key: keypad init; nep_init(): white (2) i {LCD_command (0380) 2 /* UCD cursor Location */ 67key ~ keypad_getkey(); if (key I= 0) /* read the keypad */ (f+ if a key is pressed */ EeD_data (key); , else EeD_datat? ")s delays (20); Hdofine KEYPAD_ROW GPIOE Hdefine KEYPAD_COL GPrOc /* display the key label +/ ‘J+ wait for a while */ /* this function initializes the ports connected to the keypad */ void keypad_init (void) ( SYSCTL-DREGCGPIO |= 0x04; SYSCTI->REGCGPIO |= 0x10; KEYEAD_ROW-DDIR |= Ox0F KEYEAD_ROW-DOEN |= OX0F: KEYPRD_ROW-DODR |= Ox0F; KEYEAD_COL->DIR = ~OxFO; KEYERO_COL->DEN |= 0x80; KEYEAD_COL->POR |= OxFO: , /* enable clock to GPIOc */ /> enable clock to GPLOE */ (+ eet row pins 3-0 as output */ 7+ at row pine 3-0 as digital pins */ 7* set row pins 3-0 as open drain */ /* set column pin 74 as input */ /* set column pin 7-4 a digital pins */ 7* enable pull-ups for pin 7-4 */ J+ this is @ non-blocking function te read the keypad. */ 7 TE a key is pressed, it returns the key label in ASCIT encoding, returns a 0 (not ASCIT 0). */ unsigned char keypad_get key (void) { const unsigned char keymap(4) [4] 1 ea ca Cay 15, 16, Bt, £17, 1B 19, Thy 18 10%, BD, , int row, cols otherwise, it ‘ J+ check to see any key pressed First */ KBYPAD_ROW->DATA = 0; col = REYPAD_COL->DATA & Ox#0; Af (col =» ORFO) return 0: (er a key pressed, it gets here to find out 7 enable all rows */ /* read all colunns */ 7 no key pressed */ wbich key. 47 7* Although it is weitten ag an infinite loop, it will take one of the breaks or return in one pass.*/ while (1) t row = 07 KEYPAD_ROR~>DATA = Ox0R J enable row 0 */selayus (2) /* wait for signal to settle */ col = KEYPAD COL->0ATA & OxFO; if (col != OXPO) break: KBYPAD_ROW->DATA = 0x00: J+ enable row 1 +/ delays (2); Y* walt for signal to settle */ col = KEYPAD_COL->DATA & OxE07 if (col I= 0#60) break KEYPAD_ROW->DATA = Ox0B 1 enable row 2 */ dolay0s (2); /* wait for signal to aettle +/ col = KEYPAD COL->DATA & OxFO; if (col != 0X60) break, row = 3 KEYERD_ROW->DATA ~ 0x07 /* enable row 3 */ delayus (2): {+ wait for signal to settie */ col = KEYPAD COL->OATA & OxFO; Af (col != 0xFO) break: return 0; /* Lf no key is pressed */ : + gets here when one of the rows has key pressed */ Lf (col == 0x80) return keymap(row] [0]; /* key in column 0 */ Af {col == 0x00} return keymap[row) (117 /* key in column 1 */ if == 0x80} return keymap[row) {2}; /* key in column 2 */ £ (col =» 0x70) return keymaptzow] (31 /* key in column 3 +/ return 0; /* just to be safe */ EEE epeeeeemeemeemmemeeeememeemeemmmmemmmmmmmmmeeee see Debounce When a mechanical switch is closed or opened, the contacts do not make a clean transition instantaneously, rather the contacts open and close several times before they settle. This event is called contact bounce (see Figure 3-9). So itis possible when the program first detects a switch in the keypad is pressed but when interrogating which key is pressed, it would find no key pressed. This is the reason we have a return 0 after checking all the rows. Another problem manifested by contact bounce is that one key press may be recognized as multiple key presses by the program. vec enp- Uastable Unstable Figure 3-8: Switch contact bounces 6‘We will see the software solution in Program 3-5. The sample program here demonstrates the se of keypad with the LCD. For every key pressed, one character representing the key is added to the display. In the infinite loop of main( ), keypad_getkey() is repeatedly called to scan the keypad. If it returns something other than 0, a key is pressed and the key label is displayed on the LCD. It then calls delay for 20 ms to wait for the contact bounce to subside. The next while loop waits for the key release, it continuously calls keypad_getkey( } until it returns a 0 when key is released. Another debounce for key release is required before the program scan the key again. 7+ to be used in conjunction with Program 3-4 */ void keypad init (void): unsigned char keypad_getchar (void) ; Ant main void) 1 unsigned char key; keypad_init()s Lep_init 0; ep data (13412 white(1) i J+ wait until a kay is pressed */ dot key = keypad_getkey(}7 delaytis (20); /* dedoun while(keypad_getkey!) != key): the key contact */ 1cd_data (key) : J* display the key label +/ /* wait until the previous key is released */ eo While (keypad getkey() !~ 0); delays (20) 7+ wait to debounce */ Jwhile(xeypad_getkey() != 0); The debounce code can be put in a new function, as shown in Program 3-6. 7° co be used in conjunction with Program 3-4 */ void keypad_init (void): unsigned char keypad_getchar (void) 7 70int main void) ' unsigned char key? keypad _init(); cb_init EeD_data (">"); white) i key ~ keypad getchar(): Eeb_asta ley) J+ display the key label */ This is a blocking function to read the keypad. *, /* When a key is pressed, it returns the key label.*/ i unsigned char keypad_getchar (void) nsigned char key: J+ wait until the evious key is released +/ aot while (keypad_getkey() != 0); delays (20) ; %* wait to debounce */ Jwbile(keypad_qetkey{) != 0); key = keypad_getkey(): delays (20) /* wait to debounce */ while(keypad_qetkey() != key); a There are IC chips such as National Semiconductor's MM74C923 that incorporate keyboard scanning and decoding all in one chip. Such chips use combinations of counters and logic gates (no microprocessor) to implement the underlying concepts presented in Programs 3-3 through 3-6. Review Questions 1. True or false. To see if any key is pressed, all rows are grounded. 2. 1fD3-D0~ 0111 js the data read from the columns, which column does the key pressed belong, to? 3. True or false. Key press detection and key identification require two different processes. In Figure 3-7, if the row has D3-D0 = 1110 and the columns are D3-D0 = 1110, which key is pressed? 5. True or false. To identify the key pressed, one row at a time is grounded n { |Answers to Review Questions Section 3-1 1. Input 2. Input. 3. HtoL 4. High 5. 0x80 and OxCO Section 3-2 1. True 2. Column 3 3. Tue 40 5. True R
You might also like
Shadow Work Journal Free PDF
PDF
91% (164)
Shadow Work Journal Free PDF
30 pages
Hourglass Workout Program by Luisagiuliet 2
PDF
76% (21)
Hourglass Workout Program by Luisagiuliet 2
51 pages
Book of Wisdom 2
PDF
87% (164)
Book of Wisdom 2
70 pages
BLING A Novel by Erica Kennedy
PDF
100% (18)
BLING A Novel by Erica Kennedy
468 pages
Book of Wisdom Revival of Wisdom
PDF
89% (93)
Book of Wisdom Revival of Wisdom
72 pages
12 Week Program: Summer Body Starts Now
PDF
87% (46)
12 Week Program: Summer Body Starts Now
70 pages
Knee Ability Zero Now Complete As A Picture Book 4 PDF Free
PDF
94% (68)
Knee Ability Zero Now Complete As A Picture Book 4 PDF Free
49 pages
Aussie Fitness - Low Calorie High Protein Recipes (BOOTLEG)
PDF
100% (12)
Aussie Fitness - Low Calorie High Protein Recipes (BOOTLEG)
462 pages
The Hold Me Tight Workbook - Dr. Sue Johnson
PDF
100% (16)
The Hold Me Tight Workbook - Dr. Sue Johnson
187 pages
Read People Like A Book by Patrick King-Edited
PDF
58% (78)
Read People Like A Book by Patrick King-Edited
12 pages
GB Level Up Guide 3 Elevate PDF
PDF
79% (28)
GB Level Up Guide 3 Elevate PDF
115 pages
Livingood, Blake - Livingood Daily Your 21-Day Guide To Experience Real Health
PDF
77% (13)
Livingood, Blake - Livingood Daily Your 21-Day Guide To Experience Real Health
260 pages
Cheat Code To The Universe
PDF
94% (78)
Cheat Code To The Universe
34 pages
Facial Gains Guide (001 081)
PDF
91% (45)
Facial Gains Guide (001 081)
81 pages
No Grid Survival Projects - Sophia Hall
PDF
91% (11)
No Grid Survival Projects - Sophia Hall
126 pages
Curse of Strahd
PDF
95% (467)
Curse of Strahd
258 pages
The Psychiatric Interview - Daniel Carlat
PDF
91% (34)
The Psychiatric Interview - Daniel Carlat
473 pages
The Ultimate Prepared Bug in Guide
PDF
100% (4)
The Ultimate Prepared Bug in Guide
149 pages
Mandate For Leadership Policy Recommendations
PDF
77% (62)
Mandate For Leadership Policy Recommendations
19 pages
Can't Hurt Me
PDF
67% (27)
Can't Hurt Me
10 pages
The Borax Conspiracy
PDF
91% (57)
The Borax Conspiracy
14 pages
Carl Hart, Charles Ksir - Drugs, Society, and Human Behavior (2015)
PDF
100% (17)
Carl Hart, Charles Ksir - Drugs, Society, and Human Behavior (2015)
495 pages
Couples Therapy Workbook
PDF
95% (44)
Couples Therapy Workbook
157 pages
Dare To Lead by Brené Brown
PDF
45% (11)
Dare To Lead by Brené Brown
2 pages
Combs Indictment
PDF
91% (11)
Combs Indictment
14 pages
D&D Player Handbook 5e
PDF
96% (336)
D&D Player Handbook 5e
293 pages
Shortcut To Shred Ebook Revised 9-9-2015 PDF
PDF
88% (8)
Shortcut To Shred Ebook Revised 9-9-2015 PDF
15 pages
Five Wishes (Rev 06.2011)
PDF
57% (7)
Five Wishes (Rev 06.2011)
12 pages
Workbook For Adult Children of Emotionally Immature Parents - How To Heal From Distant, Rejecting, or Self-Involved Parents
PDF
88% (16)
Workbook For Adult Children of Emotionally Immature Parents - How To Heal From Distant, Rejecting, or Self-Involved Parents
77 pages
Trauma-Focused ACT - Russ Harris
PDF
95% (39)
Trauma-Focused ACT - Russ Harris
568 pages
Anastasia: The New Broadway Musical (LIBRETTO)
PDF
94% (174)
Anastasia: The New Broadway Musical (LIBRETTO)
117 pages
COSMIC CONSCIOUSNESS OF HUMANITY - PROBLEMS OF NEW COSMOGONY (V.P.Kaznacheev,. Л. V. Trofimov.)
PDF
94% (213)
COSMIC CONSCIOUSNESS OF HUMANITY - PROBLEMS OF NEW COSMOGONY (V.P.Kaznacheev,. Л. V. Trofimov.)
212 pages
I Hate You - Don't Leave Me
PDF
80% (54)
I Hate You - Don't Leave Me
6 pages
New Oxford Annotated Bible With Apocrypha (NRSV) 4e, The - Bible
PDF
95% (61)
New Oxford Annotated Bible With Apocrypha (NRSV) 4e, The - Bible
2,440 pages
TDA Birth Certificate Bond Instructions
PDF
97% (284)
TDA Birth Certificate Bond Instructions
4 pages
Complaint - Ventura V Combs
PDF
91% (11)
Complaint - Ventura V Combs
35 pages
The Secret Language of Attraction
PDF
86% (107)
The Secret Language of Attraction
278 pages
How To Develop and Write A Grant Proposal
PDF
83% (542)
How To Develop and Write A Grant Proposal
17 pages
Supreme Mathematics
PDF
80% (25)
Supreme Mathematics
1 page
Penis Enlargement Secret
PDF
60% (124)
Penis Enlargement Secret
12 pages
Workbook For The Body Keeps The Score
PDF
88% (52)
Workbook For The Body Keeps The Score
111 pages
Blue Beam Project
PDF
70% (20)
Blue Beam Project
3 pages
CPN Tut
PDF
95% (20)
CPN Tut
23 pages
Donald Trump & Jeffrey Epstein Rape Lawsuit and Affidavits
PDF
83% (1016)
Donald Trump & Jeffrey Epstein Rape Lawsuit and Affidavits
13 pages
PussyPrayers PDF
PDF
80% (110)
PussyPrayers PDF
108 pages
KamaSutra Positions
PDF
78% (69)
KamaSutra Positions
55 pages
KamaSutra Positions
PDF
68% (84)
KamaSutra Positions
55 pages
Into The Wild Shadow Work Journal PDF n1cr4g
PDF
96% (27)
Into The Wild Shadow Work Journal PDF n1cr4g
79 pages
7 Hermetic Principles
PDF
93% (30)
7 Hermetic Principles
3 pages
27 Feedback Mechanisms Pogil Key
PDF
77% (13)
27 Feedback Mechanisms Pogil Key
6 pages
Frank Hammond - List of Demons
PDF
92% (92)
Frank Hammond - List of Demons
3 pages
Phone Codes
PDF
78% (27)
Phone Codes
5 pages
36 Questions That Lead To Love
PDF
91% (35)
36 Questions That Lead To Love
3 pages
Sample Mental Health Progress Note
PDF
96% (47)
Sample Mental Health Progress Note
3 pages
How 2 Setup Trust
PDF
97% (307)
How 2 Setup Trust
3 pages
2025 MandateForLeadership FULL
PDF
70% (10)
2025 MandateForLeadership FULL
920 pages
How To Kiss A Woman's Breast
PDF
60% (114)
How To Kiss A Woman's Breast
14 pages
House of Leaves - Mark Z Danielewski
PDF
80% (20)
House of Leaves - Mark Z Danielewski
750 pages
Singer's Anthology Master Song and Show Index 2008 PDF
PDF
37% (43)
Singer's Anthology Master Song and Show Index 2008 PDF
38 pages
(Psilocybin) How To Grow Magic Mushrooms A Simple Psilocybe Cubensis Growing Technique PDF
PDF
75% (8)
(Psilocybin) How To Grow Magic Mushrooms A Simple Psilocybe Cubensis Growing Technique PDF
48 pages
Cellular Communication POGIL
PDF
80% (10)
Cellular Communication POGIL
5 pages
36 Questions To Fall in Love 1
PDF
97% (32)
36 Questions To Fall in Love 1
2 pages
Lundy - Why Does He Do That PDF
PDF
79% (42)
Lundy - Why Does He Do That PDF
1,020 pages
100 Questions To Ask Your Partner
PDF
80% (35)
100 Questions To Ask Your Partner
2 pages
The 36 Questions That Lead To Love - The New York Times
PDF
94% (34)
The 36 Questions That Lead To Love - The New York Times
3 pages
25 Most Valuable US Pennies
PDF
94% (16)
25 Most Valuable US Pennies
4 pages
Encyclopedia of Herbal Medicine - 3rd Edition (DK Publishing) (2016)
PDF
99% (162)
Encyclopedia of Herbal Medicine - 3rd Edition (DK Publishing) (2016)
338 pages
Satanic Calendar
PDF
25% (56)
Satanic Calendar
4 pages
DBT Assignment Workbook F0220
PDF
100% (65)
DBT Assignment Workbook F0220
218 pages
Do You Like Big Girls V01
PDF
21% (24)
Do You Like Big Girls V01
161 pages
The 36 Questions That Lead To Love - The New York Times
PDF
95% (21)
The 36 Questions That Lead To Love - The New York Times
3 pages
Jeffrey Epstein39s Little Black Book Unredacted PDF
PDF
75% (12)
Jeffrey Epstein39s Little Black Book Unredacted PDF
95 pages
14 Easiest & Hardest Muscles To Build (Ranked With Solutions)
PDF
100% (7)
14 Easiest & Hardest Muscles To Build (Ranked With Solutions)
27 pages
Chart of Seasons and Months Around The World
PDF
83% (35)
Chart of Seasons and Months Around The World
1 page
The Self Confidence Workbook
PDF
96% (104)
The Self Confidence Workbook
139 pages
The Book of Enoch
PDF
100% (80)
The Book of Enoch
265 pages
Starbucks Underfilled Latte Lawsuit
PDF
68% (76)
Starbucks Underfilled Latte Lawsuit
24 pages
How To Come Up With Good Ideas For Startups - The Scribd Story and The Trip Method
PDF
87% (487)
How To Come Up With Good Ideas For Startups - The Scribd Story and The Trip Method
22 pages
ALCHEMIST
PDF
64% (14)
ALCHEMIST
4 pages
1001 Songs
PDF
70% (71)
1001 Songs
1,798 pages
Trademark License Agreement
PDF
79% (382)
Trademark License Agreement
3 pages
The 4 Hour Workweek, Expanded and Updated by Timothy Ferriss - Excerpt
PDF
23% (954)
The 4 Hour Workweek, Expanded and Updated by Timothy Ferriss - Excerpt
38 pages
Zodiac Sign & Their Most Common Addictions
PDF
63% (30)
Zodiac Sign & Their Most Common Addictions
9 pages
DS Project Report
PDF
No ratings yet
DS Project Report
16 pages
Final Incomplete Exam 711 - MA
PDF
No ratings yet
Final Incomplete Exam 711 - MA
14 pages
Detailed Guide Powerful Sift Technique Image Matching Python
PDF
No ratings yet
Detailed Guide Powerful Sift Technique Image Matching Python
12 pages
Article LSD
PDF
No ratings yet
Article LSD
22 pages
Improving Data Association in Vision-Based SLAM
PDF
No ratings yet
Improving Data Association in Vision-Based SLAM
7 pages
IJCRT22A6694
PDF
No ratings yet
IJCRT22A6694
4 pages
Noncompete Agreement
PDF
87% (141)
Noncompete Agreement
2 pages