90 likes | 174 Views
4-Integrating Peripherals in Embedded Systems (cont.). Using push buttons and switches. Push buttons SW2 to SW5 on the Dragon Board are connected to bits 3 to 0 of PortH When button is pushed, a corresponding bit of Port H is reset. What activity level? Can be enabled/disabled: SW_enable();
E N D
Using push buttons and switches • Push buttons SW2 to SW5 on the Dragon Board are connected to bits 3 to 0 of PortH • When button is pushed, a corresponding bit of Port H is reset. What activity level? • Can be enabled/disabled: • SW_enable(); • Can be checked with C function calls: • SW1_dip(); //returns 8-bit reading of SW1-SW5. Non-blocking • SW2_down(); // true if SW2 is down • SW2_up(); //true if SW2 is up. • Use • while ((PTH & 0x01)==0) //to check if the SW5 is being pressed • { • //…SW5 still pressed • } • //SW5 released
Using switches • There are also 8 DIP switches (sliders) on the Dragon board. • The rightmost 4 switches share the same bits of portH with push buttons. • These switches are intended for use as level-sensitive data inputs to a circuit. • When a switch is in the ON position (away from LCD) it provides a 0 bit on corresponding PORT H bit. • What activity level? • Use: • DDRH=0x00; //Port H inputs • leds_on(~PTH);
Using Keypad • The Dragon board has a 4x4 keypad, connected to Port A. • Scanning is used to minimize interface bits. See pp 29. • Use C function call key_scan(). See example 6.1 • Use C function call get_key(). See example 6.2 • To avoid bouncing: • keypad_enable() • getkey() • wait_keyup() • keyscan()
Using LEDs • The Dragon board provides 8 red LEDs. • You can use C function calls to set/reset LEDs • led_on(int b); //Sets bit b of PORTB High, or on • led_off(int b); //Sets bit b of PORTB Low, or off • leds_on(int h); //Sets bits of all 8 leds according to hexadecimal value h
Seven Segment Display • The Dragon Board has four 7-segment displays. These displays are arranged with the intent of displaying numbers of medium sizes. • Must be enabled/disabled since using same port B of LEDs: • seg7_enable(); • seg7_disable(); • Applying a high logic level to a segment causes it to light up, and applying a low logic level turns it off. • seg7_on(int s, int b); //turns on segment s on 7SEG digit b • What will be the hexadecimal digit coding (assume 0 segment is least significant)? [9 coded as 0x6F] • Use seg7dec(int s, int b); //display hexadecimal value of i on 7SEG digit b
E communications bus R/W RS DB7–DB0 8 microcontroller LCD controller LCD controller • Dragon board has Sanyo DM1623 display of 2x16 characters. • See control signals in pg. 33 and table 7.1 in pg 34
Using LCD • Use: • char * msg; • msg=“Dragon12-Plus”; • lcd_init(); //set configurations • set_lcd_addr(0x01);//for first line • type_lcd(msg); • set_lcd_addr(0x45); //for second line
Next • 3/03/2010 Lab1: CodeWarrior Tutorial with examples • 3/05/2010 Lab2: Dealing with individual LEDs and Delay via PLL • 03/08/2010 - 03/12/2010Spring break, NO classes • 25 03/15/2010 Lab3: Push-buttons, Dip Switches, and Keypad • 03/17/2010 Lab 4: LCD and Serial Communication Interface (SCI)/UART • Answer questions and submit code in the lab reports. Show instructor when finished. Lab reports are due a week after each assignment (skipping spring break).