1、lcd_dataP0 /数据口3. sbitRS = P24; /选择寄存器(并行) 0:指令寄存器 1:数据寄存器;4. sbitRW = P25; /读写控制脚(并行) 0:写入 1:读出5. sbitE= P26; /读写数据启始脚(并行)6. sbitPSB= P21; /串并方式选择引脚,0为串行模式,1为8/4位数据口模式7. sbitRST= P23; /复位引脚8.9. /*10. /延时函数11. /*12. void delay(unsigned int k)13. 14. unsigned int i;15. unsigned char j;16. for(i=0;ik;
2、i+)17. 18. for(j=0;j0;x-)28. for(y=121;yy-);29. 30. /*31. /写命令函数32. /*33. void LcdWcom(unsigned char WCom)34. 35. delay(1);36. RS=0;/指明操作对象为指令寄存器37. RW=0; /指明为写操作38. E=1;39. lcd_data=WCom; /将命令写入总线40. E=0;41. 42. /*43. /写数据函数44. /*45. void LcdWdata(unsigned char WData)46. 47. 48. RS=1; /指明操作对象为数据寄存器
3、49. 50. 51. lcd_data=WData; /将数据写入总线52. 53. 二、初始化操作初始化操作如下:芯片上电;延时40ms以上;复位操作:RST出现一个上升沿(RST=1;RST=0;RST=1;);功能设定;延时100us以上;6再次进行功能设定;7延时37us;8显示开关控制;910清除显示;11延时10ms以上;12进入点设置;13初始化结束;这里我遇到了一个小问题,我的液晶按照这个顺序进行初始化结果不正确,无法显示,最后我把调整了一下就可以了,调整后的顺序为:清除显示进入点设置显示开关控制,不知道是什么原因,知道的告诉我一声54. /*55. /显示初始化函数56.
4、/*57. void Display_Init(void)58. 59. delay_ms(45); /延时45ms60. PSB=1; /8位并行口61. /复位操作62. 63. 64. 65. /功能设定66. LcdWcom(0x30); /设置为8位并行口,基本指令集67. delay(10);68. /再次设置为8位并行口,基本指令集69. delay(5);70. / /显示开关控制71. / LcdWcom(0x0c); /游标显示关,正常显示,整体显示开72. / delay(10);73. /清除显示74. LcdWcom(0x01);75. delay_ms(12); /
5、延时12ms76. /进入点设置77. LcdWcom(0x06); /设置为游标右移,DDRAM位地址加1,画面不移动78. 79. LcdWcom(0x0C); /开显示80. 三、显示基本的字符和汉字1、要想显示汉字或字符,首先要确定显示的位置,看看芯片说明书上关于屏幕地址的分配:由于此液晶为128*64,即是横向128个点,竖向64个点,由于该液晶控制器支持的字符为8*16,汉字为16*16,因此只能显示四行,如果是汉字,为每行显示8个,如果是字符,每行显示16个。由上图设置DDRAM地址的指令可知,最高位为1,余下7位为地址值,因此就对应了为什么起始地址为80H的原因(即对应的写地址
6、指令为1000 0000);因此如果你要设定显示的地址为第一行的第一个位置,只需要调用写指令函数,写入0x80即可。存在的问题:参考网上的程序及在试验过程中发现,实际能显示出来的地址分布式这样的0x80 0x81 0x82 0x83 0x84 0x85 0x86 0x87/第一行汉字位置 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97/第二行汉字位置 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f /第三行汉字位置 0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f /第四行汉字位置百思不得其解,尤其让
7、人受不了的是居然是第一行和第三行地址接续,而不是第二行,有明白的高手给讲解一下设定DDRAM地址参考程序:81. /*82. /设置光标函数83. /参数说明:x为行号,y为列号84. /*85. void Set_Cursor(unsigned char x, unsigned char y)86. 87. unsigned char i;88. switch(x)/确定行号89. 90. case 0x00: i=0x80; break;/第一行91. case 0x01: i=0x90;/第二行92. case 0x02: i=0x88;/第三行93. case 0x03: i=0x98
8、;/第四行94. default :95. 96. i = y+i;/确定列号97. LcdWcom(i);/写地址98. 复制代码2、显示字符由数据手册可查看可以显示的字符及其显示码:因此,当你设置好所要显示的光标位置后,即可调用写数据函数,写入对应相应字符的显示码,比如要显示!就应该写入0x21。99. /*100. /显示字符函数101. /*102. void Display_Char(unsigned char Alphabet)103. 104. 105. LcdWdata(Alphabet); /写入需要显示字符的显示码106. 显示!实例:107. /*显示单个字符*/108. Set_Cursor(0,0); /光标地址设定109. Display_Char(0x21); /显示字符!扩展程序:在指定位置显示字符串110. /*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1