heat control  r71
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
lcdisp.c
Go to the documentation of this file.
1 
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <util/delay.h>
5 #include "lcdisp.h"
6 #include "lcd_lib.h"
7 #include "setup.h"
8 
23 void LcdInit(void) {
24  LCDinit();
25  LCDclr();
26  Welcome();
27 }
28 
34 void WriteMeasVal(MEASVAL* mv) {
35  LCDGotoXY(mv->pos.col, mv->pos.row);
36  LCDsendChar(mv->name);
37  WriteValue(mv);
38 }
39 
44 void WriteValue(MEASVAL* mv) {
45  UCHAR sVal[VALUE_LENGTH];
46 
47  switch(mv->dt)
48  {
49  case DT_UCHAR:
50  case DT_CHAR:
51  ntofa(*ToUchar(mv->value), sVal, mv->dt);
52  break;
53  case DT_FLOAT:
54  case DT_UINT:
55  case DT_INT:
56  case DT_TIME:
57  ntofa(*ToUint(mv->value), sVal, mv->dt);
58  break;
59  default: //DT_STRING
60  LCDstring(ToUchar(mv->value));
61  return;
62  }
63  LCDstring(sVal);
64 }
65 
72 void WriteSetupValue(SETUP_ITEM* si, UCHAR allow, UCHAR id) {
73  MEASVAL mv;
74  UCHAR pos = 0;
75 
76  //determine position of name by the straightness of the item id
77  pos = ((id & 0x01) == 0x01) ? POS_2ND_NAME : POS_1ST_NAME;
78 // if(si->pos == POS_2ND_VAL)
79 // pos = POS_2ND_NAME;
80  LCDGotoXY(pos, 0);
81  LCDstring(si->name);
82  mv.dt = si->type;
83  mv.value = &(si->value);
84  LCDGotoXY(/*si->pos*/pos == POS_2ND_NAME ? POS_2ND_VAL : POS_1ST_VAL, 1);
85  if(allow)
86  WriteValue(&mv);
87  else
88  LCDstring((UCHAR*)" ");
89 }
90 
97  LCDstring((UCHAR*)" ");
99  switch(grp) {
100  case SG_CTRL:
101  LCDstring((UCHAR*)"control");
102  break;
103  case SG_MEAS:
104  LCDstring((UCHAR*)"measure");
105  break;
106  case SG_LIMIT:
107  LCDstring((UCHAR*)"limits");
108  break;
109  }
110 }
111 
117 void WriteCtrlMode(UCHAR name, UCHAR* cmName) {
118  LCDGotoXY(8, 1);
119  LCDstring((UCHAR*)" ");
120  LCDGotoXY(8, 1);
121  LCDsendChar(name);
122  LCDGotoXY(11, 1);
123  LCDstring(cmName);
124 }
125 
133 void ntofa(UINT val, UCHAR* buf, DATTYPE dt) {
134  UCHAR digits[NUM_LEN], i=0, is=0, d=0, numLen=NUM_LEN, decPt=DF_DECPT, brDbdp=BR_DBDP;
135  UINT exp=0, sMask = 0, vMask = 0;
136 
137  //possibly negative value?
138  switch(dt) {
139  case DT_CHAR:
140  case DT_INT:
141  switch(dt) {
142  case DT_CHAR:
143  sMask = 0x0080;
144  vMask = 0x00FF;
145  decPt = '0';
146  break;
147  case DT_INT:
148  sMask = 0x8000;
149  vMask = 0xFFFF;
150  break;
151  default:
152  break;
153  }
154  if((val & sMask) == sMask)
155  {
156  val = vMask - val + 1;
157  buf[0] = '-';
158  --numLen;
159  is = 1;
160  }
161  break;
162  case DT_TIME:
163  decPt = ':';
164  ++brDbdp;
165  break;
166  case DT_UCHAR:
167  decPt = '0';
168  break;
169  default:
170  break;
171  }
172  for(i=0; i<numLen; ++i)
173  {
174  exp = _exp10(numLen-i-1);
175  if(exp == 0) {
176  digits[i] = exp;
177  continue;
178  }
179  digits[i] = (val / exp);
180  val -= (digits[i] * exp);
181  }
182  for(i=is; i<VALUE_LENGTH; ++i)
183  {
184  if(i == brDbdp)
185  buf[i] = decPt;
186  else if(i == VALUE_LENGTH - 1)
187  buf[i] = '\0';
188  else
189  {
190  buf[i] = digits[d] + ALNUM_BASE;
191  ++d;
192  }
193  }
194 }
195 
202  UINT res=1;
203  UCHAR i=0;
204 
205  if(n==0)
206  {}
207  else if(n < NUM_SDG)
208  {
209  for(i=0; i<n; ++i)
210  res *= NUM_BASE;
211  }
212  else
213  res = 0;
214  return res;
215 }
216 
225 void Welcome(void) {
226  LCDstring((UCHAR*)" heat control");
227  LCDGotoXY(0,1);
228  LCDstring((UCHAR*)" ");
230  LCDstring((UCHAR*)" by woodz");
231  _delay_ms(3000);
232  LCDclr();
233 }
234 
235 
236 
237 
Definition: lcdisp.h:59
Definition: types.h:141
void LCDstring(uint8_t *data)
Definition: lcd_lib.c:369
#define POS_2ND_VAL
Definition: setup.h:22
UCHAR col
Definition: lcdisp.h:52
#define DF_DECPT
Definition: lcdisp.h:38
#define POS_2ND_NAME
Definition: setup.h:30
#define POS_1ST_NAME
Definition: setup.h:26
#define VALUE_LENGTH
Definition: lcdisp.h:30
void * value
Definition: lcdisp.h:71
#define POS_GRP_START
Definition: setup.h:34
Definition: setup.h:97
void WriteSetupValue(SETUP_ITEM *si, UCHAR allow, UCHAR id)
put a setup item on screen, which consist of a name and a value spread over two lines ...
Definition: lcdisp.c:72
#define NUM_LEN
Definition: lcdisp.h:22
void Welcome(void)
put startup info on screen
Definition: lcdisp.c:225
void WriteValue(MEASVAL *mv)
write the payload value itself onto lcd while considering the data type
Definition: lcdisp.c:44
#define UCHAR
Definition: types.h:73
void LcdInit(void)
display initialization Alphanumeric LCD initialization Connections are specified in the Project|Confi...
Definition: lcdisp.c:23
void ntofa(UINT val, UCHAR *buf, DATTYPE dt)
convert integer value to fixed decimal point string buffer must have at least a size of 8 bytes alloc...
Definition: lcdisp.c:133
#define ALNUM_BASE
Definition: lcdisp.h:18
void WriteCtrlMode(UCHAR name, UCHAR *cmName)
Definition: lcdisp.c:117
#define NUM_SDG
Definition: lcdisp.h:26
void WriteSetupGroup(UCHAR grp)
Definition: lcdisp.c:95
UCHAR name[4]
Definition: setup.h:51
void LCDclr(void)
Definition: lcd_lib.c:361
void LCDinit(void)
Definition: lcd_lib.c:80
#define FW_REV
Definition: lcdisp.h:46
void WriteMeasVal(MEASVAL *mv)
put a measurement value on lcd source value is being output as fixed decimal point number ...
Definition: lcdisp.c:34
LCD_POS pos
Definition: lcdisp.h:63
Definition: setup.h:89
UINT value
Definition: setup.h:63
#define BR_DBDP
Definition: lcdisp.h:34
UCHAR name
Definition: lcdisp.h:67
Definition: types.h:129
void LCDsendChar(uint8_t ch)
Definition: lcd_lib.c:262
#define NUM_BASE
Definition: lcdisp.h:14
#define POS_1ST_VAL
Definition: setup.h:18
UCHAR row
Definition: lcdisp.h:53
DATTYPE dt
Definition: lcdisp.h:75
UINT _exp10(UCHAR n)
Definition: lcdisp.c:201
Definition: types.h:125
DATTYPE
Definition: types.h:113
Definition: setup.h:93
Definition: types.h:121
#define UINT
Definition: types.h:81
void LCDGotoXY(uint8_t x, uint8_t y)
Definition: lcd_lib.c:382
DATTYPE type
Definition: setup.h:67