096OLED_I2C_MZ.h 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984
  1. // #include "HEADER_MZ.h"
  2. #include "096OLED_FONT_MZ.h"
  3. #define BRIGHTNESS 0xCF
  4. #define X_WIDTH 128
  5. #define Y_WIDTH 64
  6. #define MENU_IN 0
  7. #define MENU_OUT 1
  8. uint8_t menuIndex = 0;
  9. uint8_t settingPages = 0;
  10. uint8_t settingIndex = 0;
  11. uint8_t positionNum = 0;
  12. uint8_t positionLock = 0;
  13. void OLED_WriteData(uint8_t oledData)
  14. {
  15. I2C_Start();
  16. I2C_WriteByte(0x78); //Slave address,SA0=0
  17. I2C_WriteByte(0x40);
  18. I2C_WriteByte(oledData);
  19. I2C_Stop();
  20. }
  21. void OLED_WriteCmd(uint8_t oledCmd)
  22. {
  23. I2C_Start();
  24. I2C_WriteByte(0x78); //Slave address,SA0=0
  25. I2C_WriteByte(0x00);
  26. I2C_WriteByte(oledCmd);
  27. I2C_Stop();
  28. }
  29. void OLED_SetPos(uint8_t x, uint8_t y)
  30. {
  31. OLED_WriteCmd(0xb0 + y);
  32. OLED_WriteCmd(((x & 0xf0) >> 4) | 0x10);
  33. OLED_WriteCmd((x & 0x0f) | 0x01);
  34. }
  35. void OLED_FillScreen(uint8_t fillData)
  36. {
  37. uint8_t y, x;
  38. for(y = 0; y < 8; y++)
  39. {
  40. OLED_WriteCmd(0xb0 + y);
  41. OLED_WriteCmd(0x01);
  42. OLED_WriteCmd(0x10);
  43. for(x = 0; x < X_WIDTH; x++)
  44. OLED_WriteData(fillData);
  45. }
  46. }
  47. void OLED_Init(void)
  48. {
  49. // DelayNms(50);
  50. OLED_WriteCmd(0xae); // Turn off oled panel
  51. OLED_WriteCmd(0x00); // Set low column address
  52. OLED_WriteCmd(0x10); // Set high column address
  53. OLED_WriteCmd(0x40); // Set start line address, Set Mapping RAM Display Start Line (0x00~0x3F)
  54. OLED_WriteCmd(0x81); // Set contrast control register
  55. OLED_WriteCmd(BRIGHTNESS); // Set SEG Output Current Brightness
  56. OLED_WriteCmd(0xa1); // Set SEG/Column Mapping, 0xa0 reverse x, 0xa1 normal x
  57. OLED_WriteCmd(0xc8); // Set COM/Row Scan Direction, 0xc0 reverse y, 0xc8 normal y
  58. OLED_WriteCmd(0xa6); // Set normal display
  59. OLED_WriteCmd(0xa8); // Set multiplex ratio(1 to 64)
  60. OLED_WriteCmd(0x3f); // 1/64 duty
  61. OLED_WriteCmd(0xd3); // Set display offset Shift Mapping RAM Counter (0x00~0x3F)
  62. OLED_WriteCmd(0x00); // Not offset
  63. OLED_WriteCmd(0xd5); // Set display clock divide ratio/oscillator frequency
  64. OLED_WriteCmd(0x80); // Set divide ratio, Set Clock as 100 Frames/Sec
  65. OLED_WriteCmd(0xd9); // Set pre-charge period
  66. OLED_WriteCmd(0xf1); // Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  67. OLED_WriteCmd(0xda); // Set com pins hardware configuration
  68. OLED_WriteCmd(0x12);
  69. OLED_WriteCmd(0xdb); // Set vcomh
  70. OLED_WriteCmd(0x40); // Set VCOM Deselect Level
  71. OLED_WriteCmd(0x20); // Set Page Addressing Mode (0x00/0x01/0x02)
  72. OLED_WriteCmd(0x02); //
  73. OLED_WriteCmd(0x8d); // Set Charge Pump enable/disable
  74. OLED_WriteCmd(0x14); // Set(0x10) disable
  75. OLED_WriteCmd(0xa4); // Disable Entire Display On (0xa4/0xa5)
  76. OLED_WriteCmd(0xa6); // Disable Inverse Display On (0xa6/a7)
  77. OLED_WriteCmd(0xaf); // Turn on oled panel
  78. OLED_FillScreen(0x00); // Clear screen
  79. OLED_SetPos(0, 0); // Reset origin
  80. }
  81. void OLED_DrawChar8x16(uint8_t x, uint8_t y, uint8_t symbol[])
  82. {
  83. uint8_t i = 0;
  84. if(x > 120)
  85. {
  86. x = 0;
  87. y += 2;
  88. }
  89. OLED_SetPos(x, y);
  90. for(i = 0; i < 8; i++)
  91. {
  92. OLED_WriteData(symbol[i]);
  93. }
  94. OLED_SetPos(x, y + 1);
  95. for(i = 0; i < 8; i++)
  96. {
  97. OLED_WriteData(symbol[i + 8]);
  98. }
  99. }
  100. void OLED_DrawChar16x16(uint8_t x, uint8_t y, uint8_t symbol[])
  101. {
  102. uint8_t i = 0;
  103. if(x > 120) // If x large than max width, then move to next line begining
  104. {
  105. x = 0;
  106. y += 2;
  107. }
  108. OLED_SetPos(x, y);
  109. for(i = 0; i < 16; i++)
  110. {
  111. OLED_WriteData(symbol[i]);
  112. }
  113. OLED_SetPos(x, y + 1);
  114. for(i = 0; i < 16; i++)
  115. {
  116. OLED_WriteData(symbol[i + 16]);
  117. }
  118. }
  119. void OLED_DrawString8x16(uint8_t x, uint8_t y, uint8_t* str, uint8_t* font)
  120. {
  121. uint8_t i = 0;
  122. for(i = 0; i < strlen(str); i++)
  123. {
  124. if(x > 120)
  125. {
  126. x = 0;
  127. y += 2;
  128. }
  129. if(y > 6)
  130. break;
  131. OLED_DrawChar8x16(x, y, font + ((str[i] - 32) * 16));
  132. x += 8;
  133. }
  134. }
  135. uint8_t NumToChar(uint8_t num)
  136. {
  137. if(num >= 0 && num <= 9)
  138. return num + 32 + 16;
  139. return num; // Not a number between 0-9
  140. }
  141. void OLED_DisNumber(uint8_t x, uint8_t y, uint8_t disData)
  142. {
  143. OLED_SetPos(x, y);
  144. OLED_DrawChar8x16(x, y, FontSongTi8x16 + ((NumToChar(disData) - 32) * 16));
  145. }
  146. void OLED_DisValue(uint8_t x, uint8_t y, uint8_t* disData, uint8_t disLength)
  147. {
  148. uint8_t i = 0;
  149. for(i = 0; i < disLength; i++)
  150. {
  151. OLED_SetPos(x, y);
  152. OLED_DrawChar8x16(x, y, FontSongTi8x16 + ((NumToChar(disData[i]) - 32) * 16));
  153. x += 8;
  154. }
  155. }
  156. void OLED_Dis_Welcom(void)
  157. {
  158. uint8_t beginX = 28, beginY = 2;
  159. OLED_DrawString8x16(28, 2, "I. Astrol", FontSongTi8x16);
  160. OLED_DrawString8x16(56, 5, "HT", FontSongTi8x16);
  161. // menuIndex = 1;
  162. }
  163. void OLED_Dis_HumTemRefresh(void)
  164. {
  165. if(powerMode == PERFORMANCE)
  166. {
  167. uint8_t beginX = 16;
  168. // OLED_DrawChar16x16(20, 0, SysIcons + (0 * 32));
  169. // OLED_DrawChar16x16(0, 0, SysIcons + (2 * 32));
  170. OLED_DrawString8x16(16, 3, "Tem:", FontSongTi8x16);
  171. OLED_DrawChar16x16(beginX + 80, 3, CelsiusCharZh);
  172. OLED_DrawString8x16(16, 6, "Hum:", FontSongTi8x16);
  173. OLED_DrawChar8x16(beginX + 84, 6, FontSongTi8x16 + (('%' - 32) * 16));
  174. if(vccValue >= 4160)
  175. OLED_DrawChar16x16(108, 0, SysIcons + (4 * 32)); // charge
  176. else if(vccValue < 4160 && vccValue >= 3600)
  177. OLED_DrawChar16x16(108, 0, SysIcons + (5 * 32)); // bat4
  178. else if(vccValue < 3600 && vccValue >= 3400)
  179. OLED_DrawChar16x16(108, 0, SysIcons + (6 * 32)); // bat3
  180. else if(vccValue < 3400 && vccValue >= 3200)
  181. OLED_DrawChar16x16(108, 0, SysIcons + (7 * 32)); // bat2
  182. else if(vccValue < 3200 && vccValue >= 3000)
  183. OLED_DrawChar16x16(108, 0, SysIcons + (8 * 32)); // bat1
  184. else if(vccValue < 3000)
  185. OLED_DrawChar16x16(108, 0, SysIcons + (3 * 32)); // bat!
  186. OLED_DisValue(56, 3, Temperature, 4);
  187. OLED_DisValue(56, 6, Humidity, 4);
  188. OLED_DisValue(56, 0, adcSave, 4);
  189. }
  190. if(menuSwitch == 0 && batBtn == 3)
  191. {
  192. batBtn = 0;
  193. menuSwitch = 1;
  194. menuIndex = 2;
  195. settingPages = 0;
  196. settingIndex = 0;
  197. OLED_FillScreen(0x00);
  198. }
  199. }
  200. uint8_t OLED_Dis_MenuSwitch(uint8_t menuInOut) // 0:in, 1: out
  201. {
  202. if(menuSwitch == 0 && batBtn == 3 && menuInOut == MENU_IN)
  203. {
  204. batBtn = 0;
  205. menuSwitch = 1;
  206. settingIndex = settingIndex + 100;
  207. OLED_FillScreen(0x00);
  208. return 1;
  209. }
  210. if(menuSwitch == 0 && batBtn == 3 && menuInOut == MENU_OUT)
  211. {
  212. batBtn = 0;
  213. menuSwitch = 1;
  214. settingIndex = settingIndex - 100;
  215. OLED_FillScreen(0x00);
  216. }
  217. return 0;
  218. }
  219. void OLED_Dis_Menu(void)
  220. {
  221. if(settingIndex < 100)
  222. {
  223. if(menuSwitch == 0 && batBtn == 2)
  224. {
  225. batBtn = 0;
  226. settingIndex++;
  227. if(settingIndex > 12)
  228. settingIndex = 0;
  229. // UartSend(settingIndex);
  230. }
  231. }
  232. settingPages = settingIndex / 4;
  233. /**************************************************************************/
  234. if(settingPages == 0)
  235. {
  236. if(settingIndex == 0)
  237. {
  238. OLED_DrawString8x16(0, 0, "-PowerMode ", FontSongTi8x16);
  239. if(OLED_Dis_MenuSwitch(MENU_IN))
  240. return;
  241. }
  242. else
  243. OLED_DrawString8x16(0, 0, "PowerMode ", FontSongTi8x16);
  244. if(powerMode == PERFORMANCE)
  245. OLED_DrawString8x16(112, 0, "PF", FontSongTi8x16);
  246. else
  247. OLED_DrawString8x16(112, 0, "PS", FontSongTi8x16);
  248. /**********************************************************************/
  249. if(settingIndex == 1)
  250. {
  251. if(powerMode == PERFORMANCE)
  252. OLED_DrawString8x16(0, 2, "-DetectTime ", FontSongTi8x16);
  253. else
  254. OLED_DrawString8x16(0, 2, "-SleepTime ", FontSongTi8x16);
  255. if(OLED_Dis_MenuSwitch(MENU_IN))
  256. return;
  257. }
  258. else
  259. {
  260. if(powerMode == PERFORMANCE)
  261. OLED_DrawString8x16(0, 2, "DetectTime ", FontSongTi8x16);
  262. else
  263. OLED_DrawString8x16(0, 2, "SleepTime ", FontSongTi8x16);
  264. }
  265. OLED_DrawChar8x16(104, 2, FontSongTi8x16 + ((NumToChar(detectTime / 10)) - 32) * 16);
  266. OLED_DrawChar8x16(112, 2, FontSongTi8x16 + ((NumToChar(detectTime % 10)) - 32) * 16);
  267. OLED_DrawChar8x16(120, 2, FontSongTi8x16 + ((detectTimeUnit - 32) * 16));
  268. /**********************************************************************/
  269. if(settingIndex == 2)
  270. {
  271. OLED_DrawString8x16(0, 4, "-BatReocrd ", FontSongTi8x16);
  272. if(OLED_Dis_MenuSwitch(MENU_IN))
  273. return;
  274. }
  275. else
  276. OLED_DrawString8x16(0, 4, "BatReocrd ", FontSongTi8x16);
  277. if(batRecord)
  278. OLED_DrawString8x16(104, 4, " On", FontSongTi8x16);
  279. else
  280. OLED_DrawString8x16(104, 4, "Off", FontSongTi8x16);
  281. /**********************************************************************/
  282. if(settingIndex == 3)
  283. {
  284. OLED_DrawString8x16(0, 6, "-UploadTime ", FontSongTi8x16);
  285. if(OLED_Dis_MenuSwitch(MENU_IN))
  286. return;
  287. }
  288. else
  289. OLED_DrawString8x16(0, 6, "UploadTime ", FontSongTi8x16);
  290. OLED_DrawChar8x16(104, 6, FontSongTi8x16 + ((NumToChar(uploadTime / 10)) - 32) * 16);
  291. OLED_DrawChar8x16(112, 6, FontSongTi8x16 + ((NumToChar(uploadTime % 10)) - 32) * 16);
  292. OLED_DrawChar8x16(120, 6, FontSongTi8x16 + ((uploadTimeUnit - 32) * 16));
  293. }
  294. /**************************************************************************/
  295. else if(settingPages == 1)
  296. {
  297. if(settingIndex == 4)
  298. {
  299. OLED_DrawString8x16(0, 0, "-UploadNow ->", FontSongTi8x16);
  300. if(OLED_Dis_MenuSwitch(MENU_IN))
  301. return;
  302. }
  303. else
  304. OLED_DrawString8x16(0, 0, "UploadNow ->", FontSongTi8x16);
  305. if(uploadNow == 4)
  306. uploadNow = 0;
  307. /**********************************************************************/
  308. if(settingIndex == 5)
  309. {
  310. OLED_DrawString8x16(0, 2, "-WifiInfo ->", FontSongTi8x16);
  311. if(OLED_Dis_MenuSwitch(MENU_IN))
  312. return;
  313. }
  314. else
  315. OLED_DrawString8x16(0, 2, "WifiInfo ->", FontSongTi8x16);
  316. /**********************************************************************/
  317. if(settingIndex == 6)
  318. {
  319. OLED_DrawString8x16(0, 4, "-WifiSet ->", FontSongTi8x16);
  320. if(OLED_Dis_MenuSwitch(MENU_IN))
  321. return;
  322. }
  323. else
  324. OLED_DrawString8x16(0, 4, "WifiSet ->", FontSongTi8x16);
  325. if(wifiConnect == 4)
  326. wifiConnect = 0;
  327. /**********************************************************************/
  328. if(settingIndex == 7)
  329. {
  330. OLED_DrawString8x16(0, 6, "-Language ", FontSongTi8x16);
  331. if(OLED_Dis_MenuSwitch(MENU_IN))
  332. return;
  333. }
  334. else
  335. OLED_DrawString8x16(0, 6, "Language ", FontSongTi8x16);
  336. if(language == ENGLISH)
  337. OLED_DrawString8x16(112, 6, "EN", FontSongTi8x16);
  338. else
  339. OLED_DrawString8x16(112, 6, "Ch", FontSongTi8x16);
  340. }
  341. /**************************************************************************/
  342. else if(settingPages == 2)
  343. {
  344. if(settingIndex == 8)
  345. {
  346. OLED_DrawString8x16(0, 0, "-Style ->", FontSongTi8x16);
  347. if(OLED_Dis_MenuSwitch(MENU_IN))
  348. return;
  349. }
  350. else
  351. OLED_DrawString8x16(0, 0, "Style ->", FontSongTi8x16);
  352. /**********************************************************************/
  353. if(settingIndex == 9)
  354. {
  355. OLED_DrawString8x16(0, 2, "-AI ", FontSongTi8x16);
  356. if(OLED_Dis_MenuSwitch(MENU_IN))
  357. return;
  358. }
  359. else
  360. OLED_DrawString8x16(0, 2, "AI ", FontSongTi8x16);
  361. if(aiMode)
  362. OLED_DrawString8x16(104, 2, " On", FontSongTi8x16);
  363. else
  364. OLED_DrawString8x16(104, 2, "Off", FontSongTi8x16);
  365. /**********************************************************************/
  366. if(settingIndex == 10)
  367. {
  368. OLED_DrawString8x16(0, 4, "-Version ", FontSongTi8x16);
  369. if(OLED_Dis_MenuSwitch(MENU_IN))
  370. return;
  371. }
  372. else
  373. OLED_DrawString8x16(0, 4, "Version ", FontSongTi8x16);
  374. OLED_DrawString8x16(80, 4, VERSION, FontSongTi8x16);
  375. /**********************************************************************/
  376. if(settingIndex == 11)
  377. {
  378. OLED_DrawString8x16(0, 6, "-Reset ->", FontSongTi8x16);
  379. if(OLED_Dis_MenuSwitch(MENU_IN))
  380. return;
  381. }
  382. else
  383. OLED_DrawString8x16(0, 6, "Reset ->", FontSongTi8x16);
  384. }
  385. /**************************************************************************/
  386. else if(settingPages == 3)
  387. {
  388. if(settingIndex == 12)
  389. {
  390. OLED_DrawString8x16(0, 0, "-Back <-", FontSongTi8x16);
  391. if(menuSwitch == 0 && batBtn == 3)
  392. {
  393. EE_WriteSetting();
  394. batBtn = 0;
  395. menuSwitch = 1;
  396. menuIndex = 1;
  397. OLED_FillScreen(0x00);
  398. }
  399. }
  400. else
  401. OLED_DrawString8x16(0, 0, "Back <-", FontSongTi8x16);
  402. /**********************************************************************/
  403. OLED_DrawString8x16(0, 2, " ", FontSongTi8x16);
  404. OLED_DrawString8x16(0, 4, " ", FontSongTi8x16);
  405. OLED_DrawString8x16(0, 6, " ", FontSongTi8x16);
  406. }
  407. /**************************************************************************/
  408. /**************************************************************************/
  409. if(settingIndex == 100)
  410. {
  411. if(menuSwitch == 0 && batBtn == 2)
  412. {
  413. batBtn = 0;
  414. powerMode = !powerMode; // ~: reverse by bit, !: reverse by logic
  415. }
  416. if(powerMode == PERFORMANCE)
  417. {
  418. OLED_DrawString8x16(48, 2, "-PF", FontSongTi8x16);
  419. OLED_DrawString8x16(48, 4, " PS", FontSongTi8x16);
  420. }
  421. else
  422. {
  423. OLED_DrawString8x16(48, 2, " PF", FontSongTi8x16);
  424. OLED_DrawString8x16(48, 4, "-PS", FontSongTi8x16);
  425. }
  426. OLED_Dis_MenuSwitch(MENU_OUT);
  427. }
  428. /**************************************************************************/
  429. if(settingIndex == 101)
  430. {
  431. if(powerMode == PERFORMANCE)
  432. {
  433. detectTimeCounter = 0;
  434. if(detectTime == 0) // time cannot be 0
  435. detectTime = 1;
  436. OLED_DrawChar8x16(40, 3, FontSongTi8x16 + ((NumToChar(detectTime / 10) - 32) * 16));
  437. OLED_DrawChar8x16(48, 3, FontSongTi8x16 + ((NumToChar(detectTime % 10) - 32) * 16));
  438. OLED_DrawChar8x16(56, 3, FontSongTi8x16 + (detectTimeUnit - 32) * 16);
  439. OLED_DrawString8x16(80, 3, "->", FontSongTi8x16);
  440. if(positionLock)
  441. {
  442. if(menuSwitch == 0 && batBtn == 3)
  443. {
  444. batBtn = 0;
  445. menuSwitch = 1;
  446. positionLock = 0;
  447. }
  448. if(positionNum == 0)
  449. {
  450. OLED_DrawString8x16(40, 5, "^ ", FontSongTi8x16);
  451. if(menuSwitch == 0 && batBtn == 2)
  452. {
  453. batBtn = 0;
  454. detectTime += 10;
  455. if(detectTime > 99)
  456. detectTime = detectTime % 100;
  457. }
  458. }
  459. else if(positionNum == 1)
  460. {
  461. OLED_DrawString8x16(40, 5, " ^ ", FontSongTi8x16);
  462. if(menuSwitch == 0 && batBtn == 2)
  463. {
  464. batBtn = 0;
  465. detectTime ++;
  466. if(detectTime % 10 == 0)
  467. detectTime -= 10;
  468. }
  469. }
  470. else if(positionNum == 2)
  471. {
  472. OLED_DrawString8x16(40, 5, " ^ ", FontSongTi8x16);
  473. if(menuSwitch == 0 && batBtn == 2)
  474. {
  475. batBtn = 0;
  476. if(detectTimeUnit == 'S')
  477. detectTimeUnit = 'M';
  478. else if(detectTimeUnit == 'M')
  479. detectTimeUnit = 'H';
  480. else if(detectTimeUnit == 'H')
  481. detectTimeUnit = 'S';
  482. }
  483. }
  484. else
  485. {
  486. // OLED_DrawString8x16(40, 5, " ^^", FontSongTi8x16);
  487. }
  488. }
  489. else
  490. {
  491. if(menuSwitch == 0 && batBtn == 2)
  492. {
  493. batBtn = 0;
  494. positionNum++;
  495. if(positionNum > 3)
  496. positionNum = 0;
  497. }
  498. if(menuSwitch == 0 && batBtn == 3)
  499. {
  500. batBtn = 0;
  501. menuSwitch = 1;
  502. positionLock = 1;
  503. if(positionNum == 3)
  504. {
  505. positionNum = 0;
  506. positionLock = 0;
  507. settingIndex = settingIndex - 100;
  508. OLED_FillScreen(0x00);
  509. }
  510. }
  511. if(positionNum == 0)
  512. OLED_DrawString8x16(40, 5, "* ", FontSongTi8x16);
  513. else if(positionNum == 1)
  514. OLED_DrawString8x16(40, 5, " * ", FontSongTi8x16);
  515. else if(positionNum == 2)
  516. OLED_DrawString8x16(40, 5, " * ", FontSongTi8x16);
  517. else
  518. OLED_DrawString8x16(40, 5, " **", FontSongTi8x16);
  519. }
  520. }
  521. else
  522. {
  523. sleepTimeCounter = 0;
  524. if(sleepTime == 0) // time cannot be 0
  525. sleepTime = 1;
  526. OLED_DrawChar8x16(40, 3, FontSongTi8x16 + ((NumToChar(sleepTime / 10) - 32) * 16));
  527. OLED_DrawChar8x16(48, 3, FontSongTi8x16 + ((NumToChar(sleepTime % 10) - 32) * 16));
  528. OLED_DrawChar8x16(56, 3, FontSongTi8x16 + (sleepTimeUnit - 32) * 16);
  529. OLED_DrawString8x16(80, 3, "->", FontSongTi8x16);
  530. if(positionLock)
  531. {
  532. if(menuSwitch == 0 && batBtn == 3)
  533. {
  534. batBtn = 0;
  535. menuSwitch = 1;
  536. positionLock = 0;
  537. }
  538. if(positionNum == 0)
  539. {
  540. OLED_DrawString8x16(40, 5, "^ ", FontSongTi8x16);
  541. if(menuSwitch == 0 && batBtn == 2)
  542. {
  543. batBtn = 0;
  544. sleepTime += 10;
  545. if(sleepTime > 99)
  546. sleepTime = sleepTime % 100;
  547. }
  548. }
  549. else if(positionNum == 1)
  550. {
  551. OLED_DrawString8x16(40, 5, " ^ ", FontSongTi8x16);
  552. if(menuSwitch == 0 && batBtn == 2)
  553. {
  554. batBtn = 0;
  555. sleepTime ++;
  556. if(sleepTime % 10 == 0)
  557. sleepTime -= 10;
  558. }
  559. }
  560. else if(positionNum == 2)
  561. {
  562. OLED_DrawString8x16(40, 5, " ^ ", FontSongTi8x16);
  563. if(menuSwitch == 0 && batBtn == 2)
  564. {
  565. batBtn = 0;
  566. if(sleepTimeUnit == 'S')
  567. sleepTimeUnit = 'M';
  568. else if(sleepTimeUnit == 'M')
  569. sleepTimeUnit = 'H';
  570. else if(sleepTimeUnit == 'H')
  571. sleepTimeUnit = 'S';
  572. }
  573. }
  574. else
  575. {
  576. // OLED_DrawString8x16(40, 5, " ^^", FontSongTi8x16);
  577. }
  578. }
  579. else
  580. {
  581. if(menuSwitch == 0 && batBtn == 2)
  582. {
  583. batBtn = 0;
  584. positionNum++;
  585. if(positionNum > 3)
  586. positionNum = 0;
  587. }
  588. if(menuSwitch == 0 && batBtn == 3)
  589. {
  590. batBtn = 0;
  591. menuSwitch = 1;
  592. positionLock = 1;
  593. if(positionNum == 3)
  594. {
  595. positionNum = 0;
  596. positionLock = 0;
  597. settingIndex = settingIndex - 100;
  598. OLED_FillScreen(0x00);
  599. }
  600. }
  601. if(positionNum == 0)
  602. OLED_DrawString8x16(40, 5, "* ", FontSongTi8x16);
  603. else if(positionNum == 1)
  604. OLED_DrawString8x16(40, 5, " * ", FontSongTi8x16);
  605. else if(positionNum == 2)
  606. OLED_DrawString8x16(40, 5, " * ", FontSongTi8x16);
  607. else
  608. OLED_DrawString8x16(40, 5, " **", FontSongTi8x16);
  609. }
  610. }
  611. }
  612. /**************************************************************************/
  613. if(settingIndex == 102)
  614. {
  615. if(menuSwitch == 0 && batBtn == 2)
  616. {
  617. batBtn = 0;
  618. batRecord = !batRecord;
  619. }
  620. if(batRecord)
  621. {
  622. OLED_DrawString8x16(48, 2, "- On", FontSongTi8x16);
  623. OLED_DrawString8x16(48, 4, " Off", FontSongTi8x16);
  624. }
  625. else
  626. {
  627. OLED_DrawString8x16(48, 2, " On", FontSongTi8x16);
  628. OLED_DrawString8x16(48, 4, "-Off", FontSongTi8x16);
  629. }
  630. OLED_Dis_MenuSwitch(MENU_OUT);
  631. }
  632. /**************************************************************************/
  633. if(settingIndex == 103)
  634. {
  635. uploadTimeCounter = 0;
  636. if(uploadTime == 0) // time cannot be 0
  637. uploadTime = 1;
  638. OLED_DrawChar8x16(40, 3, FontSongTi8x16 + ((NumToChar(uploadTime / 10) - 32) * 16));
  639. OLED_DrawChar8x16(48, 3, FontSongTi8x16 + ((NumToChar(uploadTime % 10) - 32) * 16));
  640. OLED_DrawChar8x16(56, 3, FontSongTi8x16 + (uploadTimeUnit - 32) * 16);
  641. OLED_DrawString8x16(80, 3, "->", FontSongTi8x16);
  642. if(positionLock)
  643. {
  644. if(menuSwitch == 0 && batBtn == 3)
  645. {
  646. batBtn = 0;
  647. menuSwitch = 1;
  648. positionLock = 0;
  649. }
  650. if(positionNum == 0)
  651. {
  652. OLED_DrawString8x16(40, 5, "^ ", FontSongTi8x16);
  653. if(menuSwitch == 0 && batBtn == 2)
  654. {
  655. batBtn = 0;
  656. uploadTime += 10;
  657. if(uploadTime > 99)
  658. uploadTime = uploadTime % 100;
  659. }
  660. }
  661. else if(positionNum == 1)
  662. {
  663. OLED_DrawString8x16(40, 5, " ^ ", FontSongTi8x16);
  664. if(menuSwitch == 0 && batBtn == 2)
  665. {
  666. batBtn = 0;
  667. uploadTime ++;
  668. if(uploadTime % 10 == 0)
  669. uploadTime -= 10;
  670. }
  671. }
  672. else if(positionNum == 2)
  673. {
  674. OLED_DrawString8x16(40, 5, " ^ ", FontSongTi8x16);
  675. if(menuSwitch == 0 && batBtn == 2)
  676. {
  677. batBtn = 0;
  678. if(uploadTimeUnit == 'S')
  679. uploadTimeUnit = 'M';
  680. else if(uploadTimeUnit == 'M')
  681. uploadTimeUnit = 'H';
  682. else if(uploadTimeUnit == 'H')
  683. uploadTimeUnit = 'S';
  684. }
  685. }
  686. else
  687. {
  688. // OLED_DrawString8x16(40, 5, " ^^", FontSongTi8x16);
  689. }
  690. }
  691. else
  692. {
  693. if(menuSwitch == 0 && batBtn == 2)
  694. {
  695. batBtn = 0;
  696. positionNum++;
  697. if(positionNum > 3)
  698. positionNum = 0;
  699. }
  700. if(menuSwitch == 0 && batBtn == 3)
  701. {
  702. batBtn = 0;
  703. menuSwitch = 1;
  704. positionLock = 1;
  705. if(positionNum == 3)
  706. {
  707. positionNum = 0;
  708. positionLock = 0;
  709. settingIndex = settingIndex - 100;
  710. OLED_FillScreen(0x00);
  711. }
  712. }
  713. if(positionNum == 0)
  714. OLED_DrawString8x16(40, 5, "* ", FontSongTi8x16);
  715. else if(positionNum == 1)
  716. OLED_DrawString8x16(40, 5, " * ", FontSongTi8x16);
  717. else if(positionNum == 2)
  718. OLED_DrawString8x16(40, 5, " * ", FontSongTi8x16);
  719. else
  720. OLED_DrawString8x16(40, 5, " **", FontSongTi8x16);
  721. }
  722. }
  723. /**************************************************************************/
  724. if(settingIndex == 104)
  725. {
  726. if(menuSwitch == 0 && batBtn == 2)
  727. {
  728. batBtn = 0;
  729. uploadNow = 1;
  730. OLED_FillScreen(0x00);
  731. }
  732. if(uploadNow == 0)
  733. {
  734. uploadNow = 1;
  735. OLED_FillScreen(0x00);
  736. OLED_DrawString8x16(16, 3, "Uploading...", FontSongTi8x16);
  737. }
  738. else if(uploadNow == 1)
  739. {
  740. OLED_DrawString8x16(16, 3, "Uploading...", FontSongTi8x16);
  741. }
  742. else if(uploadNow == 2)
  743. {
  744. uploadNow = 4;
  745. OLED_FillScreen(0x00);
  746. OLED_DrawString8x16(36, 2, " Upload", FontSongTi8x16);
  747. OLED_DrawString8x16(36, 4, "Success!", FontSongTi8x16);
  748. }
  749. else if(uploadNow == 3)
  750. {
  751. uploadNow = 4;
  752. OLED_FillScreen(0x00);
  753. OLED_DrawString8x16(44, 2, "Upload", FontSongTi8x16);
  754. OLED_DrawString8x16(48, 4, "Fail!", FontSongTi8x16);
  755. }
  756. OLED_Dis_MenuSwitch(MENU_OUT);
  757. }
  758. /**************************************************************************/
  759. if(settingIndex == 105) //todo
  760. {
  761. OLED_DrawString8x16(0, 4, "105 - IP: ", FontSongTi8x16);
  762. OLED_DrawString8x16(80, 4, VERSION, FontSongTi8x16);
  763. OLED_Dis_MenuSwitch(MENU_OUT);
  764. }
  765. /**************************************************************************/
  766. if(settingIndex == 106)
  767. {
  768. if(menuSwitch == 0 && batBtn == 2)
  769. {
  770. batBtn = 0;
  771. wifiConnect = 1;
  772. OLED_FillScreen(0x00);
  773. }
  774. if(wifiConnect == 0)
  775. {
  776. wifiConnect = 1;
  777. OLED_FillScreen(0x00);
  778. OLED_DrawString8x16(12, 3, "Connecting...", FontSongTi8x16);
  779. }
  780. else if(wifiConnect == 1)
  781. {
  782. OLED_DrawString8x16(12, 3, "Connecting...", FontSongTi8x16);
  783. }
  784. else if(wifiConnect == 2)
  785. {
  786. wifiConnect = 4;
  787. OLED_FillScreen(0x00);
  788. OLED_DrawString8x16(40, 2, "Connect", FontSongTi8x16);
  789. OLED_DrawString8x16(36, 4, "Success!", FontSongTi8x16);
  790. }
  791. else if(wifiConnect == 3)
  792. {
  793. wifiConnect = 4;
  794. OLED_FillScreen(0x00);
  795. OLED_DrawString8x16(40, 2, "Connect", FontSongTi8x16);
  796. OLED_DrawString8x16(40, 4, " Fail!", FontSongTi8x16);
  797. }
  798. OLED_Dis_MenuSwitch(MENU_OUT);
  799. }
  800. /**************************************************************************/
  801. if(settingIndex == 107)
  802. {
  803. if(menuSwitch == 0 && batBtn == 2)
  804. {
  805. batBtn = 0;
  806. language = !language;
  807. }
  808. if(language == ENGLISH)
  809. {
  810. OLED_DrawString8x16(48, 2, "-En", FontSongTi8x16);
  811. OLED_DrawString8x16(48, 4, " Ch", FontSongTi8x16);
  812. }
  813. else
  814. {
  815. OLED_DrawString8x16(48, 2, " En", FontSongTi8x16);
  816. OLED_DrawString8x16(48, 4, "-Ch", FontSongTi8x16);
  817. }
  818. OLED_Dis_MenuSwitch(MENU_OUT);
  819. }
  820. /**************************************************************************/
  821. if(settingIndex == 108) // todo // style
  822. {
  823. OLED_DrawString8x16(48, 3, "108", FontSongTi8x16);
  824. OLED_Dis_MenuSwitch(MENU_OUT);
  825. }
  826. /**************************************************************************/
  827. if(settingIndex == 109)
  828. {
  829. if(menuSwitch == 0 && batBtn == 2)
  830. {
  831. batBtn = 0;
  832. aiMode = !aiMode;
  833. }
  834. if(aiMode)
  835. {
  836. OLED_DrawString8x16(48, 2, "- On", FontSongTi8x16);
  837. OLED_DrawString8x16(48, 4, " Off", FontSongTi8x16);
  838. }
  839. else
  840. {
  841. OLED_DrawString8x16(48, 2, " On", FontSongTi8x16);
  842. OLED_DrawString8x16(48, 4, "-Off", FontSongTi8x16);
  843. }
  844. OLED_Dis_MenuSwitch(MENU_OUT);
  845. }
  846. /**************************************************************************/
  847. if(settingIndex == 110)
  848. {
  849. OLED_DrawString8x16(8, 1, "I. Astrol - HT", FontSongTi8x16);
  850. OLED_DrawString8x16(40, 3, VERSION, FontSongTi8x16);
  851. OLED_DrawString8x16(88, 3, " ", FontSongTi8x16);
  852. OLED_DrawString8x16(24, 5, "MengZe.top", FontSongTi8x16);
  853. OLED_Dis_MenuSwitch(MENU_OUT);
  854. }
  855. if(settingIndex == 111)
  856. {
  857. OLED_DrawString8x16(40, 3, "-Reset", FontSongTi8x16);
  858. if(menuSwitch == 0 && batBtn == 3)
  859. {
  860. batBtn = 0;
  861. OLED_FillScreen(0x00);
  862. OLED_DrawString8x16(40, 3, "------", FontSongTi8x16);
  863. IapErase(0x0000);
  864. IapErase(0x0200);
  865. IapErase(0x0400);
  866. IapErase(0x0600);
  867. IapErase(0x0800);
  868. IapErase(0x0A00);
  869. IapErase(0x0C00);
  870. IapErase(0x0E00);
  871. SoftResetCode();
  872. }
  873. }
  874. }
  875. void OLED_Dis_MenuDeal(void)
  876. {
  877. // UartSend(menuIndex);
  878. if(menuIndex == 0)
  879. OLED_Dis_Welcom();
  880. else if(menuIndex == 1)
  881. {
  882. menuStayTimeStart = 0;
  883. menuStayTime = 0;
  884. OLED_Dis_HumTemRefresh();
  885. }
  886. else if(menuIndex == 2)
  887. {
  888. menuStayTimeStart = 1;
  889. if(menuStayTime > 5000)
  890. {
  891. menuIndex = 1;
  892. menuSwitch = 1;
  893. EE_WriteSetting();
  894. OLED_FillScreen(0x00);
  895. return;
  896. }
  897. OLED_Dis_Menu();
  898. }
  899. if(batBtnCounterStart == 0)
  900. {
  901. batBtn = 0;
  902. }
  903. }
  904. // void main()
  905. // {
  906. // OLED_ShowInit();
  907. // OLED_Display();
  908. // while(1)
  909. // {
  910. // OLED_Display();
  911. // DelayNms(1200);
  912. // }
  913. // }