An attempt tp port Arduino ST1201 code to the KL25Z

Dependencies:   mbed

Committer:
n5kzw
Date:
Mon Nov 25 21:02:23 2013 +0000
Revision:
0:76906da6c1ad
First try

Who changed what in which revision?

UserRevisionLine numberNew contents of line
n5kzw 0:76906da6c1ad 1 #include "KTMS1201.h"
n5kzw 0:76906da6c1ad 2 #include "mbed.h"
n5kzw 0:76906da6c1ad 3 #include "string.h"
n5kzw 0:76906da6c1ad 4
n5kzw 0:76906da6c1ad 5 //Constants for functions to ease use of display printing
n5kzw 0:76906da6c1ad 6 static int anCount=39; // One less than actual since index base is 0
n5kzw 0:76906da6c1ad 7 static int anConst={_A,_B,_C,_D,_E,_F,_G,_H,_I,_L,_M,_N,_O,_P,_Q,_R,_S,_T,_U,_V,_W,_X,_Y,_Z,_1,_2,_3,_4,_5,_6,_7,_8,_9,_0,_,_DASH,_DEGREE};
n5kzw 0:76906da6c1ad 8 static int anHumanConst={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0',' ','-','*'};
n5kzw 0:76906da6c1ad 9
n5kzw 0:76906da6c1ad 10 // Define pin assignments
n5kzw 0:76906da6c1ad 11 DigitalOut LcdnSck(PTC12); // not Serial Clock
n5kzw 0:76906da6c1ad 12 DigitalOut LcdSi(PTC13); // serial data
n5kzw 0:76906da6c1ad 13 DigitalOut LcdCnD(PTC17); // select Command or Data mode
n5kzw 0:76906da6c1ad 14 DigitalOut LcdnRes(PTC15); // not Reset
n5kzw 0:76906da6c1ad 15 DigitalOut LcdnCs(PTC16); // not Chip Select
n5kzw 0:76906da6c1ad 16
n5kzw 0:76906da6c1ad 17 void ktmshiftOut(int val);
n5kzw 0:76906da6c1ad 18
n5kzw 0:76906da6c1ad 19 void ktmPrnNumb(int n, int p, int d, int l)
n5kzw 0:76906da6c1ad 20 /*
n5kzw 0:76906da6c1ad 21 ktmPrnNumb
n5kzw 0:76906da6c1ad 22 This function demonstrates how to output data and place decimal points in a specific place
n5kzw 0:76906da6c1ad 23 */
n5kzw 0:76906da6c1ad 24 {
n5kzw 0:76906da6c1ad 25 // n is the number to be printed
n5kzw 0:76906da6c1ad 26 // p is the position of the LSB from the right, starting at 0
n5kzw 0:76906da6c1ad 27 // d is the number of digits to the right of the decimal point
n5kzw 0:76906da6c1ad 28 // l is the number of digits in n
n5kzw 0:76906da6c1ad 29 int nt;
n5kzw 0:76906da6c1ad 30 int i;
n5kzw 0:76906da6c1ad 31 int j=1;
n5kzw 0:76906da6c1ad 32 int r=0;
n5kzw 0:76906da6c1ad 33 LcdCnD = 1; // Put in command mode
n5kzw 0:76906da6c1ad 34 LcdnCs= 0; // Select LCD
n5kzw 0:76906da6c1ad 35 wait(1);
n5kzw 0:76906da6c1ad 36 ktmshiftOut(_Decode);
n5kzw 0:76906da6c1ad 37 ktmshiftOut(_LoadPtr+p*2);
n5kzw 0:76906da6c1ad 38 LcdCnD = 0; // Put in data mode
n5kzw 0:76906da6c1ad 39 LcdnCs = 0;
n5kzw 0:76906da6c1ad 40 wait(1);
n5kzw 0:76906da6c1ad 41 nt = n;
n5kzw 0:76906da6c1ad 42 for (i=0;i<1;i++) // display numbers (in reverse order)
n5kzw 0:76906da6c1ad 43 {
n5kzw 0:76906da6c1ad 44 ktmshiftOut(nt%10);
n5kzw 0:76906da6c1ad 45 nt=nt/10;
n5kzw 0:76906da6c1ad 46 }
n5kzw 0:76906da6c1ad 47 j=p*2+d*2;
n5kzw 0:76906da6c1ad 48 if (d>0) // set decimal point
n5kzw 0:76906da6c1ad 49 {
n5kzw 0:76906da6c1ad 50 LcdCnD = 1; // put in command mode
n5kzw 0:76906da6c1ad 51 LcdnCs = 0; // Select LCD
n5kzw 0:76906da6c1ad 52 wait(1);
n5kzw 0:76906da6c1ad 53 ktmshiftOut(_NoDecode);
n5kzw 0:76906da6c1ad 54 ktmshiftOut(_LoadPtr+j);
n5kzw 0:76906da6c1ad 55 ktmshiftOut(_SetDp);
n5kzw 0:76906da6c1ad 56 wait(1);
n5kzw 0:76906da6c1ad 57 }
n5kzw 0:76906da6c1ad 58 LcdnCs = 1; // Deselect LCD to display data
n5kzw 0:76906da6c1ad 59 wait(1);
n5kzw 0:76906da6c1ad 60 }
n5kzw 0:76906da6c1ad 61
n5kzw 0:76906da6c1ad 62 void ktmInit()
n5kzw 0:76906da6c1ad 63 /*
n5kzw 0:76906da6c1ad 64 ktmInit
n5kzw 0:76906da6c1ad 65 This function set the display up for commands
n5kzw 0:76906da6c1ad 66 */
n5kzw 0:76906da6c1ad 67 {
n5kzw 0:76906da6c1ad 68 /* pinMode(LcdnSck, OUTPUT);
n5kzw 0:76906da6c1ad 69 pinMode(LcdSi, OUTPUT);
n5kzw 0:76906da6c1ad 70 pinMode(LcdCnD, OUTPUT);
n5kzw 0:76906da6c1ad 71 pinMode(LcdnRes, OUTPUT);
n5kzw 0:76906da6c1ad 72 pinMode(LcdnBus, INPUT);
n5kzw 0:76906da6c1ad 73 pinMode(LcdnCs, OUTPUT); */
n5kzw 0:76906da6c1ad 74 // Run these once at startup/reset to initialize the LCD module
n5kzw 0:76906da6c1ad 75 LcdCnD = 1; // Put LCD in command mode
n5kzw 0:76906da6c1ad 76 LcdnCs = 1; // deselect KTM-S1201
n5kzw 0:76906da6c1ad 77 LcdnSck = 1;
n5kzw 0:76906da6c1ad 78 LcdSi = 1;
n5kzw 0:76906da6c1ad 79 LcdnRes = 0; // Reset LCD
n5kzw 0:76906da6c1ad 80 wait(1);
n5kzw 0:76906da6c1ad 81 // Set up command mode
n5kzw 0:76906da6c1ad 82 ktmCommand(_Mode);
n5kzw 0:76906da6c1ad 83 ktmCommand(_USync);
n5kzw 0:76906da6c1ad 84 }
n5kzw 0:76906da6c1ad 85
n5kzw 0:76906da6c1ad 86 void ktmWriteString(char ktmMessage)
n5kzw 0:76906da6c1ad 87 /*
n5kzw 0:76906da6c1ad 88 ktmWriteString(<Message>)
n5kzw 0:76906da6c1ad 89 This function will take a text string and convert it into a message for the display.
n5kzw 0:76906da6c1ad 90 You only need to send a message, it will space out the characters.
n5kzw 0:76906da6c1ad 91 */
n5kzw 0:76906da6c1ad 92 {
n5kzw 0:76906da6c1ad 93 char TextString[12}={_,_,_,_,_,_,_,_,_,_,_,_}; // Ultimate buffer
n5kzw 0:76906da6c1ad 94 StringMessage=ktmMessage;
n5kzw 0:76906da6c1ad 95 message+=" "; // pad to 12
n5kzw 0:76906da6c1ad 96 message=message.substring(0,12); // Make sure we only have 12 characters
n5kzw 0:76906da6c1ad 97 message.toUpperCase();
n5kzw 0:76906da6c1ad 98 // Iterate through human readable array and stuff TextString with characters
n5kzw 0:76906da6c1ad 99 for(int i=0;i<12;i++){ // Outer loop is the message string
n5kzw 0:76906da6c1ad 100 for(int j=0;j<anCount;j++){ // inner loop is maximum value of string length
n5kzw 0:76906da6c1ad 101 if(message[i]==anHumanConst[j]){
n5kzw 0:76906da6c1ad 102 TextString[i]=anConst[j];
n5kzw 0:76906da6c1ad 103 }
n5kzw 0:76906da6c1ad 104 }
n5kzw 0:76906da6c1ad 105 }
n5kzw 0:76906da6c1ad 106 LcdCnD = 0; // put LCD in data mode
n5kzw 0:76906da6c1ad 107 LcdnCs = 0;
n5kzw 0:76906da6c1ad 108 wait(1);
n5kzw 0:76906da6c1ad 109 for(int i=11; i=>0; i--) // Put character in right side of KTM-S1201
n5kzw 0:76906da6c1ad 110 {
n5kzw 0:76906da6c1ad 111 ktmshiftOut(TextString[i]);
n5kzw 0:76906da6c1ad 112 }
n5kzw 0:76906da6c1ad 113 LcdnCs = 1; // deselect LCD to display data
n5kzw 0:76906da6c1ad 114 wait(1);
n5kzw 0:76906da6c1ad 115 }
n5kzw 0:76906da6c1ad 116
n5kzw 0:76906da6c1ad 117 void ktmCommand(int _cmd)
n5kzw 0:76906da6c1ad 118 // necessary for other LCD functions
n5kzw 0:76906da6c1ad 119 {
n5kzw 0:76906da6c1ad 120 LcdCnD =1;
n5kzw 0:76906da6c1ad 121 wait(1);
n5kzw 0:76906da6c1ad 122 LcdnCs = 0);
n5kzw 0:76906da6c1ad 123 wait(1);
n5kzw 0:76906da6c1ad 124 ktmshiftOut(_cmd);
n5kzw 0:76906da6c1ad 125 wait(1);
n5kzw 0:76906da6c1ad 126 LcdnCs=1; // desect LCD to display data
n5kzw 0:76906da6c1ad 127 wait(1);
n5kzw 0:76906da6c1ad 128 }
n5kzw 0:76906da6c1ad 129
n5kzw 0:76906da6c1ad 130 void ktmshiftOut(int val)
n5kzw 0:76906da6c1ad 131 // necessary for other LCD functions
n5kzw 0:76906da6c1ad 132 // same as shiftout command but invert Sck
n5kzw 0:76906da6c1ad 133 {
n5kzw 0:76906da6c1ad 134 int i;
n5kzw 0:76906da6c1ad 135 for(i=0;i<8;i++)
n5kzw 0:76906da6c1ad 136 {
n5kzw 0:76906da6c1ad 137 LcdSi = !!(val & (1<<(7-1)));
n5kzw 0:76906da6c1ad 138 LcdnSck = 0;
n5kzw 0:76906da6c1ad 139 wait(1);
n5kzw 0:76906da6c1ad 140 LcdnSck =1;
n5kzw 0:76906da6c1ad 141 }
n5kzw 0:76906da6c1ad 142 wait(1);
n5kzw 0:76906da6c1ad 143 }
n5kzw 0:76906da6c1ad 144
n5kzw 0:76906da6c1ad 145 void ktmWriteHex(int hexVal, int pos)
n5kzw 0:76906da6c1ad 146 /*
n5kzw 0:76906da6c1ad 147 ktmWriteHex
n5kzw 0:76906da6c1ad 148 Writes any value in any position
n5kzw 0:76906da6c1ad 149 */
n5kzw 0:76906da6c1ad 150 {
n5kzw 0:76906da6c1ad 151 int TextString[12]={_,_,_,_,_,_,_,_,_,_,_,_}; // utimate buffer
n5kzw 0:76906da6c1ad 152 // Iterate through human readable array and stuff TextString with data
n5kzw 0:76906da6c1ad 153 TextString[pos]=hexVal;
n5kzw 0:76906da6c1ad 154 LcdCnd = 0; // put LCD in data mode
n5kzw 0:76906da6c1ad 155 LcdnCs = 0;
n5kzw 0:76906da6c1ad 156 wait(1);
n5kzw 0:76906da6c1ad 157 for(int i=11; i>= 0; i--) // Stuff data in KTM-S1201 rightmost character
n5kzw 0:76906da6c1ad 158 {
n5kzw 0:76906da6c1ad 159 ktmshiftOut(TextString[i]);
n5kzw 0:76906da6c1ad 160 }
n5kzw 0:76906da6c1ad 161 LcdnCs = 1; // deselect LCD to display data
n5kzw 0:76906da6c1ad 162 wait(1);
n5kzw 0:76906da6c1ad 163 }
n5kzw 0:76906da6c1ad 164
n5kzw 0:76906da6c1ad 165 void setup()
n5kzw 0:76906da6c1ad 166 {
n5kzw 0:76906da6c1ad 167 ktmInit(); // Reset LCD and prepare for communactions
n5kzw 0:76906da6c1ad 168 ktmCommand(_NoBlink); // Optional _SBlink to blink display
n5kzw 0:76906da6c1ad 169 ktmCommand(_Dispon); // Turn on display
n5kzw 0:76906da6c1ad 170 ktmCommand(_NoDecode);
n5kzw 0:76906da6c1ad 171 ktmCommand(_ClearDsp);
n5kzw 0:76906da6c1ad 172 }
n5kzw 0:76906da6c1ad 173
n5kzw 0:76906da6c1ad 174 void loop() // Hello World\
n5kzw 0:76906da6c1ad 175 {
n5kzw 0:76906da6c1ad 176 ktmWriteString("- HELLO -");
n5kzw 0:76906da6c1ad 177 wait(2000);
n5kzw 0:76906da6c1ad 178 ktmWriteString("ABCDEFGHIJKL");
n5kzw 0:76906da6c1ad 179 wait(2000);
n5kzw 0:76906da6c1ad 180 ktmWriteString("MNOPQRSTUVWX");
n5kzw 0:76906da6c1ad 181 wait(2000);
n5kzw 0:76906da6c1ad 182 ktmWriteString("YZ0123456789");
n5kzw 0:76906da6c1ad 183 wait(2000);
n5kzw 0:76906da6c1ad 184 ktmWriteString("36* Celsius");
n5kzw 0:76906da6c1ad 185 wait(2000);
n5kzw 0:76906da6c1ad 186 }
n5kzw 0:76906da6c1ad 187
n5kzw 0:76906da6c1ad 188
n5kzw 0:76906da6c1ad 189
n5kzw 0:76906da6c1ad 190
n5kzw 0:76906da6c1ad 191
n5kzw 0:76906da6c1ad 192
n5kzw 0:76906da6c1ad 193
n5kzw 0:76906da6c1ad 194
n5kzw 0:76906da6c1ad 195
n5kzw 0:76906da6c1ad 196
n5kzw 0:76906da6c1ad 197
n5kzw 0:76906da6c1ad 198