QC12864B.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. #include "QC12864B.h"
  2. char QC12864B_String[4][2 * 8 + 1]; //4行,每行汉字8个
  3. /********************************************************************
  4. * 名称 : delay()
  5. * 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
  6. * 输入 : t
  7. * 输出 : 无
  8. ***********************************************************************/
  9. /*
  10. void delay(unsigned int t)
  11. {
  12. unsigned int i,j;
  13. for(i=0; i<t; i++)
  14. for(j=0; j<10; j++);
  15. }
  16. */
  17. //24: 4.5us-5us-4.5us-5us的波形
  18. void delay ( unsigned int Number )
  19. {
  20. u32 i = 0;
  21. while ( Number-- )
  22. {
  23. i = 24;
  24. while ( i-- ); //12
  25. }
  26. }
  27. /********************************************************************
  28. * 名称 : sendbyte()
  29. * 功能 : 按照液晶的串口通信协议,发送数据
  30. * 输入 : zdata
  31. * 输出 : 无
  32. ***********************************************************************/
  33. void sendbyte ( unsigned char zdata )
  34. {
  35. unsigned int i;
  36. for ( i = 0; i < 8; i++ )
  37. {
  38. if ( ( zdata << i ) & 0x80 )
  39. {
  40. SID = 1;
  41. }
  42. else
  43. {
  44. SID = 0;
  45. }
  46. SCLK = 0;
  47. delay ( 1 );
  48. SCLK = 1;
  49. delay ( 1 );
  50. }
  51. }
  52. /********************************************************************
  53. * 名称 : write_com()
  54. * 功能 : 写串口指令
  55. * 输入 : cmdcode
  56. * 输出 : 无
  57. ***********************************************************************/
  58. void write_com ( unsigned char cmdcode )
  59. {
  60. CS = 1;
  61. sendbyte ( 0xf8 );
  62. sendbyte ( cmdcode & 0xf0 );
  63. sendbyte ( ( cmdcode << 4 ) & 0xf0 );
  64. delay ( 2 );
  65. CS = 0;
  66. }
  67. /********************************************************************
  68. * 名称 : write_data()
  69. * 功能 : 写串口指令
  70. * 输入 : cmdcode
  71. * 输出 : 无
  72. ***********************************************************************/
  73. void write_data ( unsigned char Dispdata )
  74. {
  75. CS = 1;
  76. sendbyte ( 0xfa );
  77. sendbyte ( Dispdata & 0xf0 );
  78. sendbyte ( ( Dispdata << 4 ) & 0xf0 );
  79. delay ( 2 );
  80. CS = 0;
  81. }
  82. /********************************************************************
  83. * 名称 : lcdinit()
  84. * 功能 : 初始化函数
  85. * 输入 : cmdcode
  86. * 输出 : 无
  87. ***********************************************************************/
  88. void LcdInit()
  89. {
  90. RST = 0;
  91. delay ( 100 );
  92. RST = 1;
  93. delay ( 20000 );
  94. write_com ( 0x30 ); //8 位介面,基本指令集
  95. delay ( 50 );
  96. write_com ( 0x0c );//显示打开,光标关,反白关
  97. delay ( 50 );
  98. }
  99. /********************************************************************
  100. * 名称 : hzkdis()
  101. * 功能 : 显示字符串
  102. * 输入 : *s
  103. * 输出 : 无
  104. ***********************************************************************/
  105. void hzkdis ( unsigned char const *s )
  106. {
  107. while ( *s > 0 )
  108. {
  109. write_data ( *s );
  110. s++;
  111. delay ( 50 );
  112. }
  113. }
  114. void LCD_Write_String ( u8 X, uc8 *s )
  115. {
  116. u8 address;
  117. switch ( X )
  118. {
  119. case 1:
  120. address = 0x80;
  121. break;
  122. case 2:
  123. address = 0x90;
  124. break;
  125. case 3:
  126. address = 0x88;
  127. break;
  128. case 4:
  129. address = 0x98;
  130. break;
  131. default:
  132. address = 0x80;
  133. break;
  134. }
  135. write_com ( address );
  136. hzkdis ( s );
  137. }
  138. void LcdPrint ( u8 X, uc8 *s )
  139. {
  140. if ( X < 1 )
  141. {
  142. X = 1;
  143. }
  144. else if ( X > 4 )
  145. {
  146. X = 4;
  147. }
  148. sprintf ( QC12864B_String[X - 1], "%s" , s );
  149. }
  150. void LcdRefresh ( void )
  151. {
  152. #if LCD_def
  153. u8 i;
  154. for ( i = 0; i < 4; i++ )
  155. {
  156. LCD_Write_String ( i + 1, ( uc8 * ) QC12864B_String[i] );
  157. }
  158. #endif
  159. }
  160. /********************************************************************
  161. * 名称 : Test()
  162. * 功能 : 显示子函数
  163. * 输入 : 无
  164. * 输出 : 无
  165. ***********************************************************************/
  166. void Test()
  167. {
  168. PAout->b5 = 0;
  169. delay ( 1 );
  170. PAout->b5 = 1;
  171. delay ( 10 );
  172. PAout->b5 = 0;
  173. delay ( 100 );
  174. PAout->b5 = 1;
  175. write_com ( 0x03 );
  176. delay ( 50 );
  177. write_com ( 0x81 );
  178. hzkdis ( " HOT-51" );
  179. write_com ( 0x91 );
  180. hzkdis ( "单片机开发板" );
  181. write_com ( 0x89 );
  182. hzkdis ( " " );
  183. write_com ( 0x98 );
  184. hzkdis ( " 东流电子" );
  185. }