微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机和LCD1602的接法

51单片机和LCD1602的接法

时间:10-02 整理:3721RD 点击:

谁能给我解释一下液晶的这种接法。下面是代码,但是看不懂

  1. #include "reg51.h"
  2. #include"absacc.h"

  3. typedef unsigned char BYTE;
  4. typedef unsigned int  WORD;

  5. /*  液晶1602口地址  */
  6. #define  wr_com  XBYTE[0xC000]     //写命令
  7. #define  wr_data  XBYTE[0xC100]    //写数据
  8. #define  rd_com  XBYTE[0xC200]     //读命令
  9. #define  rd_data  XBYTE[0xC300]    //读数据

  10. void lcd_init(void);                                    // lcd初始化
  11. void write_cmd(BYTE cmd);                     // lcd写命令
  12. void write_data(BYTE dat) ;                    // 写数据
  13. void set_display_place(BYTE line,column);
  14. void write_string_lcd(BYTE line,column,unsigned char *string);

  15. void Delay(WORD n)
  16. {
  17.     WORD x;
  18.         while(n--)
  19.         {
  20.             x=500;
  21.                 while(x--);
  22.         }
  23. }

  24. /************************************************************************
  25. Function name:       write_cmd
  26. Descriptions:        向lcd输入指令
  27. ************************************************************************/

  28. void write_cmd(BYTE cmd)
  29. {   
  30.         BYTE dl;
  31.         do {
  32.                 dl=rd_com;
  33.                 } while((dl&0x80)!=0);        //判忙
  34.     wr_com= cmd;
  35.     Delay(1);
  36. }

  37. /**********************************************************************
  38. Function name:       write_data
  39. Descriptions:        写入数据
  40. **********************************************************************/

  41. void write_data(BYTE dat)       
  42. {
  43.         BYTE dl;
  44.         do {
  45.                 dl=rd_com;
  46.                 } while((dl&0x80)!=0);        //判忙
  47.     wr_data= dat;  
  48.     Delay(1);
  49. }  

  50. /***********************************************************************
  51. Function name:       write_string
  52. Descriptions:        写入字符串
  53. ***********************************************************************/

  54. void write_string(BYTE *s)                                                                                                 
  55. {
  56.     while(*s != '\0')            //'\0'为字符串结束标志
  57.     {
  58.         write_data(*s);
  59.         s++;
  60.     }
  61. }

  62. /**********************************************************************
  63. Function name:       set_display_place
  64. Descriptions:        设置字符的显示位置
  65. **********************************************************************/

  66. void set_display_place(BYTE line,column)
  67. {
  68.     BYTE address;
  69.     if(line == 1)
  70.     {
  71.         address = 0x80 + column;
  72.     }
  73.     else if(line == 2)
  74.     {
  75.         address = 0xc0 + column;
  76.     }
  77.     write_cmd(address);         
  78. }

  79. /*******************************************************************
  80. Function name:       将字符串写到指定的位置
  81. Descriptions:        将字符串显示在lcd的特定位置
  82. *******************************************************************/

  83. void write_string_lcd(BYTE line,column,unsigned char *string)
  84. {
  85.     set_display_place(line,column);
  86.     write_string(string);
  87.     Delay(1);
  88. }

  89. /***************************************************
  90. ************液晶模块初始化******************************
  91. ****************************************************/

  92. void lcd_init(void)                                  
  93. {
  94.   write_cmd(0x38);//
  95.   write_cmd(0x38);//
  96.   write_cmd(0x06);//
  97.   write_cmd(0x0c);//
  98.   write_cmd(0x01);//
  99. }

  100. /*****************LED显示位置********************/

  101. void main()
  102. {
  103.    lcd_init();
  104.   
  105.    while(1)                          
  106.    {write_string_lcd(1,1,"0123456789");
  107.         write_string_lcd(2,1,"ABCDEFGHIJ");
  108.        
  109.    }
  110. }

复制代码

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top