[新手园地] 【第六期】NUC120学习笔记三--LCD1602

[复制链接]
2446|1
 楼主| searover79 发表于 2012-4-20 18:42 | 显示全部楼层 |阅读模式
主函数
  1. #include "includes.h"

  2. uint8_t table1[]=" bbs.21ic.com ";
  3. uint8_t table2[]=" searover79 ";

  4. uint8_t i=0,j=0;

  5. int main (void)
  6. {
  7. UNLOCKREG();
  8. DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); //使用外部12M晶振

  9. delay_ms(100); //等待外部晶振就绪
  10. LOCKREG();

  11. LCD_GPIO_initial();
  12. LCD_initial();

  13. LCD_command_write(0x80); //写DDRAM地址,第一行
  14. delay_ms(10);
  15. for (i=0;i<16;i++)
  16. {
  17. LCD_data_write(table1[i]);
  18. delay_ms(10);
  19. }

  20. LCD_command_write(0xc0); //写DDRAM地址,第二行
  21. delay_ms(10);
  22. for (j=0;j<16;j++)
  23. {
  24. LCD_data_write(table2[j]);
  25. delay_ms(10);
  26. }

  27. while (1);
  28. }


includes.h
  1. #ifndef __INCLUDES_H__
  2. #define __INCLUDES_H__

  3. #include <NUC1xx.h>
  4. #include <DrvGPIO.h>
  5. #include <DrvSYS.h>
  6. #include "lcd1602.h"

  7. #define uint8_t unsigned char

  8. extern void LCD_GPIO_initial(void);
  9. extern void delay_us(uint32_t t);
  10. extern void delay_ms(uint32_t a);
  11. extern void LCD_command_write(uint8_t com);
  12. extern void LCD_initial(void);
  13. extern void LCD_data_write(uint8_t dat);

  14. #endif

lcd1602.c
  1. /*
  2. ** 文件名称:lcd1602.c
  3. ** 文件说明:lcd1602液晶显示,8位数据总线
  4. ** 管脚分配:
  5. ** GPA2:DB0
  6. ** GPA3:DB1
  7. ** GPA4:DB2
  8. ** GPA5:DB3
  9. ** GPA6:DB4
  10. ** GPA7:DB5
  11. ** GPA8:DB6
  12. ** GPA9:DB7

  13. ** GPC14:RS
  14. ** GPC15:RW
  15. ** GPC6: EN
  16. ** GPE5: VO
  17. */

  18. #include "lcd1602.h"

  19. /*
  20. ** 函数名称:LCD_GPIO_Init
  21. ** 函数说明:GPIO初始化,设置为输出模式
  22. */
  23. void LCD_GPIO_initial(void)
  24. {
  25. DrvGPIO_Open(LCD_DB0,E_IO_OUTPUT);
  26. DrvGPIO_Open(LCD_DB1,E_IO_OUTPUT);
  27. DrvGPIO_Open(LCD_DB2,E_IO_OUTPUT);
  28. DrvGPIO_Open(LCD_DB3,E_IO_OUTPUT);
  29. DrvGPIO_Open(LCD_DB4,E_IO_OUTPUT);
  30. DrvGPIO_Open(LCD_DB5,E_IO_OUTPUT);
  31. DrvGPIO_Open(LCD_DB6,E_IO_OUTPUT);
  32. DrvGPIO_Open(LCD_DB7,E_IO_OUTPUT);

  33. DrvGPIO_Open(LCD_VO,E_IO_OUTPUT);
  34. DrvGPIO_Open(LCD_RS,E_IO_OUTPUT);
  35. DrvGPIO_Open(LCD_RW,E_IO_OUTPUT);
  36. DrvGPIO_Open(LCD_EN,E_IO_OUTPUT);
  37. }

  38. void delay_us(uint32_t t) //延时
  39. {
  40. uint32_t i=0;
  41. while(t--)
  42. {
  43. for (i=0;i<1;i++);
  44. }
  45. }

  46. void delay_ms(uint32_t a)
  47. {
  48. uint32_t j=0;
  49. while(a--)
  50. {
  51. for (j=0;j<1000;j++);
  52. }
  53. }

  54. /*
  55. ** 函数名称:LCD_command_write
  56. ** 函数说明:液晶写指令子程序
  57. ** 输入参数:com
  58. ** 输出参数:无
  59. ** 返回值: 无
  60. ** 其他说明:EN=1,RS=0,RW=0,将DB0-DB7的指令代码写入指令寄存器中
  61. */
  62. void LCD_command_write(uint8_t com)
  63. {
  64. CLR_EN;
  65. delay_us(5);
  66. CLR_RS;
  67. CLR_RW;
  68. delay_us(5);
  69. SET_EN;
  70. delay_us(5);
  71. GPIOA -> DOUT = com << 2;
  72. // LCD_Data_Port -> DOUT = com << 2;
  73. delay_us(5);
  74. CLR_EN;
  75. delay_us(5);
  76. }

  77. void LCD_initial(void) //液晶初始化
  78. {
  79. LCD_command_write(0x01); //clear display
  80. LCD_command_write(0x06); //I/D=1光标右移AC自动加1,S=0显示不发生移位
  81. LCD_command_write(0x0e); //开显示,显示光标,不闪烁
  82. // LCD_command_write(0x18); //光标和显示一起向左移动,AC值不变
  83. LCD_command_write(0x38); //8位数据总线,2行显示模式,5*7点阵+光标显示模式
  84. }

  85. /*
  86. ** 函数名称:LCD_data_write
  87. ** 函数说明:液晶写数据子程序
  88. ** 输入参数:dat
  89. ** 输出参数:无
  90. ** 返回值: 无
  91. ** 其他说明:EN=0,RS=1,RW=0,将DB0-DB7数据写入数据寄存器中
  92. */
  93. void LCD_data_write(uint8_t dat)
  94. {
  95. CLR_EN;
  96. delay_us(5);
  97. SET_RS;
  98. CLR_RW;
  99. delay_us(5);
  100. SET_EN;
  101. GPIOA -> DOUT = dat << 2;
  102. // LCD_Data_Port -> DOUT = dat<<2; //不知道这句为什么会报错,而上一句不会
  103. delay_us(5);
  104. CLR_EN;
  105. delay_us(5);
  106. }

