QC12864.txt 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define LCMdata P2
  4. #define Busy 0x80
  5. sbit RS=P0^7;
  6. sbit RW=P0^6;
  7. sbit E=P0^5;
  8. sbit REST=P0^3;
  9. void Display_String(uchar line,uchar *string);
  10. void Wr_Data(uchar wrdata); //写数据
  11. void Wr_Command(uchar wrcommand,busyc); //写指令
  12. void RDbf(void);//读忙状态
  13. void Lcm_Init(void);//液晶初始化
  14. void Delay5Ms(void);//延时 5ms
  15. uchar code string_1[] = {""};
  16. uchar code string_2[] = {""};
  17. uchar code string_3[] = {""};
  18. uchar code string_4[] = {""};
  19. void main(void)
  20. {
  21. Lcm_Init();
  22. Display_String(1,string_1);
  23. Display_String(2,string_2);
  24. Display_String(3,string_3);
  25. Display_String(4,string_4);
  26. while(1);
  27. }
  28. void Display_String(uchar line,uchar *string)
  29. {
  30. uchar addr,i;
  31. if(line==1)
  32. addr=0x80;
  33. if(line==2)
  34. addr=0x90;
  35. if(line==3)
  36. addr=0x88;
  37. if(line==4)
  38. addr=0x98;
  39. Wr_Command(addr,1);
  40. for(i=0;i<16;i++)
  41. {
  42. Wr_Data(*string++);
  43. }
  44. }
  45. void Wr_Data(uchar wrdata) //写数据
  46. {
  47. RDbf();
  48. RS=1;
  49. RW=0;
  50. E=1;
  51. LCMdata=wrdata;
  52. E=0;
  53. }
  54. void Wr_Command(uchar wrcommand,busyc) //写指令
  55. {
  56. if(busyc)
  57. RDbf();
  58. RS=0;
  59. RW=0;
  60. E=1;
  61. LCMdata=wrcommand;
  62. E=0;
  63. }
  64. void RDbf(void) //读忙状态
  65. {
  66. while(1)
  67. {
  68. RS=0;
  69. RW=1;
  70. E=0;
  71. LCMdata=0xFF;
  72. E=1;
  73. if((LCMdata&Busy)==0)
  74. break;
  75. }
  76. }
  77. void Lcm_Init(void)
  78. {
  79. Delay5Ms();
  80. REST=1;
  81. REST=0;
  82. REST=1;
  83. Wr_Command(0x30,0);
  84. Delay5Ms();
  85. Wr_Command(0x30,0); //2次显示模式设置,不用判忙
  86. Delay5Ms();
  87. Wr_Command(0x0C,1); //开显示及光标设置
  88. Delay5Ms();
  89. Wr_Command(0x01,1); //显示清屏
  90. Delay5Ms();
  91. Delay5Ms();
  92. Wr_Command(0x06,1); //显示光标移动设置
  93. Delay5Ms();
  94. }
  95. void Delay5Ms(void) //延时 5ms
  96. {
  97. unsigned int TempCyc=5552;
  98. while(TempCyc--);
  99. }