lcd1602 订阅
LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做到板子上。 [1] 展开全文
LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做到板子上。 [1]
信息
外文名
LCD1602
控制主电路
HD44780
显示容量
16×2个字符
所属领域
电子信息
中文名
LCD1602
实    质
字符型液晶显示器
LCD1602字符型液晶显示原理
点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应,每一字节的内容与显示屏上相应位置的亮暗对应。例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定,当(000H)=FFH时,屏幕左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,屏幕右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H时,在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD,常用16×1,16×2,20×2和40×2等的模块。一般的LCD1602字符型液晶显示器的内部控制器大部分为HD44780,能够显示英文字母、阿拉伯数字、日文片假名和一般性符号。 [2] 
收起全文
精华内容
下载资源
问答
  • LCD1602

    2020-08-25 18:14:35
    一、LCD1602简介 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母,数字,符号的点阵型液晶模块,他是由若干个5X7或5X10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间由一个点距的间隔,...

    一、LCD1602简介

    • 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母,数字,符号的点阵型液晶模块,他是由若干个5X7或5X10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间由一个点距的间隔,每行之间也有一间隔,起到了字符间距和行距的作用,因此它不能很好的显示图片。
    • LCD1602不能显示汉字
    • 显示汉字用LCD12864或TFT

     

    二、程序设计

    2.1、LCD1602头文件

     #ifndef _LCD_H
     #define _LCD_H
    #include <reg52.h>
     /*当使用的是4位数据传输的时候定义
       使用八位数据传输的时候取消
     */
     // #define LCD1602_4PINS
    
    
     // 定义关键词
     #ifndef uchar
     #define uchar unsigned char	// 字符
     #endif
    
     #ifndef uint
     #define uint unsigned int		// 整型
     #endif
    
     // PIN空定义
     #define LCD1602_DATAPINS P0
     sbit LCD1602_E = P2^7;
     sbit LCD1602_RW= P2^5;
     sbit LCD1602_RS= P2^6;
    // 51单片机12MHZ时钟下的延时函数
    void Lcd1602_Delay1ms(uint c);   //误差 0us
    /*LCD1602写入8位命令子函数*/
    void LcdWriteCom(uchar com);
    /*LCD1602写入8位数据子函数*/	
    void LcdWriteData(uchar dat)	;
    /*LCD1602初始化子程序*/		
    void LcdInit();		
    				  
    #endif

    2.2、Lcd.c

    #include "Lcd.h"  // 导入头文件
    // 延时函数	  该函数是在12MHZ晶振下,12分频单片机的延时
    //	   uint c 初始化c int类型默认为0
    void Lcd1602_Delay1ms(uint c)   //误差 0us
    {
        uchar a,b;
    	for (; c>0; c--)
    	{
    	  for (b=199;b>0;b--)
    		 {
    		  	for(a=1;a>0;a--);
    		 }      
    	} 	
    }
    
    // 向LCD1602中写入一个字节命令
    #ifndef LCD1602_4PINS  // 当没有定义LCD1602——4PINS这个命令时
    void LcdWriteCom(uchar com)
    {
       LCD1602_E = 0;   // 使能信号       0 开启       1 关闭
       LCD1602_RS = 0;  // 选择发送命令    数据/命令选择端(H/L) 1/0
       LCD1602_RW = 0;  // 选择写入		  0 写入       1  读出
    
       LCD1602_DATAPINS = com; // 放入命令
       Lcd1602_Delay1ms(1);    // 等待数据稳定
    
       LCD1602_E = 1;        // 写入时序
       Lcd1602_Delay1ms(5);  // 保持时间   延迟
       LCD1602_E =0;  
    }
    
    #else
    void LcdWriteCom(uchar com) //写入命令
    {
      LCD1602_E =0;   // 使能清零
      LCD1602_RS = 0; //选择写入命令	 数据/命令选择端(H/L) 1/0
      LCD1602_RW=0;   //选择写入	     读/写选择端(H\L)     1/0
    
      LCD1602_DATAPINS = com;  //  由于4位的接线是接到P0口的高四位,所以传送高四位不用改
      Lcd1602_Delay1ms(1);     // 延时函数
    
      LCD1602_E=1;  // 写入时序	   使能选择
      Lcd1602_Delay1ms(5);
      LCD1602_E =0;
    
      LCD1502_DATAPINS = com<< 4;// 发送低四位
      Lcd1602_Delay1ms(1);
    
      LCD1602_E = 1;	 //写入时序
      Lcd1602_Delay1ms(5);
      LCD1602_E = 0;
    }
    #endif  // 结束
      // 向LCD写入一个数据
    #ifndef 	LCD1602_4PINS		   
    void LcdWriteData(uchar dat)			//写入数据
    {
    	LCD1602_E = 0;	//使能清零
    	LCD1602_RS = 1;	//选择输入数据
    	LCD1602_RW = 0;	//选择写入
    
    	LCD1602_DATAPINS = dat; //写入数据
    	Lcd1602_Delay1ms(1);
    
    	LCD1602_E = 1;   //写入时序
    	Lcd1602_Delay1ms(5);   //保持时间
    	LCD1602_E = 0;
    }
    #else
    void LcdWriteData(uchar dat)			//写入数据
    {
    	LCD1602_E = 0;	  //使能清零
    	LCD1602_RS = 1;	  //选择写入数据   数据/命令选择端(H/L) 1/0
    	LCD1602_RW = 0;	  //选择写入
    
    	LCD1602_DATAPINS = dat;	//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
    	Lcd1602_Delay1ms(1);
    
    	LCD1602_E = 1;	  //写入时序
    	Lcd1602_Delay1ms(5);
    	LCD1602_E = 0;
    
    	LCD1602_DATAPINS = dat << 4; //写入低四位
    	Lcd1602_Delay1ms(1);
    
    	LCD1602_E = 1;	  //写入时序
    	Lcd1602_Delay1ms(5);
    	LCD1602_E = 0;
    }
    #endif
    // 初始化LCD屏
    #ifndef		LCD1602_4PINS
    void LcdInit()	//初始化LCD子程序
    {
     	LcdWriteCom(0x38);  //开显示
    	LcdWriteCom(0x0c);  //开显示不显示光标
    	LcdWriteCom(0x06);  //写一个指针加1
    	LcdWriteCom(0x01);  //清屏
    	LcdWriteCom(0x80);  //设置数据指针起点
    }
    #else
    void LcdInit()						  //LCD初始化子程序
    {
    	LcdWriteCom(0x32);	 //将8位总线转为4位总线
    	LcdWriteCom(0x28);	 //在四位线下的初始化
    	LcdWriteCom(0x0c);  //开显示不显示光标
    	LcdWriteCom(0x06);  //写一个指针加1
    	LcdWriteCom(0x01);  //清屏
    	LcdWriteCom(0x80);  //设置数据指针起点
    }
    #endif
    
     

    2.3、main.c

    #include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    #include "lcd.h"
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    u8 Disp[]=" Pechin Science ";
    // u8 Disp[] =  "Hello World";
    void main(void)
    {
    	u8 i;
    	LcdInit();
    	for(i=0;i<16;i++)
    	{
    		LcdWriteData(Disp[i]);	
    	}
    	while(1);				
    }
    

     

    展开全文
  • LCD1602A

    2019-09-20 07:07:15
    介绍 LCD1602是一个可以显示字符的显示设备,每行16个字符,一共两行。 实物图 [caption id="attachment_1179" align="alignnone" width="600"] LCD1602A正面图[/caption] [caption ...
    • 介绍
    LCD1602是一个可以显示字符的显示设备,每行16个字符,一共两行。
    • 实物图
    [caption id="attachment_1179" align="alignnone" width="600"] LCD1602A正面图 LCD1602A正面图[/caption] [caption id="attachment_1180" align="alignnone" width="600"] LCD1602A背面图 LCD1602A背面图[/caption]
    • 参考
     这个设备需要16个接口,会占用很多GPIO口,利用GY-IICLCD可以让你只用4个接口就能搞定LCD(包括电源)

    转载于:https://my.oschina.net/surenpi/blog/481707

    展开全文
  • Lcd1602

    2021-01-14 21:52:31
    1月12日 LCD1602 初始化 图 图1 图2 图3 void init() //³õʼ»¯ { dula = 0; wela = 0; //¹Ø±ÕÊýÂë¹Ü lcden = 0; //ʹÄܶËÖÃ0 write_mingling(0x38); //ÏÔʾģʽÉèÖà É...

    1月12日 LCD1602

    初始化

    请添加图片描述
    图1请添加图片描述
    图2
    请添加图片描述
    图3

    void init()    //³õʼ»¯
    {
      dula = 0;
    	wela = 0;    //¹Ø±ÕÊýÂë¹Ü
    	lcden = 0;   //ʹÄܶËÖÃ0
      
    	write_mingling(0x38);   //ÏÔʾģʽÉèÖà  ÉèÖÃ16¡Á2ÏÔʾ   ¿´Í¼2
    	write_mingling(0x0f);   //ÉèÖÿªÏÔʾ  ÏÔʾ¹â±ê  ¹â±êÉÁ˸
    	write_mingling(0x06);   //дһ¸ö×Ö·ûºóµØÖ·Ö¸Õë+1  ²»×óÒÆ
    	write_mingling(0x80);   //ÉèÖÃÊý¾ÝµØÖ·Ö¸Õë 80+
      write_mingling(0x01);	  //ÇåÆÁ
    }
    
    

    注释乱码了,暂时不知道如何解决

    写一个1B的简答例程

    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    	
    sbit dula = P2^6;
    sbit wela = P2^7;
    sbit lcden = P3^4;
    sbit rs = P3^5;
    
    void delay(uint x)
    {
    	uint i,j;
    	for(i=x;i>0;i--)
    	for(j=110;j>0;j--);
    
    }
    
    void write_mingling(uchar com)    //Ñ¡ÔñÃüÁîģʽ  RS = 0
    {
    	rs = 0;       //Ñ¡ÔñÃüÁîģʽ   ¸øRSµÍµçƽ
    	P0 = com;     //½«ÒªÐ´µÄÃüÁî·¢Ë͵½×ÜÏßÉÏ
    	delay(5);     //ÑÓʱ   ¿´²Ù×÷ʱÐòͼ
    	lcden = 1;    //ʹÄܶ˸ßÂö³å   E = 1
    	delay(5);
    	lcden = 0;   	//ʹÄܶËÖÃ0
    
    }
    
    void write_shuju(uchar date)     //Ñ¡ÔñÊý¾Ýģʽ  	RS = 1
    {
    	rs = 1;       //Ñ¡ÔñÃüÁîģʽ   ¸øRS¸ßµçƽ
    	P0 = date;     //½«ÒªÐ´µÄÃüÁî·¢Ë͵½×ÜÏßÉÏ
    	delay(5);     //ÑÓʱ   ¿´²Ù×÷ʱÐòͼ1
    	lcden = 1;    //ʹÄܶ˸ßÂö³å   E = 1
    	delay(5);
    	lcden = 0;   	//ʹÄܶËÖÃ0
    
    }
    
    void init()    //³õʼ»¯
    {
      dula = 0;
    	wela = 0;    //¹Ø±ÕÊýÂë¹Ü
    	lcden = 0;   //ʹÄܶËÖÃ0
      
    	write_mingling(0x38);   //ÏÔʾģʽÉèÖà  ÉèÖÃ16¡Á2ÏÔʾ   ¿´Í¼2
    	write_mingling(0x0f);   //ÉèÖÿªÏÔʾ  ÏÔʾ¹â±ê  ¹â±êÉÁ˸
    	write_mingling(0x06);   //дһ¸ö×Ö·ûºóµØÖ·Ö¸Õë+1  ²»×óÒÆ
    	write_mingling(0x80);   //ÉèÖÃÊý¾ÝµØÖ·Ö¸Õë 80+
      write_mingling(0x01);	  //ÇåÆÁ
    }
    
    void main()
    {
    	init();
    	write_shuju('1');     //ASCLLÂëΪ '1'    »ò0x31
    	delay(10);
    	write_shuju('B');
    	while(1);
    
    }
    
    
    
    
    
    
    
    
    展开全文
  • lcd1602

    2018-05-22 15:46:00
    lcd1602液晶操作方法 控制任务:在显示屏上显示两行字,同时移动它们。 程序如下: #include <reg52.h> typedef unsigned int uint; typedef unsigned char uchar; sbit lcden = P3 ^ 4; // lcd使能 sbit ...

    lcd1602液晶操作方法

    控制任务:在显示屏上显示两行字,同时移动它们。

    程序如下:

    #include <reg52.h>
    
    typedef unsigned int uint;
    typedef unsigned char uchar;
    
    sbit lcden = P3 ^ 4;  // lcd使能
    sbit lcdrs = P3 ^ 5;  // lcd数据和指令选择
    sbit dula = P2 ^ 6;
    sbit wela = P2 ^ 7;
    
    void init();
    void writeCommand(uchar command);
    void writeData(uchar dat);
    void showMessage(uchar* message, uchar posCursor);
    void clearMessage();
    void delay5ms();
    void delay100ms();
    void moveString(uchar* message, uchar direction);
    
    void main() {
    
      uchar* message1 = "I like programming";
      uchar* message2 = "Hello, World!";
    
      init();
      showMessage(message1, 0x00);
      // clearMessage();
      showMessage(message2, 0x40);
    
      // 当移动两个message2时,整个屏幕上的字符都会移动
      moveString(message2, 0);
      while (1)
        ;
    }
    
    /**
     * @brief  移动指定字符串
     * @note
     * @param  message: 待移动的字符串,移动前首先要在lcd缓存中
     * @param  direction: 0 向左,1向右
     * @retval None
     */
    void moveString(uchar* message, uchar direction) {
      for (; *message != '\0'; message++) {
        if (direction == 0) {
          writeCommand(0x18);
        } else if (direction == 1) {
          writeCommand(0x1c);
        }
        delay100ms();
      }
    }
    
    /**
     * @brief  清屏
     * @note
     * @retval None
     */
    void clearMessage() { writeCommand(0x01); }
    
    /**
     * @brief  在指定的位置显示指定的字符
     * @note
     * @param  message: 显示的字符
     * @param  posCursor: 字符的启示位置,0x00第一行首显示,0x40第二行首
     * @retval None
     */
    void showMessage(uchar* message, uchar posCursor) {
      uchar firstPos = 0x80;
      writeCommand(firstPos + posCursor);
      for (; *message != '\0'; message++) {
        writeData(*message);
      }
    }
    
    /**
     * @brief  发送数据给LED
     * @note   write_data('1'), 发送字符1,显示在led屏上
     * @param  dat: 待发送的数据
     * @retval None
     */
    void writeData(uchar dat) {
      lcdrs = 1;
      P0 = dat;
      delay5ms();
      lcden = 1;
      delay5ms();
      lcden = 0;
      delay5ms();
    }
    
    /**
     * @brief  发送指令
     * @note
     * @param  command: 为待发送的指令码
     * @retval None
     */
    void writeCommand(uchar command) {
      lcdrs = 0;  // lcdrs为数据和命令选择,低电平为命令,高电平为数据
      P0 = command;
      delay5ms();
      lcden = 1;
      delay5ms();
      lcden = 0;
      delay5ms();
    }
    
    /**
     * @brief  初始化相关设置,其中dula,wela为关闭数码管,防止干扰
     * @note
     * @retval None
     */
    void init() {
      dula = 0;
      wela = 0;
      lcden = 0;  // lcd使能
      writeCommand(0x38);
      writeCommand(0x0e);
      writeCommand(0x06);
      writeCommand(0x01);
    }
    
    void delay5ms()  //@11.0592MHz
    {
      unsigned char i, j;
    
      i = 54;
      j = 199;
      do {
        while (--j)
          ;
      } while (--i);
    }
    
    void delay100ms()  //@11.0592MHz
    {
      unsigned char i, j;
    
      i = 180;
      j = 73;
      do {
        while (--j)
          ;
      } while (--i);
    }
    

    转载于:https://www.cnblogs.com/TomDing/p/9072435.html

    展开全文
  • LCD1602封装LCD1602封装

    热门讨论 2011-05-27 21:14:18
    LCD1602封装LCD1602封装LCD1602封装LCD1602封装LCD1602封装LCD1602封装LCD1602封装LCD1602封装LCD1602封装LCD1602封装

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,818
精华内容 1,527
关键字:

lcd1602