lcd1602.h
  1. /*
  2. ** 文件名称:lcd1602.h
  3. ** 文件说明:lcd1602液晶显示,8位数据总线
  4. ** 管脚分配:
  5. ** GPA2:DB0
  6. ** GPA3:DB1
  7. ** GPA4:DB2
  8. ** GPA5:DB3
  9. ** GPA6:DB4
  10. ** GPA7:DB5
  11. ** GPA8:DB6
  12. ** GPA9:DB7

  13. ** GPC14:RS
  14. ** GPC15:RW
  15. ** GPC6: EN
  16. ** GPE5: VO
  17. */
  18. #ifndef __INCLUDES_H__
  19. #define __INCLUDES_H__

  20. #include <NUC1xx.h>
  21. #include "DrvGPIO.h"

  22. #define LCD_DB0 E_GPA,2 //LCD数据口
  23. #define LCD_DB1 E_GPA,3
  24. #define LCD_DB2 E_GPA,4
  25. #define LCD_DB3 E_GPA,5
  26. #define LCD_DB4 E_GPA,6
  27. #define LCD_DB5 E_GPA,7
  28. #define LCD_DB6 E_GPA,8
  29. #define LCD_DB7 E_GPA,9

  30. #define LCD_Data_Port GPIOA; //LCD数据总线

  31. #define LCD_VO E_GPE,5 //LCD驱动电压
  32. #define LCD_RS E_GPC,14
  33. #define LCD_RW E_GPC,15
  34. #define LCD_EN E_GPC,6

  35. #define CLR_VO DrvGPIO_ClrBit(LCD_VO) //LCD_VO拉低
  36. #define SET_VO DrvGPIO_SetBit(LCD_VO) //LCD_VO拉高
  37. #define CLR_RS DrvGPIO_ClrBit(LCD_RS) //LCD_RS拉低
  38. #define SET_RS DrvGPIO_SetBit(LCD_RS) //LCD_RS拉高
  39. #define CLR_RW DrvGPIO_ClrBit(LCD_RW) //LCD_RW拉低
  40. #define SET_RW DrvGPIO_SetBit(LCD_RW) //LCD_RW拉高
  41. #define CLR_EN DrvGPIO_ClrBit(LCD_EN) //LCD_EN拉低
  42. #define SET_EN DrvGPIO_SetBit(LCD_EN) //LCD_EN拉高

  43. extern void LCD_GPIO_initial(void);
  44. extern void delay_us(uint32_t t);
  45. extern void delay_ms(uint32_t a);
  46. extern void LCD_command_write(uint8_t com);
  47. extern void LCD_initial(void);
  48. extern void LCD_data_write(uint8_t dat);

  49. #endif
 楼主| searover79 发表于 2012-4-20 18:47 | 显示全部楼层
本帖最后由 searover79 于 2012-4-20 18:56 编辑

呵呵,图照的不咋样。

本帖子中包含更多资源

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

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

本版积分规则

26

主题

301

帖子

0

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