Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Copyright by Adam Kinsman, Henry Ko and Nicola Nicolici
- // Developed for the Embedded Systems course (COE4DS4)
- // Department of Electrical and Computer Engineering
- // McMaster University
- // Ontario, Canada
- #include "io.h"
- #include "system.h"
- #include "alt_types.h"
- #include "sys/alt_stdio.h"
- //#include <stdio.h>
- alt_u16 disp_seven_seg(alt_u8 val) {
- switch (val) {
- case 0 : return 0x40;
- case 1 : return 0x79;
- case 2 : return 0x24;
- case 3 : return 0x30;
- case 4 : return 0x19;
- case 5 : return 0x12;
- case 6 : return 0x02;
- case 7 : return 0x78;
- case 8 : return 0x00;
- case 9 : return 0x18;
- case 10 : return 0x08;
- case 11 : return 0x03;
- case 12 : return 0x46;
- case 13 : return 0x21;
- case 14 : return 0x06;
- case 15 : return 0x0e;
- default : return 0x7f;
- }
- }
- int main()
- {
- alt_8 i;
- alt_8 j;
- alt_8 k;
- alt_u32 switch_val;
- alt_putstr("Experiment 2!\n");
- //j = 2;
- // alt_printf("%x", j);
- /* Event loop never exits. */
- while (1) {
- switch_val = IORD(SWITCH_I_BASE, 0);
- IOWR(LED_RED_O_BASE, 0, switch_val);
- if (switch_val == 0) {
- IOWR(SEVEN_SEGMENT_N_O_1_BASE, 0,
- disp_seven_seg(16));
- IOWR(SEVEN_SEGMENT_N_O_0_BASE, 0,
- disp_seven_seg(16));
- } else {
- // THIS IS FIRST PART
- for (i = 17; i >= 0; i--) {
- if (((switch_val >> i) & 0x1) != 0){
- j = j+1;
- }
- // alt_printf("%x", j);
- }
- if(j >= 9){
- // THIS IS THE SECOND PART INSIDE THE FIRST PART
- // IF SWITCH 17 IS ON AND AT LEAST ONE OTHER SWITCH IS LOW,
- // THEN DISPLAY BINARY OF MOST SIGNIFICANT SWITCH THAT IS LOW
- if((switch_val >= 0x20000) && (switch_val < 0x3FFFF)){
- for (k = 16; k >= 0; k--) {
- if (((switch_val >> k) & 0x1) == 0) {
- IOWR(LED_GREEN_O_BASE, 0, 224+k);
- k = 0;
- }
- }
- }
- // IF SWITCH 17 IS LOW AND SWITCH 16 IS HIGH THEN DISPLAY
- // BINARY OF LEAST SIGNIFICANT SWITCH THAT IS LOW
- else if((switch_val >= 0x10000) && (switch_val < 0x20000)){
- for (k = 0; k <= 15; k++) {
- if (((switch_val >> k) & 0x1) == 0) {
- IOWR(LED_GREEN_O_BASE, 0, 224+k);
- k = 15;
- }
- }
- }
- // IF ALL SWITCHES ARE ON THEN ALL GREEN LED'S ARE ON
- else if(switch_val == 0x3FFFF){
- IOWR(LED_GREEN_O_BASE, 0, 255);
- }
- // IF SWITCH 17 AND 16 ARE BOTH LOW THEN DISPLAY BINARY
- // OF THE NUMBER OF SWITCHES THAT ARE HIGH
- else if(switch_val <= 0xFFFF){
- IOWR(LED_GREEN_O_BASE, 0, 224+j);
- }
- else {
- IOWR(LED_GREEN_O_BASE, 0, 224);
- }
- }
- //------------------------------------------------------------------------------------------------------------------------
- // THIS IS THE SECOND PART
- // IF SWITCH 17 IS ON AND AT LEAST ONE OTHER SWITCH IS LOW,
- // THEN DISPLAY BINARY OF MOST SIGNIFICANT SWITCH THAT IS LOW
- else if(switch_val >= 0x20000){
- for (k = 16; k >= 0; k--) {
- if (((switch_val >> k) & 0x1) == 0) {
- IOWR(LED_GREEN_O_BASE, 0, k);
- k = 0;
- }
- }
- }
- // IF SWITCH 17 IS LOW AND SWITCH 16 IS HIGH THEN DISPLAY
- // BINARY OF LEAST SIGNIFICANT SWITCH THAT IS LOW
- else if((switch_val >= 0x10000) && (switch_val < 0x20000)){
- for (k = 0; k <= 15; k++) {
- if (((switch_val >> k) & 0x1) == 0) {
- IOWR(LED_GREEN_O_BASE, 0, k);
- k = 15;
- }
- }
- }
- // IF ALL SWITCHES ARE ON THEN ALL GREEN LED'S ARE ON
- else if(switch_val == 0x3FFFF){
- IOWR(LED_GREEN_O_BASE, 0, 255);
- }
- // IF SWITCH 17 AND 16 ARE BOTH LOW THEN DISPLAY BINARY
- // OF THE NUMBER OF SWITCHES THAT ARE HIGH
- else if(switch_val <= 0xFFFF){
- IOWR(LED_GREEN_O_BASE, 0, j);
- }
- else {
- IOWR(LED_GREEN_O_BASE, 0, 0);
- }
- j = 0;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement