Introduction: Simple CloudX M633 Digital Stopwatch
In this project, we are going to make a version of a digital clock that can keep a record of hours, minutes and seconds, just like a stopwatch on your mobile phone! We are going to use an LCD to display the time
Step 1: Component Needed
- CloudX M633
- CloudX SoftCard
- LCD Display
- Potentiometer
- Push Button
- Bread Board
- Jumper Wire
- V3 USB cable
- 10k
You can get your component here
Step 2: HARDWARE
Step 1: Fix the LCD display in the bread board and connect to the CloudX M633 Board as per the following
- R/S to pin1
- ENA to pin2
- D4 to pin3
- D5 to pin4
- D6 to pin5
- D7 to pin6
Additionally, wire a 10k pot to +5V and GND, with it's wiper (output) to LCD screens VO pin .
- connect Vss and K to GND
- connect Vdd and A to +5v
- connect R/W to to GND
N.B: A is Anode, K is Cathode
Step 2:
- Fix the first push button(Start and Stop) in the bread board and connect the first leg to 10k and Pin7 of the CloudX Board and the other leg to GND.
- Fix the Second push button(reset) in the breadBoard and connect the first leg to 10k and pin8 of the CloudX Board and the other leg to GND.
Step 3: CODING
Copy this code to your CloudX IDE
<p>#include <CloudX/M633.h><br>#include <CloudX/Lcd.h> #include <Cloudx/stdlib.h></p><p>#define START_PAUSE 7 #define RESET 8 #define START 1 #define PAUSE 0</p><p>char timer[] = "00:00:00:0"; unsigned char HH, MM, SS, mSS,mscount, RFlag=0; bit OmSF=0 , S_PFlag=0 ;</p><p>interrupt TimerOmSD(){</p><p> if (INTCONbits.T0IF) { INTCONbits.T0IF = 0; TMR0 += 60; if (mscount++ == 10) { mscount = 0; OmSF = 1; } } }</p><p>setup(){ //setup here</p><p> pinMode(START_PAUSE , INPUT); pinMode(RESET , INPUT); lcdSetting (1,2,3,4,5,6); lcdCmd(clear); lcdCmd(cursorOff); lcdWriteText(1,1, "CLOUDX STOPWATCH");</p><p>loop(){ //Program here</p><p>if( !readPin(START_PAUSE) ) { if(S_PFlag == START){ delayMs(200); INTCON = 0b00000000; OPTION_REG = 0b00000000; mSS--; }</p><p> if(S_PFlag == PAUSE && RFlag == 1 ){ delayMs(200); INTCON = 0b11100000; OPTION_REG = 0b00000111; }</p><p> if(S_PFlag == PAUSE && RFlag == 0 ){ delayMs(200); INTCON = 0b11100000; OPTION_REG = 0b00000111; TMR0 += 60; mscount=0; OmSF = 0; } S_PFlag = ~S_PFlag; RFlag = 1; }</p><p> if( !readPin(RESET) ){ delayMs(200); HH = 0; MM = 0; SS = 0; mSS = 0; INTCON = 0b00000000; OPTION_REG = 0b00000000; mscount=0; OmSF = 0; RFlag = 0; S_PFlag = PAUSE;</p><p> }</p><p> if (OmSF){ OmSF = ~ OmSF; mSS++; if(mSS==10) SS ++; if(SS==60 )MM++; if(MM==60 )HH++; }</p><p> if(HH==100) HH=0; if(MM==60) MM=0; if(SS==60) SS=0; if(mSS==10) mSS=0; timer[1] = (HH%10) +48; timer[0] = (HH/10) +48; timer[4] = (MM%10) +48; timer[3] = (MM/10) +48; timer[7] = (SS%10) +48; timer[6] = (SS/10) +48; timer[9] = mSS +48; lcdWriteText(2,2, timer);</p><p> } }</p>