user_func.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. /*************************************************************************
  2. *
  3. * Used with ICCARM and AARM.
  4. *
  5. * (c) Copyright IAR Systems 2003
  6. *
  7. * File name : main.c
  8. * Description : Define main module
  9. *
  10. * History :
  11. * 1. Data : Feb 12, 2005
  12. * Author : Stanimir Bonev
  13. * Description : Create
  14. *
  15. * $Revision: 1.2 $
  16. **************************************************************************/
  17. #include "user_func.h"
  18. #define SCREEN_SAVER_INC TRUE /* Index increment */
  19. #define SCREEN_SAVER_DEC FALSE /* Index decrement */
  20. #define MAX_ADC_FREQ 4500000 /* Max Adc frequence */
  21. LPC_INT8U ButtCount1,ButtCount2,ButtFlags;
  22. LPC_BOOL LightState;
  23. LPC_INT8U Index;
  24. LPC_BOOL Direction;
  25. const char IllumAlwaysOff[] = " Off";
  26. const char IllumAuto[] = " Auto";
  27. const char IllumAlwaysOn[] = " On";
  28. const char * const IlluminationModeStr[] =
  29. {
  30. IllumAlwaysOff,
  31. IllumAuto,
  32. IllumAlwaysOn,
  33. };
  34. const LPC_INT8U ScreenSaverTO [] =
  35. {
  36. 2*TICK_PER_SECOND,
  37. 0.15*TICK_PER_SECOND,
  38. 0.15*TICK_PER_SECOND,
  39. 0.15*TICK_PER_SECOND,
  40. 0.15*TICK_PER_SECOND,
  41. 0.15*TICK_PER_SECOND,
  42. 0.15*TICK_PER_SECOND,
  43. 0.15*TICK_PER_SECOND,
  44. 0.15*TICK_PER_SECOND,
  45. 0.15*TICK_PER_SECOND,
  46. 0.15*TICK_PER_SECOND,
  47. 0.15*TICK_PER_SECOND,
  48. 0.15*TICK_PER_SECOND,
  49. 0.15*TICK_PER_SECOND,
  50. 0.15*TICK_PER_SECOND,
  51. 2*TICK_PER_SECOND,
  52. };
  53. const MEMU_STING_DEF ScreenSaver0 [] = " IAR Embedded \2 Workbench-ARM \2";
  54. const MEMU_STING_DEF ScreenSaver1 [] = " IAR Eedded \2 Worknch-ARM \2";
  55. const MEMU_STING_DEF ScreenSaver2 [] = " IAR dded \2 Worch-ARM \2";
  56. const MEMU_STING_DEF ScreenSaver3 [] = " IARded \2 Woh-ARM \2";
  57. const MEMU_STING_DEF ScreenSaver4 [] = " IAed \2 W-ARM \2";
  58. const MEMU_STING_DEF ScreenSaver5 [] = " Id \2 WRM \2";
  59. const MEMU_STING_DEF ScreenSaver6 [] = " \2 M \2";
  60. const MEMU_STING_DEF ScreenSaver7 [] = " \2 \2";
  61. const MEMU_STING_DEF ScreenSaver8 [] = " PM \2 \2";
  62. const MEMU_STING_DEF ScreenSaver9 [] = " PARM \2 \2";
  63. const MEMU_STING_DEF ScreenSaver10[] = " Ph ARM \2 \2";
  64. const MEMU_STING_DEF ScreenSaver11[] = " Phii ARM \2 \2";
  65. const MEMU_STING_DEF ScreenSaver12[] = " Phiemi ARM \2 L \2";
  66. const MEMU_STING_DEF ScreenSaver13[] = " Philiemi ARM \2 L38 \2";
  67. const MEMU_STING_DEF ScreenSaver14[] = " Philipsemi ARM \2 LP138 \2";
  68. const MEMU_STING_DEF ScreenSaver15[] = "Philips Semi ARM\2 LPC2138 \2";
  69. const MEMU_STING_DEF * const ScreenSaverTable [] =
  70. {
  71. ScreenSaver0,ScreenSaver1,ScreenSaver2,ScreenSaver3,
  72. ScreenSaver4,ScreenSaver5,ScreenSaver6,ScreenSaver7,
  73. ScreenSaver8,ScreenSaver9,ScreenSaver10,ScreenSaver11,
  74. ScreenSaver12,ScreenSaver13,ScreenSaver14,ScreenSaver15,
  75. };
  76. /*************************************************************************
  77. * Function Name: ScreenSaverInit
  78. * Parameters: MEMU_STING_DEF * pVarArg,
  79. * MEMU_IND_DEF * MenuIndex,
  80. * MEMU_TIME_OUT_DEF * MenuTO
  81. * Return: none
  82. * Description: Initialize menu screensaver
  83. *
  84. *************************************************************************/
  85. void ScreenSaverInit (MEMU_STING_DEF * pVarArg,MEMU_IND_DEF * MenuIndex, MEMU_TIME_OUT_DEF * MenuTO)
  86. {
  87. Index = 0;
  88. Direction = SCREEN_SAVER_INC;
  89. ScreenSaver(pVarArg,MenuIndex,MenuTO);
  90. }
  91. /*************************************************************************
  92. * Function Name: ScreenSaver
  93. * Parameters: MEMU_STING_DEF * pVarArg,
  94. * MEMU_IND_DEF * MenuIndex,
  95. * MEMU_TIME_OUT_DEF * MenuTO
  96. * Return: none
  97. * Description: Initialize menu screensaver
  98. *
  99. *************************************************************************/
  100. void ScreenSaver (MEMU_STING_DEF * pVarArg,MEMU_IND_DEF * MenuIndex, MEMU_TIME_OUT_DEF * MenuTO)
  101. {
  102. Index &= 0xF;
  103. *MenuTO = ScreenSaverTO[Index];
  104. strcpy(pVarArg,ScreenSaverTable[Index]);
  105. if (Direction == SCREEN_SAVER_INC)
  106. {
  107. ++Index;
  108. }
  109. else
  110. {
  111. --Index;
  112. }
  113. if (Index == 15)
  114. {
  115. Direction = SCREEN_SAVER_DEC;
  116. }
  117. else if (Index == 0)
  118. {
  119. Direction = SCREEN_SAVER_INC;
  120. }
  121. }
  122. /*************************************************************************
  123. * Function Name: SysTimeUpdate
  124. * Parameters: onen
  125. * Return: none
  126. * Description: Set flag sys_time_update
  127. *
  128. *************************************************************************/
  129. void SysTimeUpdate (void)
  130. {
  131. SysTimeUpdateFlag = 1;
  132. }
  133. /*************************************************************************
  134. * Function Name: Alarm
  135. * Parameters: none
  136. * Return: none
  137. * Description: Set flag alarm
  138. *
  139. *************************************************************************/
  140. void Alarm (void)
  141. {
  142. SysAlarmFlag = 1;
  143. }
  144. /*************************************************************************
  145. * Function Name: FindOffSet
  146. * Parameters: const char* Str,
  147. * LPC_INT8U Size
  148. * Return: LPC_INT8U
  149. * Description: Return needed offset to show string in the middle of the LCD
  150. *
  151. *************************************************************************/
  152. LPC_INT8U FindOffSet(const char* Str,LPC_INT8U Size)
  153. {
  154. if(strlen(Str) < Size-1)
  155. {
  156. Size -= strlen(Str);
  157. return (Size>>1);
  158. }
  159. return 0;
  160. }
  161. /*************************************************************************
  162. * Function Name: FindOffSet
  163. * Parameters: const char* Str,
  164. * LPC_INT8U Size
  165. * Return: LPC_INT8U
  166. * Description: Return needed offset to show string in the middle of the LCD
  167. *
  168. *************************************************************************/
  169. void ReplaceStr(char* DestStr,const char* SourStr,LPC_INT8U Offset,LPC_INT8U Size)
  170. {
  171. if((SourStr == NULL) || (DestStr == NULL)
  172. || (Size == 0) || (strlen(DestStr) <= Offset))
  173. {
  174. return;
  175. }
  176. DestStr += Offset;
  177. while(*SourStr)
  178. {
  179. *DestStr = *SourStr;
  180. ++SourStr;++DestStr;
  181. if(--Size == 0)
  182. {
  183. break;
  184. }
  185. }
  186. }
  187. /*************************************************************************
  188. * Function Name: GetTimeAndData
  189. * Parameters: MEMU_STING_DEF * pVarArg,
  190. * MEMU_IND_DEF * MenuIndex,
  191. * MEMU_TIME_OUT_DEF * MenuTO
  192. * Return: none
  193. * Description: Set flag alarm
  194. *
  195. *************************************************************************/
  196. void GetTimeAndData (MEMU_STING_DEF * pVarArg,MEMU_IND_DEF * MenuIndex,MEMU_TIME_OUT_DEF * MenuTO)
  197. {
  198. LPC_Rtc_Time_t CurrTime;
  199. LPC_Rtc_Date_t CurrData;
  200. char Temp[20];
  201. RTC_GetTime(&CurrTime);
  202. FormatTime(TimeFormat,&CurrTime,Temp);
  203. ReplaceStr(pVarArg,Temp,FindOffSet(Temp,16),16);
  204. RTC_GetDate(&CurrData);
  205. FormatDate(DataFormat,&CurrData,Temp);
  206. ReplaceStr(pVarArg+17,Temp,FindOffSet(Temp,16),16);
  207. HD44780_CursorPosSet(HD44780_CURSOR_OFF, HD44780_CURSOR_BLINK,1, 1);
  208. }
  209. /*************************************************************************
  210. * Function Name: ButtonsInit
  211. * Parameters: none
  212. * Return: none
  213. * Description: Init buttons
  214. *
  215. *************************************************************************/
  216. void ButtonsInit (void)
  217. {
  218. /* Init buttons Inputs */
  219. IO0DIR_bit.P0_15 = IO0DIR_bit.P0_16 = 0;
  220. /* Init button's variable */
  221. ButtFlags = ButtCount1 = ButtCount2 = 0;
  222. }
  223. /*************************************************************************
  224. * Function Name: Buttons
  225. * Parameters: none
  226. * Return: none
  227. * Description: Inplement buttons
  228. *
  229. *************************************************************************/
  230. void Buttons (void)
  231. {
  232. if (!IO0PIN_bit.P0_15)
  233. {
  234. if(ButtCount1 > BUTT_DEB)
  235. {
  236. if((ButtFlags & BUTT_FLAG_1) == 0)
  237. {
  238. ButtFlags |= BUTT_FLAG_1+BUTT_EVENT_1;
  239. }
  240. }
  241. else
  242. {
  243. ++ButtCount1;
  244. }
  245. }
  246. else
  247. {
  248. if(ButtCount1 == 0)
  249. {
  250. if(ButtFlags & BUTT_FLAG_1)
  251. {
  252. ButtFlags &= ~BUTT_FLAG_1;
  253. }
  254. }
  255. else
  256. {
  257. --ButtCount1;
  258. }
  259. }
  260. if (!IO0PIN_bit.P0_16)
  261. {
  262. if(ButtCount2 > BUTT_DEB)
  263. {
  264. if((ButtFlags & BUTT_FLAG_2) == 0)
  265. {
  266. ButtFlags |= BUTT_FLAG_2+BUTT_EVENT_2;
  267. }
  268. }
  269. else
  270. {
  271. ++ButtCount2;
  272. }
  273. }
  274. else
  275. {
  276. if(ButtCount2 == 0)
  277. {
  278. if(ButtFlags & BUTT_FLAG_2)
  279. {
  280. ButtFlags &= ~BUTT_FLAG_2;
  281. }
  282. }
  283. else
  284. {
  285. --ButtCount2;
  286. }
  287. }
  288. }
  289. /*************************************************************************
  290. * Function Name: GetButtonsEvent
  291. * Parameters: none
  292. * Return: LPC_INT8U
  293. * Description: Return buttons event and clear event flags
  294. *
  295. *************************************************************************/
  296. LPC_INT8U GetButtonsEvent (void)
  297. {
  298. LPC_INT8U Events = ButtFlags & (BUTT_EVENT_1|BUTT_EVENT_2);
  299. ButtFlags &= ~(BUTT_EVENT_1|BUTT_EVENT_2);
  300. return Events;
  301. }
  302. /*************************************************************************
  303. * Function Name: ClearFlag
  304. * Parameters: void
  305. * Return: void
  306. *
  307. * Description: clear arg
  308. *
  309. *************************************************************************/
  310. void SetSysTickFlag (void* arg)
  311. {
  312. int* pFlag = arg;
  313. *pFlag = 1;
  314. Buttons();
  315. }
  316. /*************************************************************************
  317. * Function Name: LightInit
  318. * Parameters: none
  319. * Return: none
  320. * Description: Init light control
  321. *
  322. *************************************************************************/
  323. void LightInit(void)
  324. {
  325. /* Connect DAC output to pin P0_25 */
  326. PINSEL1_bit.P0_25 = 2;
  327. /* DAC Init */
  328. DACR_bit.BIAS = 0x1;
  329. /* Light Off */
  330. DACR_bit.VALUE = LIGHT_OFF_VALUE;
  331. /* Init Current state of light */
  332. LightState = LIGHT_OFF;
  333. }
  334. /*************************************************************************
  335. * Function Name: LightInit
  336. * Parameters: LPC_BOOL Slow,
  337. LPC_BOOL On
  338. * Return: none
  339. * Description: Light control
  340. *
  341. *************************************************************************/
  342. void LightCntr (LPC_BOOL Slow,LPC_BOOL On)
  343. {
  344. if(LightState != On)
  345. {
  346. if(Slow == LIGHT_SLOW)
  347. {
  348. if(On == LIGHT_ON)
  349. {
  350. if(DACR_bit.VALUE < LIGHT_ON_VALUE-0xF)
  351. {
  352. DACR_bit.VALUE += 0xF;
  353. }
  354. else
  355. {
  356. LightState = On;
  357. }
  358. }
  359. else
  360. {
  361. if(DACR_bit.VALUE > 0xF)
  362. {
  363. DACR_bit.VALUE -= 0xF;
  364. }
  365. else
  366. {
  367. LightState = On;
  368. }
  369. }
  370. }
  371. else
  372. {
  373. LightState = On;
  374. DACR_bit.VALUE = (On == LIGHT_ON)? LIGHT_ON_VALUE: LIGHT_OFF_VALUE;
  375. }
  376. }
  377. }
  378. /*************************************************************************
  379. * Function Name: Adc ADC_Measure
  380. * Parameters: none
  381. * Return: none
  382. * Description: Light control
  383. *
  384. *************************************************************************/
  385. void ADC_Init (MEMU_STING_DEF * pVarArg,MEMU_IND_DEF * MenuIndex, MEMU_TIME_OUT_DEF * MenuTO)
  386. {
  387. /* ADC Chanel0 is connected to pin P0_27 */
  388. PINSEL1_bit.P0_27 = 1;
  389. /* ADC Settings */
  390. AD0CR_bit.SEL = 0;
  391. AD0CR_bit.CLKDIV = SYS_GetFpclk()/MAX_ADC_FREQ;
  392. AD0CR_bit.BURST = 0;
  393. AD0CR_bit.PDN = 1;
  394. AD0CR_bit.TEST = 0;
  395. AD0CR_bit.START = 0;
  396. ADC_Measure(pVarArg,MenuIndex,MenuTO);
  397. }
  398. /*************************************************************************
  399. * Function Name: Adc ADC_Measure
  400. * Parameters: MEMU_STING_DEF * pVarArg,
  401. * MEMU_IND_DEF * MenuIndex,
  402. * MEMU_TIME_OUT_DEF * MenuTO
  403. * Return: none
  404. * Description: Light control
  405. *
  406. *************************************************************************/
  407. void ADC_Measure (MEMU_STING_DEF * pVarArg,MEMU_IND_DEF * MenuIndex, MEMU_TIME_OUT_DEF * MenuTO)
  408. {
  409. LPC_INT32U AdcResult;
  410. LPC_INT8U Count;
  411. int i;
  412. /* ADC Conversion start */
  413. AD0CR_bit.START = 1;
  414. /* Delay needed when executing from flash, unknown why */
  415. for (i = 0; i < 32; i++)
  416. __no_operation();
  417. /* Wait result */
  418. do
  419. {
  420. AdcResult = AD0DR;
  421. }while((AdcResult&0x80000000) == 0);
  422. AdcResult = (AdcResult >> 12) & 0xF;
  423. for (Count = 0;Count < 16; ++Count)
  424. {
  425. if(AdcResult)
  426. {
  427. *pVarArg = '*';
  428. --AdcResult;
  429. }
  430. else
  431. {
  432. *pVarArg = ' ';
  433. }
  434. ++pVarArg;
  435. }
  436. *pVarArg = 2;
  437. *++pVarArg = 0;
  438. }
  439. /*************************************************************************
  440. * Function Name: IlluminationShow
  441. * Parameters: MEMU_STING_DEF * pVarArg,
  442. * MEMU_IND_DEF * MenuIndex,
  443. * MEMU_TIME_OUT_DEF * MenuTO
  444. * Return: none
  445. * Description: Ilumination show
  446. *
  447. *************************************************************************/
  448. void IlluminationShow (MEMU_STING_DEF * pVarArg,MEMU_IND_DEF * MenuIndex, MEMU_TIME_OUT_DEF * MenuTO)
  449. {
  450. const char * SourceData = IlluminationModeStr[LightMode];
  451. for (int i =0; i < 10;++i)
  452. {
  453. if(*SourceData)
  454. {
  455. *pVarArg = *SourceData;
  456. ++SourceData;
  457. }
  458. else
  459. {
  460. *pVarArg = ' ';
  461. }
  462. ++pVarArg;
  463. }
  464. *pVarArg=2;
  465. *++pVarArg=0;
  466. }
  467. /*************************************************************************
  468. * Function Name: IlluminationModeCursorOn
  469. * Parameters: MEMU_STING_DEF * pVarArg,
  470. * MEMU_IND_DEF * MenuIndex,
  471. * MEMU_TIME_OUT_DEF * MenuTO
  472. * Return: none
  473. * Description: Ilumination cursor on
  474. *
  475. *************************************************************************/
  476. void IlluminationModeCursorOn (MEMU_STING_DEF * pVarArg,MEMU_IND_DEF * MenuIndex, MEMU_TIME_OUT_DEF * MenuTO)
  477. {
  478. HD44780_CursorPosSet(HD44780_CURSOR_OFF, HD44780_CURSOR_BLINK,8, 2);
  479. }
  480. /*************************************************************************
  481. * Function Name: IlluminationNextMode
  482. * Parameters: MEMU_STING_DEF * pVarArg,
  483. * MEMU_IND_DEF * MenuIndex,
  484. * MEMU_TIME_OUT_DEF * MenuTO
  485. * Return: none
  486. * Description: Ilumination next
  487. *
  488. *************************************************************************/
  489. void IlluminationNextMode (MEMU_STING_DEF * pVarArg,MEMU_IND_DEF * MenuIndex, MEMU_TIME_OUT_DEF * MenuTO)
  490. {
  491. if(++LightMode > 2)
  492. {
  493. LightMode = 0;
  494. }
  495. IlluminationShow(pVarArg,MenuIndex,MenuTO);
  496. }
  497. /*************************************************************************
  498. * Function Name: IlluminationNextMode
  499. * Parameters: MEMU_STING_DEF * pVarArg,
  500. * MEMU_IND_DEF * MenuIndex,
  501. * MEMU_TIME_OUT_DEF * MenuTO
  502. * Return: none
  503. * Description: Cursor off
  504. *
  505. *************************************************************************/
  506. void CursorOff (MEMU_STING_DEF * pVarArg,MEMU_IND_DEF * MenuIndex, MEMU_TIME_OUT_DEF * MenuTO)
  507. {
  508. HD44780_CursorPosSet(HD44780_CURSOR_OFF, HD44780_CURSOR_NORM,1, 1);
  509. }