myLcd.c 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <stdbool.h>
  4. #include <stdarg.h>
  5. #include <string.h>
  6. #include <math.h>
  7. #include "myLcd.h"
  8. #include "board.h"
  9. #define LCD_DEVICE_ADDR 0x78
  10. #define SENSOR_DEVICE_ADDR 0x44<<1
  11. static uint8_t commandType = 0;
  12. static uint8_t const Chinese_text_16x16[]=
  13. {
  14. "深圳市沃进科技有限公司→←↑↓¤"
  15. };
  16. static uint8_t const Chinese_code_16x16[]=
  17. {
  18. 0x08,0x06,0x40,0x31,0x00,0x70,0x44,0x48,0x50,0x43,0x50,0x48,0x44,0x70,0x00,0x00,
  19. 0x20,0x20,0x7E,0x80,0x04,0x84,0x88,0x90,0xA0,0xFF,0xA0,0x90,0x88,0x84,0x04,0x00,/*"深",0*/
  20. 0x04,0x04,0x04,0xFF,0x04,0x04,0x00,0xFF,0x00,0x00,0x7F,0x00,0x00,0xFF,0x00,0x00,
  21. 0x08,0x0C,0x08,0xF0,0x10,0x11,0x06,0xF8,0x00,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,/*"圳",1*/
  22. 0x00,0x10,0x11,0x11,0x11,0x11,0x91,0x5F,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x00,
  23. 0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x08,0x04,0xF8,0x00,0x00,0x00,/*"市",2*/
  24. 0x08,0x06,0x40,0x31,0x00,0x21,0x21,0x21,0x21,0x7F,0x41,0xC1,0x41,0x01,0x01,0x00,
  25. 0x20,0x20,0x7E,0x80,0x01,0x02,0x04,0x18,0x60,0x80,0x60,0x18,0x04,0x02,0x01,0x00,/*"沃",3*/
  26. 0x02,0x02,0x42,0x33,0x00,0x01,0x11,0x11,0xFF,0x11,0x11,0xFF,0x11,0x11,0x01,0x00,
  27. 0x00,0x02,0x04,0xF8,0x04,0x02,0x0A,0x32,0xC2,0x02,0x02,0xFA,0x02,0x02,0x02,0x00,/*"进",4*/
  28. 0x24,0x24,0x25,0x7F,0xC5,0x44,0x00,0x44,0x33,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,
  29. 0x10,0x60,0x80,0xFF,0x00,0x80,0x20,0x20,0x20,0x20,0x20,0xFF,0x40,0x40,0x40,0x00,/*"科",5*/
  30. 0x08,0x08,0x08,0xFF,0x08,0x09,0x10,0x11,0x11,0x11,0xFF,0x11,0x11,0x11,0x10,0x00,
  31. 0x20,0x22,0x41,0xFE,0x80,0x01,0x01,0x02,0xC2,0x34,0x08,0x14,0x62,0x81,0x01,0x00,/*"技",6*/
  32. 0x20,0x20,0x20,0x21,0x27,0x3C,0xE4,0x24,0x24,0x24,0x24,0x27,0x20,0x20,0x20,0x00,
  33. 0x20,0x40,0x80,0x00,0xFF,0x90,0x90,0x90,0x90,0x92,0x91,0xFE,0x00,0x00,0x00,0x00,/*"有",7*/
  34. 0x00,0x7F,0x44,0x5A,0x61,0x00,0x7F,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,
  35. 0x00,0xFF,0x20,0x10,0xE0,0x00,0xFF,0x02,0x04,0xC0,0x30,0x28,0x44,0x82,0x02,0x00,/*"限",8*/
  36. 0x00,0x01,0x02,0x04,0x18,0x60,0x01,0x00,0xE0,0x18,0x04,0x02,0x01,0x00,0x00,0x00,
  37. 0x80,0x00,0x04,0x0E,0x14,0x64,0x84,0x04,0x04,0x24,0x1C,0x06,0x00,0x80,0x80,0x00,/*"公",9*/
  38. 0x00,0x08,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x40,0x7F,0x00,0x00,0x00,
  39. 0x00,0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFC,0x00,0x02,0x01,0xFE,0x00,0x00,0x00,/*"司",10*/
  40. 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x09,0x05,0x07,0x03,0x03,0x01,0x01,0x00,
  41. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x40,0xC0,0x80,0x80,0x00,0x00,0x00,/*"→",11*/
  42. 0x01,0x01,0x03,0x03,0x07,0x05,0x09,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
  43. 0x00,0x00,0x80,0x80,0xC0,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"←",12*/
  44. 0x00,0x00,0x00,0x00,0x02,0x0C,0x38,0xFF,0x38,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,
  45. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"↑",13*/
  46. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  47. 0x00,0x00,0x00,0x00,0x40,0x30,0x1C,0xFF,0x1C,0x30,0x40,0x00,0x00,0x00,0x00,0x00,/*"↓",14*/
  48. 0x00,0x40,0x20,0x17,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x17,0x20,0x40,0x00,
  49. 0x00,0x02,0x04,0xE8,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0xE8,0x04,0x02,0x00,/*"¤",15*/
  50. };
  51. const uint8_t ascii_table_8x16[95][16]=
  52. {
  53. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
  54. 0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x00,0x00,0x00,0x00,/*"!",1*/
  55. 0x00,0x08,0x30,0x40,0x08,0x30,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",2*/
  56. 0x00,0x02,0x03,0x1E,0x02,0x03,0x1E,0x00,0x00,0x20,0xFC,0x20,0x20,0xFC,0x20,0x00,/*"#",3*/
  57. 0x00,0x0E,0x11,0x11,0x3F,0x10,0x0C,0x00,0x00,0x18,0x04,0x04,0xFF,0x84,0x78,0x00,/*"$",4*/
  58. 0x0F,0x10,0x0F,0x01,0x06,0x18,0x00,0x00,0x00,0x8C,0x30,0xC0,0x78,0x84,0x78,0x00,/*"%",5*/
  59. 0x00,0x0F,0x10,0x11,0x0E,0x00,0x00,0x00,0x78,0x84,0xC4,0x34,0x98,0xE4,0x84,0x08,/*"&",6*/
  60. 0x00,0x48,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",7*/
  61. 0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,/*"(",8*/
  62. 0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,/*")",9*/
  63. 0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,/*"*",10*/
  64. 0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF0,0x80,0x80,0x80,/*"+",11*/
  65. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x0E,0x00,0x00,0x00,0x00,0x00,/*",",12*/
  66. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,/*"-",13*/
  67. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,/*".",14*/
  68. 0x00,0x00,0x00,0x00,0x03,0x1C,0x20,0x00,0x00,0x06,0x18,0xE0,0x00,0x00,0x00,0x00,/*"/",15*/
  69. 0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,/*"0",16*/
  70. 0x00,0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,/*"1",17*/
  71. 0x00,0x0E,0x10,0x10,0x10,0x10,0x0F,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,/*"2",18*/
  72. 0x00,0x0C,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x18,0x04,0x84,0x84,0x44,0x38,0x00,/*"3",19*/
  73. 0x00,0x00,0x01,0x02,0x0C,0x1F,0x00,0x00,0x00,0x60,0xA0,0x24,0x24,0xFC,0x24,0x24,/*"4",20*/
  74. 0x00,0x1F,0x11,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x04,0x04,0x04,0x88,0x70,0x00,/*"5",21*/
  75. 0x00,0x07,0x08,0x11,0x11,0x09,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x04,0xF8,0x00,/*"6",22*/
  76. 0x00,0x18,0x10,0x10,0x11,0x16,0x18,0x00,0x00,0x00,0x00,0x7C,0x80,0x00,0x00,0x00,/*"7",23*/
  77. 0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00,/*"8",24*/
  78. 0x00,0x0F,0x10,0x10,0x10,0x08,0x07,0x00,0x00,0x80,0x48,0x44,0x44,0x88,0xF0,0x00,/*"9",25*/
  79. 0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,/*":",26*/
  80. 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,/*";",27*/
  81. 0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x00,/*"<",28*/
  82. 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"=",29*/
  83. 0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x80,0x00,/*">",30*/
  84. 0x00,0x0E,0x12,0x10,0x10,0x11,0x0E,0x00,0x00,0x00,0x00,0x0C,0xEC,0x00,0x00,0x00,/*"?",31*/
  85. 0x03,0x0C,0x13,0x14,0x17,0x08,0x07,0x00,0xE0,0x18,0xE4,0x14,0xF4,0x14,0xE8,0x00,/*"@",32*/
  86. 0x00,0x00,0x03,0x1C,0x07,0x00,0x00,0x00,0x04,0x3C,0xC4,0x40,0x40,0xE4,0x1C,0x04,/*"A",33*/
  87. 0x10,0x1F,0x11,0x11,0x11,0x0E,0x00,0x00,0x04,0xFC,0x04,0x04,0x04,0x88,0x70,0x00,/*"B",34*/
  88. 0x03,0x0C,0x10,0x10,0x10,0x10,0x1C,0x00,0xE0,0x18,0x04,0x04,0x04,0x08,0x10,0x00,/*"C",35*/
  89. 0x10,0x1F,0x10,0x10,0x10,0x08,0x07,0x00,0x04,0xFC,0x04,0x04,0x04,0x08,0xF0,0x00,/*"D",36*/
  90. 0x10,0x1F,0x11,0x11,0x17,0x10,0x08,0x00,0x04,0xFC,0x04,0x04,0xC4,0x04,0x18,0x00,/*"E",37*/
  91. 0x10,0x1F,0x11,0x11,0x17,0x10,0x08,0x00,0x04,0xFC,0x04,0x00,0xC0,0x00,0x00,0x00,/*"F",38*/
  92. 0x03,0x0C,0x10,0x10,0x10,0x1C,0x00,0x00,0xE0,0x18,0x04,0x04,0x44,0x78,0x40,0x00,/*"G",39*/
  93. 0x10,0x1F,0x10,0x00,0x00,0x10,0x1F,0x10,0x04,0xFC,0x84,0x80,0x80,0x84,0xFC,0x04,/*"H",40*/
  94. 0x00,0x10,0x10,0x1F,0x10,0x10,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,/*"I",41*/
  95. 0x00,0x00,0x10,0x10,0x1F,0x10,0x10,0x00,0x03,0x01,0x01,0x01,0xFE,0x00,0x00,0x00,/*"J",42*/
  96. 0x10,0x1F,0x11,0x03,0x14,0x18,0x10,0x00,0x04,0xFC,0x04,0x80,0x64,0x1C,0x04,0x00,/*"K",43*/
  97. 0x10,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0x04,0x04,0x04,0x04,0x0C,0x00,/*"L",44*/
  98. 0x10,0x1F,0x1F,0x00,0x1F,0x1F,0x10,0x00,0x04,0xFC,0x80,0x7C,0x80,0xFC,0x04,0x00,/*"M",45*/
  99. 0x10,0x1F,0x0C,0x03,0x00,0x10,0x1F,0x10,0x04,0xFC,0x04,0x00,0xE0,0x18,0xFC,0x00,/*"N",46*/
  100. 0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,/*"O",47*/
  101. 0x10,0x1F,0x10,0x10,0x10,0x10,0x0F,0x00,0x04,0xFC,0x84,0x80,0x80,0x80,0x00,0x00,/*"P",48*/
  102. 0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,0xF0,0x08,0x14,0x14,0x0C,0x0A,0xF2,0x00,/*"Q",49*/
  103. 0x10,0x1F,0x11,0x11,0x11,0x11,0x0E,0x00,0x04,0xFC,0x04,0x00,0xC0,0x30,0x0C,0x04,/*"R",50*/
  104. 0x00,0x0E,0x11,0x10,0x10,0x10,0x1C,0x00,0x00,0x1C,0x04,0x84,0x84,0x44,0x38,0x00,/*"S",51*/
  105. 0x18,0x10,0x10,0x1F,0x10,0x10,0x18,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,0x00,/*"T",52*/
  106. 0x10,0x1F,0x10,0x00,0x00,0x10,0x1F,0x10,0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00,/*"U",53*/
  107. 0x10,0x1E,0x11,0x00,0x00,0x13,0x1C,0x10,0x00,0x00,0xE0,0x1C,0x70,0x80,0x00,0x00,/*"V",54*/
  108. 0x10,0x1F,0x00,0x1F,0x00,0x1F,0x10,0x00,0x00,0xC0,0x7C,0x80,0x7C,0xC0,0x00,0x00,/*"W",55*/
  109. 0x10,0x18,0x16,0x01,0x01,0x16,0x18,0x10,0x04,0x0C,0x34,0xC0,0xC0,0x34,0x0C,0x04,/*"X",56*/
  110. 0x10,0x1C,0x13,0x00,0x13,0x1C,0x10,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,0x00,/*"Y",57*/
  111. 0x08,0x10,0x10,0x10,0x13,0x1C,0x10,0x00,0x04,0x1C,0x64,0x84,0x04,0x04,0x18,0x00,/*"Z",58*/
  112. 0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,/*"[",59*/
  113. 0x00,0x20,0x1C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x1C,0x03,0x00,/*"\",60*/
  114. 0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,/*"]",61*/
  115. 0x00,0x00,0x20,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",62*/
  116. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*"_",63*/
  117. 0x00,0x40,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",64*/
  118. 0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x98,0x24,0x24,0x48,0xFC,0x04,0x00,/*"a",65*/
  119. 0x08,0x0F,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0xFC,0x88,0x04,0x04,0x88,0x70,0x00,/*"b",66*/
  120. 0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x70,0x88,0x04,0x04,0x04,0x88,0x00,/*"c",67*/
  121. 0x00,0x00,0x01,0x01,0x01,0x09,0x0F,0x00,0x00,0xF8,0x04,0x04,0x04,0x08,0xFC,0x04,/*"d",68*/
  122. 0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xF8,0x24,0x24,0x24,0x24,0xE8,0x00,/*"e",69*/
  123. 0x00,0x01,0x01,0x07,0x09,0x09,0x04,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,/*"f",70*/
  124. 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0xD6,0x29,0x29,0x29,0xC9,0x06,0x00,/*"g",71*/
  125. 0x08,0x0F,0x00,0x01,0x01,0x01,0x00,0x00,0x04,0xFC,0x84,0x00,0x00,0x04,0xFC,0x04,/*"h",72*/
  126. 0x00,0x01,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,/*"i",73*/
  127. 0x00,0x00,0x00,0x01,0x19,0x19,0x00,0x00,0x00,0x03,0x01,0x01,0x01,0xFE,0x00,0x00,/*"j",74*/
  128. 0x08,0x0F,0x00,0x00,0x01,0x01,0x01,0x00,0x04,0xFC,0x24,0x60,0x94,0x0C,0x04,0x00,/*"k",75*/
  129. 0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,/*"l",76*/
  130. 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x04,0xFC,0x04,0x00,0xFC,0x04,0x00,0xFC,/*"m",77*/
  131. 0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x04,0xFC,0x84,0x00,0x00,0x04,0xFC,0x04,/*"n",78*/
  132. 0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0xF8,0x04,0x04,0x04,0x04,0xF8,0x00,/*"o",79*/
  133. 0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0xFF,0x89,0x04,0x04,0x88,0x70,0x00,/*"p",80*/
  134. 0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x00,0x00,0x70,0x88,0x04,0x04,0x89,0xFF,0x01,/*"q",81*/
  135. 0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x04,0x04,0xFC,0x84,0x04,0x00,0x80,0x00,/*"r",82*/
  136. 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0xCC,0x24,0x24,0x24,0x24,0x98,0x00,/*"s",83*/
  137. 0x00,0x01,0x01,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0xF8,0x04,0x04,0x08,0x00,/*"t",84*/
  138. 0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xF8,0x04,0x04,0x04,0x08,0xFC,0x04,/*"u",85*/
  139. 0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0xC0,0x30,0x0C,0x30,0xC0,0x00,0x00,/*"v",86*/
  140. 0x01,0x01,0x00,0x01,0x01,0x00,0x01,0x01,0x80,0x70,0x0C,0x30,0xE0,0x1C,0x60,0x80,/*"w",87*/
  141. 0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x04,0x8C,0x70,0x74,0x8C,0x04,0x00,/*"x",88*/
  142. 0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x81,0x61,0x1E,0x18,0x60,0x80,0x00,/*"y",89*/
  143. 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x84,0x0C,0x34,0x44,0x84,0x0C,0x00,/*"z",90*/
  144. 0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,/*"{",91*/
  145. 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,/*"|",92*/
  146. 0x40,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,/*"}",93*/
  147. 0x00,0x40,0x80,0x40,0x40,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",94*/
  148. };
  149. uint8_t const number_table_8x16[]=
  150. {
  151. 0xF8,0xF8,0x0C,0xC4, 0x0C,0xF8,0xF0,0x00, 0x03,0x07,0x0C,0x08, 0x0C,0x07,0x03,0x00, //-0- ASCII:0X30
  152. 0x00,0x10,0x18,0xFC, 0xFC,0x00,0x00,0x00, 0x00,0x08,0x08,0x0F, 0x0F,0x08,0x08,0x00, //-1-
  153. 0x08,0x0C,0x84,0xC4, 0x64,0x3C,0x18,0x00, 0x0E,0x0F,0x09,0x08, 0x08,0x0C,0x0C,0x00, //-2-
  154. 0x08,0x0C,0x44,0x44, 0x44,0xFC,0xB8,0x00, 0x04,0x0C,0x08,0x08, 0x08,0x0F,0x07,0x00, //-3-
  155. 0xC0,0xE0,0xB0,0x98, 0xFC,0xFC,0x80,0x00, 0x00,0x00,0x00,0x08, 0x0F,0x0F,0x08,0x00, //-4- ASCII:0X34
  156. 0x7C,0x7C,0x44,0x44, 0x44,0xC4,0x84,0x00, 0x04,0x0C,0x08,0x08, 0x08,0x0F,0x07,0x00, //-5-
  157. 0xF0,0xF8,0x4C,0x44, 0x44,0xC0,0x80,0x00, 0x07,0x0F,0x08,0x08, 0x08,0x0F,0x07,0x00, //-6-
  158. 0x0C,0x0C,0x04,0x84, 0xC4,0x7C,0x3C,0x00, 0x00,0x00,0x0F,0x0F, 0x00,0x00,0x00,0x00, //-7-
  159. 0xB8,0xFC,0x44,0x44, 0x44,0xFC,0xB8,0x00, 0x07,0x0F,0x08,0x08, 0x08,0x0F,0x07,0x00, //-8-
  160. 0x38,0x7C,0x44,0x44, 0x44,0xFC,0xF8,0x00, 0x00,0x08,0x08,0x08, 0x0C,0x07,0x03,0x00, //-9-
  161. };
  162. uint8_t const vollgoLogo94_68[]=
  163. {
  164. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  165. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  166. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x3F,0x7F,0x7F,0x7F,0xFF,
  167. 0x7F,0x7F,0x7F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  168. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  169. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  170. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  171. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,
  172. 0x01,0x01,0x01,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF8,0xF8,0xFC,0xFC,0xFC,0xF8,
  173. 0xF8,0xF0,0xE0,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,
  174. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  175. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  176. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  177. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  178. 0xFF,0xFF,0x7F,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  179. 0x00,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1E,0x00,0x00,
  180. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  181. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  182. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0F,0x0F,0x0F,
  183. 0x0F,0x0F,0x07,0x03,0x01,0x00,0x80,0xC0,0xE0,0xE0,0xF0,0xF0,0xF0,0xE0,0xF0,0xF8,
  184. 0xFC,0x7E,0x3F,0x1F,0x0F,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0x3F,0x7E,0xFC,
  185. 0xF8,0xF0,0xE0,0xE0,0xF0,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x03,0x07,
  186. 0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  187. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  188. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  189. 0xFF,0xFF,0xFF,0xF9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  190. 0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0x00,0x00,0x00,
  191. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,
  192. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  193. 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x3F,0x3F,
  194. 0x3F,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0xC0,0xE0,
  195. 0xF0,0xF8,0xFF,0xFF,0x7F,0x3F,0x3F,0x7F,0x7F,0x7F,0x3F,0x3F,0x1F,0x0F,0x03,0x00,
  196. 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x07,0x0F,0x1F,0x3F,0x3F,
  197. 0x7F,0x7F,0x7F,0x3F,0x3F,0x7F,0xFF,0xF3,0xE0,0xC0,0x80,0x00,0x00,0x80,0x80,0x80,
  198. 0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x0F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x3F,0x3F,
  199. 0x3F,0x1F,0x0F,0x01,0x80,0xE0,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFE,
  200. 0xFF,0x8F,0x0F,0x07,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x07,
  201. 0xEF,0xFF,0xFF,0xFE,0xFC,0xFC,0xFC,0xFC,0xFE,0xFF,0xFF,0xFF,0xC7,0x03,0x03,0x01,
  202. 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x07,0xEF,0xFF,0xFF,0xFE,0xFC,0xFC,0xFC,
  203. 0xFC,0xFC,0xFC,0xFE,0xFF,0xDF,0x0F,0x07,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x01,
  204. 0x03,0x07,0x0F,0x1F,0xBF,0xFE,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,
  205. 0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
  206. 0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDE,0x80,0x00,
  207. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,
  208. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDE,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  209. 0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  210. 0xFF,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  211. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  212. 0xC0,0xC0,0xE0,0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
  213. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xE0,0xF0,0xF0,0xF0,
  214. 0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  215. 0x00,0x00,0x00,0x00,0xC0,0xC0,0xE0,0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x00,
  216. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  217. };
  218. imageParams_ts imageParams[5];
  219. static void myLCD_delay(uint32_t time_us)
  220. {
  221. uint16_t i = 0;
  222. uint32_t j = 0;
  223. for ( j = 0; j < time_us; j++)
  224. {
  225. for (i = 0; i < 10; i++)
  226. {
  227. ;
  228. }
  229. }
  230. }
  231. static void myLCD_start_flag(void)
  232. {
  233. LCD_CLK_H(); /*START FLAG*/
  234. LCD_SDA_H(); /*START FLAG*/
  235. LCD_SDA_L(); /*START FLAG*/
  236. }
  237. static void myLCD_stop_flag(void)
  238. {
  239. LCD_CLK_H(); /*STOP FLAG*/
  240. LCD_SDA_L(); /*STOP FLAG*/
  241. LCD_SDA_H(); /*STOP FLAG*/
  242. }
  243. static uint8_t i2c_wait_ack(void)
  244. {
  245. uint16_t timeoutCnt = 0;
  246. myLCD_setSdaMode(GPIO_Mode_IN_FLOATING);
  247. LCD_CLK_H();
  248. while (READ_LCD_SDA())
  249. {
  250. timeoutCnt++;
  251. if (timeoutCnt > 2500)
  252. {
  253. return 0;
  254. }
  255. }
  256. LCD_CLK_L();
  257. return 1;
  258. }
  259. static void myLCD_transfer(uint8_t src)
  260. {
  261. uint8_t i;
  262. // myLCD_setSdaMode(GPIO_Mode_Out_OD);
  263. for(i = 0; i < 8;i ++)
  264. {
  265. LCD_CLK_L();
  266. if(src & 0x80)
  267. {
  268. LCD_SDA_H();
  269. }
  270. else
  271. {
  272. LCD_SDA_L();
  273. }
  274. LCD_CLK_H();
  275. LCD_CLK_L();
  276. src = src << 1;
  277. }
  278. LCD_SDA_L();
  279. LCD_CLK_H();
  280. LCD_CLK_L();
  281. }
  282. static uint8_t myLCD_receiver(bool ack)
  283. {
  284. uint8_t i;
  285. uint8_t ret = 0;
  286. myLCD_setSdaMode(GPIO_Mode_IN_FLOATING);
  287. for(i = 0; i < 8;i ++)
  288. {
  289. LCD_CLK_L();
  290. // myLCD_delay(3);
  291. LCD_CLK_H();
  292. ret = ret << 1;
  293. if(READ_LCD_SDA())
  294. {
  295. ret ++;
  296. }
  297. // myLCD_delay(3);
  298. }
  299. myLCD_setSdaMode(GPIO_Mode_Out_OD);
  300. LCD_CLK_L();
  301. // myLCD_delay(1);
  302. if (ack)
  303. {
  304. LCD_SDA_L();
  305. }
  306. else
  307. {
  308. LCD_SDA_H();
  309. }
  310. // myLCD_delay(1);
  311. LCD_CLK_H();
  312. // myLCD_delay(4);
  313. LCD_CLK_L();
  314. // myLCD_delay(1);
  315. if (ack)
  316. {
  317. LCD_SDA_H();
  318. }
  319. else
  320. {
  321. LCD_SDA_L();
  322. }
  323. return ret;
  324. }
  325. static void mySensor_transfer_command(uint16_t cmd)
  326. {
  327. myLCD_start_flag();
  328. myLCD_transfer(SENSOR_DEVICE_ADDR);
  329. myLCD_delay(50);
  330. myLCD_transfer(cmd >> 8);
  331. myLCD_delay(50);
  332. myLCD_transfer(cmd);
  333. myLCD_stop_flag();
  334. }
  335. static void mySensor_read(uint8_t *readData, uint8_t len)
  336. {
  337. uint8_t i;
  338. myLCD_start_flag();
  339. myLCD_transfer(SENSOR_DEVICE_ADDR | 0x01);
  340. LCD_SDA_H();
  341. myLCD_delay(2000);
  342. for ( i = 0; i < len; i++)
  343. {
  344. readData[i] = myLCD_receiver(i==(len - 1)?false:true);
  345. }
  346. myLCD_stop_flag();
  347. }
  348. //-----------------------------------------------------------------------------
  349. /**
  350. *
  351. * 兼容SHT3x,SHT2X,HTU2x
  352. */
  353. static float conversionTemperature(unsigned int rawValue)
  354. {
  355. // calculate temperature [掳C]
  356. // T = -45 + 175 * rawValue / (2^16-1)
  357. return 175.0f * (float)rawValue / 65535.0f - 45.0f;
  358. }
  359. static float conversionRelativeHumidity(unsigned int rawValue)
  360. {
  361. // calculate relative humidity [%RH]
  362. // RH = rawValue / (2^16-1) * 100
  363. return 100.0f * (float)rawValue / 65535.0f;
  364. }
  365. //-----------------------------------------------------------------------------
  366. int SHT3X_getPresentValue(int *pTemp, int *pHumit, unsigned char decimalPlaces)
  367. {
  368. int retSta = 0; //
  369. unsigned int rawValueTemp; //
  370. unsigned int rawValueHumi; //
  371. uint8_t readTempt[6];
  372. mySensor_transfer_command(0x2C06);
  373. myLCD_delay(50);
  374. mySensor_read(readTempt, 6);
  375. rawValueTemp = (unsigned int)readTempt[0]<<8 | readTempt[1];
  376. rawValueHumi = (unsigned int)readTempt[3]<<8 | readTempt[4];
  377. *pTemp = (int)(conversionTemperature(rawValueTemp)*pow(10,decimalPlaces));//& (0x00ff)
  378. *pHumit = (int)(conversionRelativeHumidity(rawValueHumi)*pow(10,decimalPlaces));
  379. return retSta;
  380. }
  381. //写命令到液晶显示模块
  382. static void myLCD_transfer_command(uint8_t cmd)
  383. {
  384. commandType = cmd;
  385. myLCD_start_flag();
  386. myLCD_transfer(LCD_DEVICE_ADDR);
  387. myLCD_transfer(0x80);
  388. myLCD_transfer(cmd);
  389. myLCD_stop_flag();
  390. }
  391. //写数据到液晶显示模块
  392. static void myLCD_transfer_data(uint8_t src)
  393. {
  394. myLCD_start_flag();
  395. myLCD_transfer(LCD_DEVICE_ADDR);
  396. myLCD_transfer(0xC0);
  397. myLCD_transfer(src);
  398. myLCD_stop_flag();
  399. }
  400. static void myLCD_setCommandType(commandType_te command)
  401. {
  402. if (commandType != command)
  403. {
  404. myLCD_transfer_command(command);
  405. }
  406. }
  407. void myLCD_setDisplayOnOff(uint8_t status)
  408. {
  409. myLCD_setCommandType(CMDT_EXT_CMD1); //
  410. myLCD_transfer_command(status);
  411. }
  412. void myLCD_diplayMode(displayMode_te mode)
  413. {
  414. myLCD_setCommandType(CMDT_EXT_CMD1);
  415. myLCD_transfer_command(LCD_CMD_DISPLAY_MODE); //Display Mode
  416. myLCD_transfer_data(mode); //10=Monochrome Mode,11=4Gray
  417. }
  418. /**
  419. * level_b,浅灰度
  420. * level_d,浅灰度
  421. * 注意:调用该函数前,需先设置@LCD_CMD_DISPLAY_MODE为@DM_4GRAY_MODE
  422. */
  423. void myLCD_setGrayLevel(uint8_t level_b, uint8_t level_d)
  424. {
  425. myLCD_setCommandType(CMDT_EXT_CMD2);
  426. myLCD_transfer_command(LCD_CMD_SET_GRAY_LEVEL); // Gray Level
  427. myLCD_transfer_data(0x00);
  428. myLCD_transfer_data(0x00);
  429. myLCD_transfer_data(0x00);
  430. myLCD_transfer_data(level_b & 0x1f); //浅灰度
  431. myLCD_transfer_data(level_b & 0x1f); //浅灰度
  432. myLCD_transfer_data(level_b & 0x1f); //浅灰度
  433. myLCD_transfer_data(0x00);
  434. myLCD_transfer_data(0x00);
  435. myLCD_transfer_data(level_d & 0x1f); //深灰度
  436. myLCD_transfer_data(0x00);
  437. myLCD_transfer_data(0x00);
  438. myLCD_transfer_data(level_d & 0x1f); //深灰度
  439. myLCD_transfer_data(level_d & 0x1f); //深灰度
  440. myLCD_transfer_data(level_d & 0x1f); //深灰度
  441. myLCD_transfer_data(0x00);
  442. myLCD_transfer_data(0x00);
  443. }
  444. #define MAX_LCD_VOP_VALUE 511
  445. void myLCD_setVop(uint16_t value)
  446. {
  447. value = value & MAX_LCD_VOP_VALUE;
  448. myLCD_transfer_command(CMDT_EXT_CMD1);
  449. myLCD_transfer_command(LCD_CMD_SET_VOP); //
  450. myLCD_transfer_data(value & 0x3f); //
  451. myLCD_transfer_data((value >> 6) & 0x07); //
  452. }
  453. void myLCD_resetLcd(void)
  454. {
  455. LCD_RST_ENABLE();
  456. myLCD_delay(100);
  457. LCD_RST_DISABLE();
  458. }
  459. /*写 LCD 行列地址:X 为起始的列地址,Y 为起始的行地址,x_total,y_total 分别为列地址及行地址的起点到
  460. 终点的差值 */
  461. void myLCD_displayAddress(int x,int y,int x_total,int y_total)
  462. {
  463. x = x - 1;
  464. y = y + 7;
  465. myLCD_setCommandType(CMDT_EXT_CMD1);
  466. myLCD_transfer_command(LCD_CMD_CLUMN_ADDR_SETTING); //Set Column Address
  467. myLCD_transfer_data(x);
  468. myLCD_transfer_data(x + x_total - 1);
  469. myLCD_transfer_command(LCD_CMD_PAGE_ADDR_SETTING); //Set Page Address
  470. myLCD_transfer_data(y);
  471. myLCD_transfer_data(y + y_total - 1);
  472. myLCD_transfer_command(LCD_CMD_WRITE_DISPLAY_DATA);
  473. }
  474. //写入一组 16x16 点阵的汉字字符串(字符串表格中需含有此字)
  475. //括号里的参数:(页,列,汉字字符串)
  476. /**
  477. *
  478. * inverseMode:
  479. * column: min=1,max=193
  480. * page: min=1,max=11
  481. */
  482. void myLCD_16x16(inverseMode_te inverseMode, uint8_t column, uint8_t page, char *text)
  483. {
  484. uint16_t i,j,k;
  485. uint16_t address;
  486. j=0;
  487. while(text[j] != '\0')
  488. {
  489. i=0;
  490. address=1;
  491. while(Chinese_text_16x16[i] > 0x7e)
  492. {
  493. if(Chinese_text_16x16[i] == text[j])
  494. {
  495. if(Chinese_text_16x16[i+1] == text[j+1])
  496. {
  497. address=i*16;
  498. break;
  499. }
  500. }
  501. i += 2;
  502. }
  503. if(address != 1)
  504. {
  505. myLCD_displayAddress(column,page,16,2);
  506. for(k=0;k<2;k++)
  507. {
  508. for(i=0;i<16;i++)
  509. {
  510. if (inverseMode == IM_INVERSE)
  511. {
  512. myLCD_transfer_data(~Chinese_code_16x16[address]);
  513. }
  514. else
  515. {
  516. myLCD_transfer_data(Chinese_code_16x16[address]);
  517. }
  518. address++;
  519. }
  520. }
  521. j +=2;
  522. }
  523. else
  524. {
  525. myLCD_displayAddress(column,page,16,2);
  526. for(k=0;k<2;k++)
  527. {
  528. for(i=0;i<16;i++)
  529. {
  530. if (inverseMode == IM_INVERSE)
  531. {
  532. myLCD_transfer_data(0xff);
  533. }
  534. else
  535. {
  536. myLCD_transfer_data(0x00);
  537. }
  538. }
  539. }
  540. j++;
  541. }
  542. column+=16;
  543. }
  544. }
  545. /**
  546. *
  547. * column: min=1,max=193
  548. * page: min=1,max=6
  549. */
  550. void myLCD_8x16(inverseMode_te inverseMode, int column, int page, char *text)
  551. {
  552. uint16_t i=0,j,k;
  553. int pageCount;
  554. int columnCount;
  555. pageCount = page;
  556. while(text[i]>0x00)
  557. {
  558. if((text[i]>=0x20)&&(text[i]<=0x7e))
  559. {
  560. j = text[i]-0x20;
  561. myLCD_displayAddress(column, page * 2 - 1, 8, 2);
  562. columnCount = column;
  563. pageCount = page;
  564. for(k=0;k<16;k++)
  565. {
  566. if (k == 8)
  567. {
  568. pageCount ++;
  569. columnCount = column;
  570. }
  571. columnCount ++;
  572. if (pageCount > MAX_PAGE_COUNT)
  573. {
  574. break;
  575. }
  576. if (columnCount > MAX_COLUMN_COUNT)
  577. {
  578. break;
  579. }
  580. if (inverseMode == IM_INVERSE)
  581. {
  582. myLCD_transfer_data(~ascii_table_8x16[j][k]);
  583. }
  584. else
  585. {
  586. myLCD_transfer_data(ascii_table_8x16[j][k]);
  587. }
  588. }
  589. column += 8;
  590. if (column > MAX_COLUMN_COUNT)
  591. {
  592. break;
  593. }
  594. }
  595. i++;
  596. }
  597. }
  598. /**
  599. *
  600. * column: min=1,max=193
  601. * page: min=1,max=11
  602. */
  603. void myLCD_str8x16(inverseMode_te inverseMode, int column, int page, char *fmt, ...)
  604. {
  605. va_list va;
  606. char tempTab[50];
  607. int len;
  608. va_start(va, fmt);
  609. memset(tempTab, 0, sizeof(tempTab));
  610. vsnprintf(tempTab, (int)sizeof(tempTab), fmt, va);
  611. len = strlen(tempTab);
  612. if (len > MAX_COLUMN_COUNT)
  613. {
  614. len = MAX_COLUMN_COUNT;
  615. }
  616. if (column == HORIZONTAL_CENTER)
  617. {
  618. len = strlen(tempTab) * 8 / 2;
  619. column = MAX_COLUMN_COUNT / 2 - len;
  620. }
  621. if (column == HORIZONTAL_RIGHT)
  622. {
  623. len = strlen(tempTab) * 8;
  624. column = MAX_COLUMN_COUNT - len;
  625. }
  626. if (column == HORIZONTAL_LEFT)
  627. {
  628. column = 1;
  629. }
  630. myLCD_8x16(inverseMode, column, page, tempTab);
  631. va_end(va);
  632. }
  633. /*显示 32*32 点阵的汉字或等同于 32*32 点阵的图像*/
  634. void myLCD_32x32(inverseMode_te inverseMode, int x,int y,char *dp)
  635. {
  636. int i,j;
  637. myLCD_displayAddress(x,y,32,4);
  638. for(i=0;i<4;i++)
  639. {
  640. for(j=0;j<32;j++)
  641. {
  642. myLCD_transfer_data(*dp);
  643. dp++;
  644. }
  645. }
  646. }
  647. void myLCD_displayDot(int x, int y)
  648. {
  649. myLCD_displayAddress(x, y, 0, 0);
  650. myLCD_transfer_data(0x01);
  651. }
  652. void myLCD_displayImage(inverseMode_te inverseMode, int x, int y, imageSrc_te index)
  653. {
  654. int j;
  655. int x_count;
  656. int y_count;
  657. x_count = x;
  658. y_count = y;
  659. myLCD_displayAddress(x, y, imageParams[index].width, imageParams[index].heigth / 8);
  660. for(j = 0;j < imageParams[index].width * imageParams[index].heigth / 8;j ++)
  661. {
  662. x_count ++;
  663. if (x_count > MAX_COLUMN_COUNT)
  664. {
  665. x_count = x;
  666. y_count ++;
  667. continue;
  668. }
  669. if (y_count > MAX_PAGE_COUNT)
  670. {
  671. break;
  672. }
  673. if (inverseMode == IM_INVERSE)
  674. {
  675. myLCD_transfer_data(~(*imageParams[index].imageSrc));
  676. }
  677. else
  678. {
  679. myLCD_transfer_data(*imageParams[index].imageSrc);
  680. }
  681. imageParams[index].imageSrc++;
  682. }
  683. }
  684. /**
  685. * 显示滚动驱动
  686. *
  687. * 注意:未调试
  688. *
  689. */
  690. void myLCD_scroll(scrollDisplayMode_te mode, uint8_t startAddr, uint8_t endAddr, uint8_t pages)
  691. {
  692. myLCD_setCommandType(CMDT_EXT_CMD1);
  693. myLCD_transfer_command(LCD_CMD_SCROLL_AREA_DISPLAY); //
  694. myLCD_transfer_data(startAddr); //
  695. myLCD_transfer_data(endAddr); //
  696. myLCD_transfer_data(pages); //
  697. myLCD_transfer_data(mode); //
  698. }
  699. /**
  700. * 显示滚动驱动
  701. *
  702. * 注意:未调试
  703. *
  704. */
  705. void myLCD_scrollLine(uint8_t pages)
  706. {
  707. myLCD_setCommandType(CMDT_EXT_CMD1);
  708. myLCD_transfer_command(LCD_CMD_SCROLL_AREA_DISPLAY_INIT); //
  709. myLCD_transfer_data(pages); //
  710. }
  711. void myLCD_clearFull(void)
  712. {
  713. int i;
  714. myLCD_displayAddress(1, 1, MAX_COLUMN_COUNT, MAX_PAGE_COUNT);
  715. for(i = 0; i< MAX_COLUMN_COUNT * MAX_PAGE_COUNT; i++)
  716. {
  717. myLCD_transfer_data(0x00);
  718. }
  719. }
  720. void myLCD_displayBlock(int x,int y)
  721. {
  722. int i;
  723. myLCD_displayAddress(x, y, 8, 1);
  724. for(i = 0; i< 4; i++)
  725. {
  726. myLCD_transfer_data(0xff);
  727. }
  728. }
  729. void test(int x,int y)
  730. {
  731. int i,j;
  732. myLCD_setCommandType(CMDT_EXT_CMD1);
  733. myLCD_displayAddress(x,y,256,16);
  734. for(i=0;i<16;i++)
  735. {
  736. for(j=0;j<255;j++)
  737. {
  738. myLCD_transfer_data(0x55);
  739. }
  740. }
  741. }
  742. void myLCD_setSdaMode(GPIOMode_TypeDef GPIO_Mode)
  743. {
  744. static GPIOMode_TypeDef mode;
  745. GPIO_InitTypeDef GPIO_InitStructure;
  746. if (GPIO_Mode == mode)
  747. {
  748. return;
  749. }
  750. GPIO_InitStructure.GPIO_Pin = BOARD_PIN_LCD_SDA;
  751. GPIO_InitStructure.GPIO_Mode = GPIO_Mode;
  752. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  753. GPIO_Init(BOARD_PORT_LCD_SDA, &GPIO_InitStructure);
  754. mode = GPIO_Mode;
  755. }
  756. void myLCD_init(void)
  757. {
  758. GPIO_InitTypeDef GPIO_InitStructure;
  759. GPIO_InitStructure.GPIO_Pin = BOARD_PIN_LCD_BG_LED;
  760. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  761. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  762. GPIO_Init(BOARD_PORT_LCD_BG_LED, &GPIO_InitStructure);
  763. GPIO_InitStructure.GPIO_Pin = BOARD_PIN_LCD_SDA;
  764. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  765. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  766. GPIO_Init(BOARD_PORT_LCD_SDA, &GPIO_InitStructure);
  767. GPIO_InitStructure.GPIO_Pin = BOARD_PIN_LCD_CLK;
  768. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  769. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  770. GPIO_Init(BOARD_PORT_LCD_CLK, &GPIO_InitStructure);
  771. GPIO_InitStructure.GPIO_Pin = BOARD_PIN_LCD_RST;
  772. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  773. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  774. GPIO_Init(BOARD_PORT_LCD_RST, &GPIO_InitStructure);
  775. LCD_BG_LED_ON();
  776. LCD_RST_ENABLE();
  777. myLCD_delay(100);
  778. LCD_RST_DISABLE();
  779. myLCD_delay(10000);
  780. myLCD_setCommandType(CMDT_EXT_CMD1);
  781. myLCD_transfer_command(LCD_CMD_POWER_SAVE_OFF); //Sleep out
  782. myLCD_setCommandType(CMDT_EXT_CMD2);
  783. myLCD_transfer_command(0xD7); //Autoread disable
  784. myLCD_transfer_data(0X9F); //
  785. myLCD_transfer_command(LCD_CMD_SET_LCD_OFFSET_VOL); //Analog SET
  786. myLCD_transfer_data(0x00); //OSC Frequency adjustment
  787. myLCD_transfer_data(0x01); //Frequency on booster capacitors->6KHz
  788. myLCD_transfer_data(0x03); //Bias=1/11
  789. // myLCD_setGrayLevel(0x12, 0x17);
  790. myLCD_setCommandType(CMDT_EXT_CMD1);
  791. myLCD_transfer_command(LCD_CMD_DATA_FORMAT_D7_D0); //Page Address setting
  792. myLCD_transfer_command(LCD_CMD_PAGE_ADDR_SETTING); //Page Address setting
  793. myLCD_transfer_data(0X00); // XS=0
  794. myLCD_transfer_data(0X14); // XE=159 0x28
  795. myLCD_transfer_command(LCD_CMD_CLUMN_ADDR_SETTING); //Clumn Address setting
  796. myLCD_transfer_data(0X00); // XS=0
  797. myLCD_transfer_data(0Xff); // XE=256
  798. myLCD_transfer_command(LCD_CMD_SCAN_DIRECTION); //Data scan direction
  799. myLCD_transfer_data(0x00); //MX.MY=Normal
  800. myLCD_transfer_data(0xA6);
  801. myLCD_transfer_command(LCD_CMD_DISPLAY_CONTROL); //Display Control
  802. myLCD_transfer_data(0X00); //
  803. myLCD_transfer_data(0X9F); //Duty=160
  804. myLCD_transfer_data(0X20); //Nline=off
  805. myLCD_diplayMode(DM_MONO_MODE);
  806. myLCD_setVop(250);//→←↑↓¤
  807. myLCD_transfer_command(LCD_CMD_POWER_CONTROL); //Power control
  808. myLCD_transfer_data(0x0B); //D0=regulator ; D1=follower ; D3=booste, on:1 off:0
  809. myLCD_delay(10000);
  810. myLCD_transfer_command(LCD_CMD_DISPLAY_ON); //Display on
  811. myLCD_delay(10000);
  812. myLCD_clearFull();
  813. imageParams[0].imageSrc = (uint8_t *)vollgoLogo94_68;
  814. imageParams[0].width = 94;
  815. imageParams[0].heigth = 72;
  816. }