In this case display is 4 LEDs connected on output Port in active low configuration. and Input is two switches connected at the input. If SW1 is pressed the binary number represented by LEDs Decreases by 1 and If SW2 is pressed the number represented by LEDs increases by 1. Overflow and underflow of count is prohibited. Due to mechanical nature of input switches.It is connected in the active low configuration. The switch connected at the input has bouncing period of 5ms to 20ms. Please account this, for reliable operation of System "

Dependencies:   mbed

Committer:
naray23
Date:
Wed Aug 16 13:03:49 2017 +0000
Revision:
0:9399ddeb3b2f
First Version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
naray23 0:9399ddeb3b2f 1 #include "mbed.h"
naray23 0:9399ddeb3b2f 2
naray23 0:9399ddeb3b2f 3 enum HW_State{RST,RUN};
naray23 0:9399ddeb3b2f 4
naray23 0:9399ddeb3b2f 5 DigitalOut Reset(PTD4);
naray23 0:9399ddeb3b2f 6 BusIn Input(PTA12,PTA4,PTA5,PTC8);
naray23 0:9399ddeb3b2f 7 DigitalOut SW1(PTA13);
naray23 0:9399ddeb3b2f 8 DigitalOut SW2(PTD5);
naray23 0:9399ddeb3b2f 9
naray23 0:9399ddeb3b2f 10 Serial pc(USBTX,USBRX);
naray23 0:9399ddeb3b2f 11
naray23 0:9399ddeb3b2f 12 enum HW_State FRDM_State;
naray23 0:9399ddeb3b2f 13 int Program_State[3];
naray23 0:9399ddeb3b2f 14 unsigned char command;
naray23 0:9399ddeb3b2f 15 char curr_state;
naray23 0:9399ddeb3b2f 16 char prev_state;
naray23 0:9399ddeb3b2f 17 char inc_btn_state;
naray23 0:9399ddeb3b2f 18 char dec_btn_state;
naray23 0:9399ddeb3b2f 19 char counter;
naray23 0:9399ddeb3b2f 20
naray23 0:9399ddeb3b2f 21 void Check_error(char led_state,char btn_state)
naray23 0:9399ddeb3b2f 22 {
naray23 0:9399ddeb3b2f 23 if(led_state == btn_state) //At Start or at Roll over
naray23 0:9399ddeb3b2f 24 {
naray23 0:9399ddeb3b2f 25 Program_State[0] = 0;
naray23 0:9399ddeb3b2f 26 }
naray23 0:9399ddeb3b2f 27 else
naray23 0:9399ddeb3b2f 28 {
naray23 0:9399ddeb3b2f 29 Program_State[0] = -1;
naray23 0:9399ddeb3b2f 30 }
naray23 0:9399ddeb3b2f 31 }
naray23 0:9399ddeb3b2f 32
naray23 0:9399ddeb3b2f 33 void Inc_Btn()
naray23 0:9399ddeb3b2f 34 {
naray23 0:9399ddeb3b2f 35 SW1=1;
naray23 0:9399ddeb3b2f 36 SW1=0;
naray23 0:9399ddeb3b2f 37 wait_ms(rand()%5);
naray23 0:9399ddeb3b2f 38 SW1=1;
naray23 0:9399ddeb3b2f 39 wait_ms(rand()%5);
naray23 0:9399ddeb3b2f 40 SW1=0;
naray23 0:9399ddeb3b2f 41 wait_ms(rand()%10);
naray23 0:9399ddeb3b2f 42 SW1=1;
naray23 0:9399ddeb3b2f 43 wait_ms(rand()%5);
naray23 0:9399ddeb3b2f 44 SW1=0;
naray23 0:9399ddeb3b2f 45 wait_ms(50);
naray23 0:9399ddeb3b2f 46 wait_ms(rand()%100);
naray23 0:9399ddeb3b2f 47 SW1=1;
naray23 0:9399ddeb3b2f 48
naray23 0:9399ddeb3b2f 49 }
naray23 0:9399ddeb3b2f 50 void Dec_Btn()
naray23 0:9399ddeb3b2f 51 {
naray23 0:9399ddeb3b2f 52 SW1=1;
naray23 0:9399ddeb3b2f 53 SW1=0;
naray23 0:9399ddeb3b2f 54 wait_ms(rand()%5);
naray23 0:9399ddeb3b2f 55 SW1=1;
naray23 0:9399ddeb3b2f 56 wait_ms(rand()%5);
naray23 0:9399ddeb3b2f 57 SW1=0;
naray23 0:9399ddeb3b2f 58 wait_ms(rand()%10);
naray23 0:9399ddeb3b2f 59 SW1=1;
naray23 0:9399ddeb3b2f 60 wait_ms(rand()%5);
naray23 0:9399ddeb3b2f 61 SW1=0;
naray23 0:9399ddeb3b2f 62 wait_ms(50);
naray23 0:9399ddeb3b2f 63 wait_ms(rand()%100);
naray23 0:9399ddeb3b2f 64 SW1=1;
naray23 0:9399ddeb3b2f 65
naray23 0:9399ddeb3b2f 66 }
naray23 0:9399ddeb3b2f 67
naray23 0:9399ddeb3b2f 68 int main() {
naray23 0:9399ddeb3b2f 69 Reset = 1;//Need to find what is the reset Methdology
naray23 0:9399ddeb3b2f 70 FRDM_State=RST;
naray23 0:9399ddeb3b2f 71 prev_state =0;
naray23 0:9399ddeb3b2f 72 Input.mode(PullNone);
naray23 0:9399ddeb3b2f 73 SW1=1;
naray23 0:9399ddeb3b2f 74 SW2=1;
naray23 0:9399ddeb3b2f 75 inc_btn_state=0;
naray23 0:9399ddeb3b2f 76 while(1) {
naray23 0:9399ddeb3b2f 77 if(pc.readable())
naray23 0:9399ddeb3b2f 78 {
naray23 0:9399ddeb3b2f 79 command=pc.getc();
naray23 0:9399ddeb3b2f 80 switch(command)
naray23 0:9399ddeb3b2f 81 {
naray23 0:9399ddeb3b2f 82 case 's':
naray23 0:9399ddeb3b2f 83 case 'S': Reset =0;
naray23 0:9399ddeb3b2f 84 FRDM_State=RUN;
naray23 0:9399ddeb3b2f 85
naray23 0:9399ddeb3b2f 86 break;
naray23 0:9399ddeb3b2f 87 case 'x':
naray23 0:9399ddeb3b2f 88 case 'X': Reset =1;
naray23 0:9399ddeb3b2f 89 FRDM_State=RST;
naray23 0:9399ddeb3b2f 90 break;
naray23 0:9399ddeb3b2f 91
naray23 0:9399ddeb3b2f 92 case 'd':
naray23 0:9399ddeb3b2f 93 case 'D': pc.printf("%d,%d\n\r",Program_State[0],Program_State[1]);
naray23 0:9399ddeb3b2f 94 break;
naray23 0:9399ddeb3b2f 95
naray23 0:9399ddeb3b2f 96 }
naray23 0:9399ddeb3b2f 97 }
naray23 0:9399ddeb3b2f 98 if(FRDM_State == RUN)
naray23 0:9399ddeb3b2f 99 {
naray23 0:9399ddeb3b2f 100 for(counter =0; counter <20;counter++)
naray23 0:9399ddeb3b2f 101 {
naray23 0:9399ddeb3b2f 102 Inc_Btn();
naray23 0:9399ddeb3b2f 103 if(inc_btn_state <= 15)
naray23 0:9399ddeb3b2f 104 inc_btn_state++;
naray23 0:9399ddeb3b2f 105 curr_state=Input & Input.mask();
naray23 0:9399ddeb3b2f 106 Check_error(curr_state,inc_btn_state);
naray23 0:9399ddeb3b2f 107 wait(0.2f);
naray23 0:9399ddeb3b2f 108 }
naray23 0:9399ddeb3b2f 109 for(counter =0; counter <20;counter++)
naray23 0:9399ddeb3b2f 110 {
naray23 0:9399ddeb3b2f 111 Dec_Btn();
naray23 0:9399ddeb3b2f 112 if(inc_btn_state != 0)
naray23 0:9399ddeb3b2f 113 inc_btn_state--;
naray23 0:9399ddeb3b2f 114 curr_state=Input & Input.mask();
naray23 0:9399ddeb3b2f 115 Check_error(curr_state,inc_btn_state);
naray23 0:9399ddeb3b2f 116 wait(0.2f);
naray23 0:9399ddeb3b2f 117 }
naray23 0:9399ddeb3b2f 118 }
naray23 0:9399ddeb3b2f 119
naray23 0:9399ddeb3b2f 120 }
naray23 0:9399ddeb3b2f 121 }
naray23 0:9399ddeb3b2f 122
naray23 0:9399ddeb3b2f 123