drive_12864.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include "drive_12864.h"
  2. #include <stdarg.h> // 标准头文件
  3. #include "stdio.h"
  4. #include "public.h"
  5. void Senbyte(unsigned char command);
  6. void Write_lcd_com(unsigned char command);
  7. void Write_lcd_date(unsigned char date);
  8. void lcd128_init(void);
  9. void Senbyte(unsigned char command)//向12864串行发送1byte数据
  10. {
  11. unsigned char i;
  12. for(i=0;i<8;i++)
  13. {
  14. if((command<<i)&0x80)
  15. {
  16. LCD128_RW_PIN=1;
  17. }
  18. else
  19. {
  20. LCD128_RW_PIN=0;
  21. }
  22. LCD128_EN_PIN=0;//sclk =0
  23. system_delay_us(2);
  24. LCD128_EN_PIN=1;//sclk=1
  25. }
  26. }
  27. void Write_lcd_com(unsigned char command)//向12864写指令函数
  28. {
  29. LCD128_RW_PIN=1;
  30. Senbyte(0xf8);
  31. Senbyte(command&0xf0);
  32. Senbyte((command<<4)&0XF0);
  33. system_delay_us(110);
  34. }
  35. void Write_lcd_date(unsigned char date)//向12864写数据函数
  36. {
  37. LCD128_RW_PIN=1;
  38. Senbyte(0xfa);
  39. Senbyte(date & 0xf0);
  40. Senbyte((date<<4) & 0xf0);
  41. system_delay_us(110);
  42. }
  43. void lcd128_init(void)//12864初始化函数
  44. {
  45. LCD128_EN_PIN_OUT();
  46. LCD128_RW_PIN_OUT();
  47. Write_lcd_com(0x30);//设置8位数据口 基本指令模式
  48. system_delay_us(110);
  49. Write_lcd_com(0xc0);//整体显示开 游标关 反白关
  50. system_delay_us(110);
  51. Write_lcd_com(0x30); //设置8位数据接口,基本指令模式
  52. Write_lcd_com(0x20); //清DDRAM
  53. Write_lcd_com(0x06); //游标及显示右移一位
  54. Write_lcd_com(0x0c); //整体显示开,游标关,反白关
  55. Write_lcd_com(0x01); //写入空格清屏
  56. system_delay_us(110);
  57. Write_lcd_com(0x80); //设置首次显示位置
  58. system_delay_us(110);
  59. }
  60. /************ 写字符数据函数 *****************
  61. 功能:在带字库12864指定位置上显示字符;
  62. 参数
  63. p: 指向待显示数据指针
  64. x: X坐标
  65. y: Y坐标
  66. ************ *********** *****************/
  67. void WriteLcd128_String(char x,char y,char *p)
  68. {
  69. switch(y) // 设置显示地址
  70. {
  71. case 0:Write_lcd_com(0x80 + x); // 第一行
  72. break;
  73. case 1:Write_lcd_com(0x90 + x); // 第二行
  74. break;
  75. case 2:Write_lcd_com(0x88 + x); // 第三行
  76. break;
  77. case 3:Write_lcd_com(0x98 + x); // 第四行
  78. break;
  79. }
  80. while(*p != 0) // 循环显示字符,直到检测到结束字符
  81. {
  82. Write_lcd_date(*p);
  83. // system_delay_us(5);
  84. p++;
  85. }
  86. }
  87. //void L128printf(char x,char y,char *p,...)
  88. //{
  89. // char LcdBuff[16];
  90. // va_list ap;
  91. // va_start(ap,p);
  92. // vsprintf(LcdBuff,p,ap);
  93. // va_end(ap);
  94. // WriteLcd128_String(x,y,LcdBuff);
  95. //}
  96. //