[新手园地] LCD1602小试

[复制链接]
2205|1
 楼主| 月亮先生 发表于 2012-9-24 23:47 | 显示全部楼层 |阅读模式
参照各位前辈的代码写了个1602的显示,接了个电位调对比度。
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. //实现功能: LCD1602显示
  3. //创建时间: 2012/09/24
  4. //修改时间:
  5. //创建人员: Mr.Moon
  6. /*---------------------------------------------------------------------------------------------------------*/

  7. #include <stdio.h>
  8. #include "NUC1xx.h"
  9. #include "Driver\DrvGPIO.h"
  10. #include "Driver\DrvSYS.h"
  11. /******宏定义LCD1602 RS RW EN 管脚************/
  12. #define LCD_RS E_GPC,15 //LCD1602的RS
  13. #define LCD_EN E_GPC,7 //LCD1602的EN
  14. #define LCD_RW E_GPC,6 //LCD1602的WR
  15. /******宏定义LCD1602 RS RW EN 高低电平************/
  16. #define L_LCD_RS DrvGPIO_ClrBit(LCD_RS) //RS=0
  17. #define H_LCD_RS DrvGPIO_SetBit(LCD_RS) //RS=1
  18. #define L_LCD_EN DrvGPIO_ClrBit(LCD_EN) //EN=0
  19. #define H_LCD_EN DrvGPIO_SetBit(LCD_EN) //EN=1
  20. #define L_LCD_RW DrvGPIO_ClrBit(LCD_RW) //RW=0
  21. #define H_LCD_RW DrvGPIO_SetBit(LCD_RW) //RW=1



  22. int8_t table1[]={"bbs.21ic.com"};
  23. int8_t table2[]={"Mr.Moon"};


  24. /************************************************************************************
  25. ** Function name: Init_GPIO
  26. ** Descriptions: GPIO初始
  27. ** input parameters: none
  28. ** output parameters: none
  29. ** Returned value: none
  30. *************************************************************************************/

  31. void Init_GPIO(void)
  32. {
  33. /* D0~D7----PA0-PA7 */
  34. DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
  35. DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
  36. DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
  37. DrvGPIO_Open( E_GPA, 5,E_IO_OUTPUT);
  38. DrvGPIO_Open( E_GPA, 6, E_IO_OUTPUT);
  39. DrvGPIO_Open( E_GPA, 7, E_IO_OUTPUT );
  40. DrvGPIO_Open( E_GPA, 8, E_IO_OUTPUT );
  41. DrvGPIO_Open( E_GPA, 9, E_IO_OUTPUT );

  42. DrvGPIO_Open( E_GPC, 15, E_IO_OUTPUT); //RS
  43. DrvGPIO_Open( E_GPC, 6, E_IO_OUTPUT); //RW
  44. DrvGPIO_Open( E_GPC, 7, E_IO_OUTPUT ); //EN


  45. }

  46. /************************************************************************************
  47. ** Function name: Init_System
  48. ** Descriptions: 系统设置
  49. ** input parameters: none
  50. ** output parameters: none
  51. ** Returned value: none
  52. *************************************************************************************/
  53. void Init_System(void)
  54. {
  55. UNLOCKREG();
  56. DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); //SYSCLK->WRCON.XTL12M_EN = 1;
  57. DrvSYS_Delay(5000);
  58. LOCKREG();
  59. }


  60. /************************************************************************************
  61. ** Function name: write_com
  62. ** Descriptions: LCD1602写指令
  63. ** input parameters: com
  64. ** output parameters: none
  65. ** Returned value: none
  66. *************************************************************************************/

  67. void write_com(uint8_t com)
  68. {
  69. L_LCD_RS;
  70. DrvGPIO_SetPortBits(E_GPA,com<<2);
  71. H_LCD_EN;
  72. DrvSYS_Delay(2000); //延时200ns建立数据,根据LCD1602手册来确定延时时间
  73. L_LCD_EN;
  74. }


  75. /************************************************************************************
  76. ** Function name: write_data
  77. ** Descriptions: LCD1602写数据
  78. ** input parameters: dat
  79. ** output parameters: none
  80. ** Returned value: none
  81. *************************************************************************************/
  82. void write_data(uint8_t dat)
  83. {
  84. H_LCD_RS;
  85. DrvGPIO_SetPortBits(E_GPA,dat<<2);
  86. H_LCD_EN;
  87. DrvSYS_Delay(2000); //延时200ns建立数据,根据LCD1602手册来确定延时时间
  88. L_LCD_EN;
  89. }

  90. /************************************************************************************
  91. ** Function name: write_bit_data
  92. ** Descriptions: LCD1602写字符串
  93. ** input parameters: table字符串指针 y=1第一行 y=2第二行 x第几位
  94. ** output parameters: none
  95. ** Returned value: none
  96. *************************************************************************************/
  97. void write_bit_data(int8_t *table,uint8_t y,uint8_t x)
  98. {
  99. uint8_t b=0;
  100. if(y==1){write_com(0x80+x);} //第一行
  101. if(y==2){write_com(0x80+0x40+x);}//第二行
  102. while(table!= '\0') //判断字符串是不是最后一位
  103. {
  104. write_data(table); //显示字符
  105. b++;
  106. }
  107. }

  108. /************************************************************************************
  109. ** Function name: Init_LCD
  110. ** Descriptions: LCD1602初始
  111. ** input parameters: none
  112. ** output parameters: none
  113. ** Returned value: none
  114. *************************************************************************************/
  115. void Init_LCD(void)
  116. {

  117. L_LCD_RW;
  118. write_com(0x01); // 只写数据 所以RW拉低
  119. write_com(0x38);
  120. write_com(0x38); //一定要写两次0x38;否则只显示第一行
  121. write_com(0x0f); //开显示,显示光标,光标闪烁
  122. write_com(0x06);//当写一个字符后地址指针+1;且光标加1,当写一个字符整屏不移动
  123. }


  124. /************************************************************************************
  125. ** Function name: int main
  126. ** Descriptions: 主函数
  127. ** input parameters: none
  128. ** output parameters: none
  129. ** Returned value: none
  130. *************************************************************************************/
  131. int main (void)
  132. {
  133. Init_System();
  134. Init_GPIO();
  135. Init_LCD();
  136. DrvGPIO_ClrBit(E_GPE,5); //接LCD1602 VSSPin,需要强制输出0,做GND用
  137. DrvGPIO_Open(E_GPC,14,E_IO_QUASI); //对比度调节,我焊的个电位来调对比度,

  138. write_bit_data(table1,1,2);
  139. write_bit_data(table2,2,4);
  140. while(1);
  141. }
 楼主| 月亮先生 发表于 2012-9-24 23:51 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部