90 likes | 224 Vues
This guide covers the integration of various peripherals with the Dragon Board, detailing how to use push buttons, switches, keypads, LEDs, seven-segment displays, and an LCD. Learn to connect and control push buttons SW2 to SW5, set levels using DIP switches, interface with a 4x4 keypad via function calls, and manage 8 red LEDs and four seven-segment displays. Additionally, it provides instructions for initializing and sending data to the Sanyo DM1623 LCD. Perfect for developers seeking to enhance their embedded systems with various input and output options.
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 • 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 page 29. • Use C function call key_scan(). See listing 6.1 • Use C function call get_key(). See listing 6.3 • 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 i, 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 • See figure 4.7(d), pp 96 • Void WriteChar (char c) { • RS=0 • /*indicate control being sent*/ • DATA_BUS=0x01;//Clear Display • /*toggle LCD Enable, with delay*/ • EnableLCD (45); • //…other controls • /*indicate data being sent */ • RS=1; • /*send data to LCD */ • DATA_BUS=c; • /*toggle LCD Enable, with delay*/ • EnableLCD (45); • }
Using LCD • For Dragon12 we may 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