========================================================= ' File........Data Entry Demo ' Purpose.....This test code for JP SerLCD, JP KeyPad and JP Module ' Auther......Jianping Sun ' Email.......JP@JianpingUSA.com ' WebSite.....www.JianpingUSA.com ' Started.....Jan. 08, 2010 ' Updated..... ' Warning: Use it at your own risk!!! '======================================================== ' {$STAMP BS2sx} ' {$PBASIC 2.5} 'pin0 -----> SerLCD Rx 'pin1 -----> SerLCD Tx 'pin2 -----> JP Module Rx 'pin3 -----> JP Module State 'pin4 -----> JP Module ReSet 'pin6 -----> SerKeyPad Tx (Connected 10k pull up resister) 'pin7 -----> SerKeyPad Rx (Connected 10k pull up resister) ' 4 x 4 KeyPad: ' 1 2 3 < < move cursor back for deledt wrong number ' 4 5 6 R R for spare ' 7 8 9 E E Enter. ' - 0 : . - for date (like 01-08-2010), : for time (like 10:10:10) ' It will create a data file -- "DataFile.csv". The file can be read and edited by ' Microsoft Office Excel. ' 1) First input Date: 01-8-2010 Press Enter. System will add "," to data. ' 2) Second input Time: 10:10:10 Press Enter. System will add "," to data. ' 3) Input Customer ID: xxxxxxxx Press Enter. System will add "," to data. ' 4) Input Reading number xxxxxxxx Press Enter. System will add Ascii code 10 to ' data, then record data to SD Card. SOUT PIN 0 ' serial output for JP SerLCD S_IN PIN 1 ' serial input for JP SerLCD JP_OUT PIN 2 ' serial output for JP Module Data Trans StatePin PIN 3 ' Check JP Module state ResetPin PIN 4 ' Reset JP Module SOUT_KP PIN 6 ' Serial output for JP SerKeypad SIN_KP PIN 7 ' Serial input for JP Serkeypad SerData VAR Byte Data_Array VAR Byte(16) ' Serial Data Array i VAR Byte SD_Check VAR Byte ' SD Card check counter #SELECT $STAMP #CASE BS2, BS2E, BS2PE T1200 CON 813 T2400 CON 396 T4800 CON 188 T9600 CON 84 T19K2 CON 32 #CASE BS2SX, BS2P T1200 CON 2063 T2400 CON 1021 T4800 CON 500 T9600 CON 240 T19K2 CON 110 #CASE BS2PX T1200 CON 3313 T2400 CON 1646 T4800 CON 813 T9600 CON 396 T19K2 CON 188 #ENDSELECT Inverted CON $4000 Baud CON T4800 '+ Inverted '============================================================== ' Main program '============================================================== Main: SD_Check = 0 PAUSE 100 GOSUB FirstScreen PAUSE 100 GOSUB OpenDataFile PAUSE 1000 ReEnterData: GOSUB EnterDate PAUSE 500 GOSUB EnterTime PAUSE 500 GOSUB EnterID PAUSE 500 GOSUB EnterReading PAUSE 1500 GOSUB ReEnterData SD_Card_Err: END '============================================================== ' First Screen '============================================================== FirstScreen: SEROUT SOUT, Baud, [17, 19] ' Clear screen SEROUT SOUT_KP, Baud, ["c123<456R789E-0:.x"] ' Set project key function PAUSE 5 SEROUT SOUT, Baud, [" JianpingUSA "] SEROUT SOUT, Baud, [128 + 64] ' Move cursor to 2nd row PAUSE 5 SEROUT SOUT, Baud, [" Data Enter "] SEROUT SOUT, Baud, [128 + 16] ' Move cursor to 3rd row PAUSE 5 SEROUT SOUT, Baud, [" Project demo "] RETURN '============================================================ ' Open Data File '============================================================ OpenDataFile: IF SD_Check > 3 THEN 'If system can't open file, please check mmc card. SEROUT SOUT, Baud, [17] ' Clear screen PAUSE 5 SEROUT SOUT, Baud, ["MMC selftest Err"] PAUSE 5 SEROUT SOUT, Baud, [128 + 64] ' Move cursor TO 2nd row PAUSE 5 SEROUT SOUT, Baud, ["Check SD Card or"] PAUSE 5 SEROUT SOUT, Baud, [128 + 16] ' Move cursor TO 3rd row SEROUT SOUT, Baud, ["write protected."] GOTO SD_Card_Err ENDIF OUTPUT ResetPin ResetPin = 0 PAUSE 200 ResetPin = 1 PAUSE 200 SEROUT JP_OUT, Baud, ["MA!"] 'Open data file PAUSE 500 SEROUT JP_OUT, Baud, ["DataFile.CSV!!"] 'Input the File Name PAUSE 500 IF StatePin = 0 THEN 'If Datafile can't be found SD_Check = SD_Check + 1 ResetPin = 0 PAUSE 200 ResetPin = 1 PAUSE 200 SEROUT JP_OUT, Baud, ["MC!"] 'Create a new data file PAUSE 500 SEROUT JP_OUT, Baud, ["DataFile.CSV!!"] 'Input the File Name PAUSE 1000 SEROUT JP_OUT, Baud, ["Date,Time,Cust_ID,Reading", CR,"!!"] 'Data title PAUSE 1000 GOSUB OpenDataFile ENDIF RETURN '============================================================== ' Enter Date ' Note: Date and Time can be provied by DS1307 '============================================================== EnterDate: SEROUT SOUT, Baud, [17] ' Clear screen PAUSE 5 SEROUT SOUT, Baud, [" Please input "] PAUSE 5 SEROUT SOUT, Baud, [128 + 64] ' Move cursor TO 2nd row PAUSE 5 SEROUT SOUT, Baud, [" Current Date: "] PAUSE 5 SEROUT SOUT, Baud, [128 + 16, 20] ' Move cursor TO 3rd row GOSUB Clean_Array FOR i = 0 TO 15 SERIN 7, Baud, [SerData] ' From Kaypad SELECT SerData CASE 45 TO 58 'if get 1234567890: SEROUT SOUT, Baud, [SerData] 'To Dispaly Data_Array(i) = SerData CASE 60 ' if get < SEROUT SOUT, Baud, [22,32,22] ' Move cursor to left i = i - 2 Data_Array(i+1) = 0 CASE 62 ' if get > SEROUT SOUT, Baud, [23] ' Move cursor to right Data_Array(i) = 32 ENDSELECT IF SerData = 69 THEN 'if get E Data_Array(i) = 0 SEROUT JP_OUT, Baud, [STR Data_Array\10] PAUSE 5 SEROUT JP_OUT, Baud, [44] GOTO EndEnterDate ENDIF PAUSE 5 NEXT EndEnterDate: RETURN '============================================================== ' Enter Time '============================================================== EnterTime: SEROUT SOUT, Baud, [17] ' Clear screen PAUSE 5 SEROUT SOUT, Baud, [" Please input "] PAUSE 5 SEROUT SOUT, Baud, [128 + 64] ' Move cursor TO 2nd row PAUSE 5 SEROUT SOUT, Baud, [" Current Time: "] PAUSE 5 SEROUT SOUT, Baud, [128 + 16, 20] ' Move cursor TO 3rd row GOSUB Clean_Array FOR i = 0 TO 15 SERIN 7, Baud, [SerData] ' From Kaypad SELECT SerData CASE 45 TO 58 'if get 1234567890: SEROUT SOUT, Baud, [SerData] 'To Dispaly Data_Array(i) = SerData CASE 60 ' if get < SEROUT SOUT, Baud, [22,32,22] ' Move cursor to left i = i - 2 Data_Array(i+1) = 0 CASE 62 ' if get > SEROUT SOUT, Baud, [23] ' Move cursor to right Data_Array(i) = 32 ENDSELECT IF SerData = 69 THEN 'if get E Data_Array(i) = 0 SEROUT JP_OUT, Baud, [STR Data_Array\10] PAUSE 5 SEROUT JP_OUT, Baud, [44] GOTO EndEnterTime ENDIF PAUSE 5 NEXT EndEnterTime: RETURN '============================================================== ' Enter Customer ID '============================================================== EnterID: SEROUT SOUT, Baud, [17] ' Clear screen PAUSE 5 SEROUT SOUT, Baud, [" Please input "] PAUSE 5 SEROUT SOUT, Baud, [128 + 64] ' Move cursor TO 2nd row PAUSE 5 SEROUT SOUT, Baud, [" Customer ID: "] PAUSE 5 SEROUT SOUT, Baud, [128 + 16, 20] ' Move cursor TO 3rd row GOSUB Clean_Array FOR i = 0 TO 15 SERIN 7, Baud, [SerData] ' From Kaypad SELECT SerData CASE 45 TO 58 'if get 1234567890: SEROUT SOUT, Baud, [SerData] 'To Dispaly Data_Array(i) = SerData CASE 60 ' if get < SEROUT SOUT, Baud, [22,32,22] ' Move cursor to left i = i - 2 Data_Array(i+1) = 0 CASE 62 ' if get > SEROUT SOUT, Baud, [23] ' Move cursor to right Data_Array(i) = 32 ENDSELECT IF SerData = 69 THEN 'if get E Data_Array(i) = 0 SEROUT JP_OUT, Baud, [STR Data_Array\10] PAUSE 5 SEROUT JP_OUT, Baud, [44] GOTO EndEnterID ENDIF PAUSE 5 NEXT EndEnterID: RETURN '============================================================== ' Enter Customer Reading '============================================================== EnterReading: SEROUT SOUT, Baud, [17] ' Clear screen PAUSE 5 SEROUT SOUT, Baud, [" Please input "] PAUSE 5 SEROUT SOUT, Baud, [128 + 64] ' Move cursor TO 2nd row PAUSE 5 SEROUT SOUT, Baud, [" Reading number:"] PAUSE 5 SEROUT SOUT, Baud, [128 + 16] GOSUB Clean_Array FOR i = 0 TO 15 SERIN 7, Baud, [SerData] ' From Kaypad SELECT SerData CASE 45 TO 58 'if get 1234567890: SEROUT SOUT, Baud, [SerData] 'To Dispaly Data_Array(i) = SerData CASE 60 ' if get < SEROUT SOUT, Baud, [22,32,22] ' Move cursor to left i = i - 2 Data_Array(i+1) = 0 CASE 62 ' if get > SEROUT SOUT, Baud, [23] ' Move cursor to right i = i + 1 Data_Array(i) = 32 ENDSELECT IF SerData = 69 THEN 'if get E Data_Array(i) = 0 SEROUT JP_OUT, Baud, [STR Data_Array\10] PAUSE 5 SEROUT JP_OUT, Baud, [10, 33,33] GOTO ReEnterData ENDIF PAUSE 5 NEXT RETURN ' Move cursor TO 3rd row '============================================================== ' Clean Serial Data Array '============================================================== Clean_Array: FOR i = 0 TO 15 Data_Array(i) = 0 NEXT RETURN