zoukankan      html  css  js  c++  java
  • 液晶显示屏1602

    液晶显示屏1602

    LCD1602简介

    1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5x7或者5x10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。

     1602的引脚说明

     1602每一行的地址说明

     

    第一个字符的地址是 40H, 那么是否直接写入 40H 就可以将光标定位 在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H) +10000000B(80H)=11000000B(C0H)。在 1602 中我们就用前 16 个就行了。第二行也一样用前 16 个地址。对应如下: 

     

    1602的操作步骤以及基本操作时序

      

     

     驱动1602代码

     1 #define LCD1602_DATAPINS P0
     2 sbit LCD1602_E=P2^7;
     3 sbit LCD1602_RW=P2^5;
     4 sbit LCD1602_RS=P2^6;
     5 
     6 /*******************************************************************************
     7 * 函 数 名         : Lcd1602_Delay1ms
     8 * 函数功能           : 延时函数,延时1ms
     9 * 输    入         : c
    10 * 输    出         : 无
    11 * 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
    12 *******************************************************************************/
    13 
    14 void Lcd1602_Delay1ms(uint c)   //误差 0us
    15 {
    16     uchar a,b;
    17     for (; c>0; c--)
    18     {
    19          for (b=199;b>0;b--)
    20          {
    21               for(a=1;a>0;a--);
    22          }      
    23     }
    24         
    25 }
    26 
    27 /*******************************************************************************
    28 * 函 数 名         : LcdWriteCom
    29 * 函数功能           : 向LCD写入一个字节的命令
    30 * 输    入         : com
    31 * 输    出         : 无
    32 *******************************************************************************/
    33 void TOLcdWriteCom(uchar com)  //写入命令
    34 {
    35     LCD1602_E = 0;      //将LCD1602_E变为低电平,为下面LCD1602_E变高电平形成高脉冲进行写入做准备
    36     LCD1602_RS = 0;     //选择发送命令
    37     LCD1602_RW = 0;     //选择写入
    38     
    39     LCD1602_DATAPINS = com;     //放入命令
    40     Lcd1602_Delay1ms(1);        //等待数据稳定
    41 
    42     LCD1602_E = 1;              //高脉冲写入
    43     Lcd1602_Delay1ms(5);        //保持时间
    44     LCD1602_E = 0;
    45 }
    

     写数据与写命令只是LCD1602_RS的不同其他都一样

     1 /*******************************************************************************
     2 * 函 数 名         : LcdWriteData
     3 * 函数功能           : 向LCD写入一个字节的数据
     4 * 输    入         : dat
     5 * 输    出         : 无
     6 *******************************************************************************/
     7 void LcdWriteData(uchar dat)            //写入数据
     8 {
     9     LCD1602_E = 0;     //使能清零
    10     LCD1602_RS = 1;    //选择输入数据
    11     LCD1602_RW = 0;    //选择写入
    12 
    13     LCD1602_DATAPINS = dat; //写入数据
    14     Lcd1602_Delay1ms(1);
    15 
    16     LCD1602_E = 1;       //写入时序
    17     Lcd1602_Delay1ms(5);   //保持时间
    18     LCD1602_E = 0;
    19 }
    20 
    21 /*******************************************************************************
    22 * 函 数 名       : LcdInit()
    23 * 函数功能         : 初始化LCD屏
    24 * 输    入       : 无
    25 * 输    出       : 无
    26 *******************************************************************************/
    27 void LcdInit()       //LCD初始化子程序
    28 {
    29     LcdWriteCom(0x38);  //开显示
    30     LcdWriteCom(0x0c);   //开显示不显示光标
    31     LcdWriteCom(0x06);   //写一个指针加1
    32     LcdWriteCom(0x01);   //清屏
    33     LcdWriteCom(0x80);   //设置数据指针起点
    34 }

     向1602内写入一个数据举例(包括前面的所有代码)

    主函数内操作步骤如图片所示

     1 #include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器
     2 #include "lcd.h"
     3 
     4 typedef unsigned int u16;      //对数据类型进行声明定义
     5 typedef unsigned char u8;
     6 
     7 u8 Disp[]=" Pechin Science ";
     8 
     9 /*******************************************************************************
    10 * 函 数 名         : main
    11 * 函数功能           : 主函数
    12 * 输    入         : 无
    13 * 输    出         : 无
    14 *******************************************************************************/
    15 void main(void)                            
    16 {
    17     u8 i;
    18     LcdInit();
    19     for(i=0;i<16;i++)
    20     {
    21         LcdWriteData(Disp[i]);    
    22     }
    23     while(1);                
    24 }
  • 相关阅读:
    MAC 上找不到.bash_profile或者ect/profile该怎么办?
    iOS极光推送集成步骤
    排序算法
    iOS之内存管理浅谈
    iOS之多线程浅谈
    iOS之RunTime浅谈
    Hash算法初见
    webApi实现增删改查操作
    Python: sqlite3模块
    python3:iterable, iterator, generator,抽象基类, itertools的使用。
  • 原文地址:https://www.cnblogs.com/zhj868/p/12533303.html
Copyright © 2011-2022 走看看