通过 I2C 驱动 LCD1602 液晶屏(51单片机)

  1. 硬件实物


  1. 原理图


3.程序

#include <reg51.h>
#include <intrins.h>#define uint  unsigned int
#define uchar   unsigned char
#define C51_SCL     P3^0            //SCL引脚
#define C51_SDA     P3^1            //SDA引脚
#define ADDR        0X4E            //设备地址
#define String_len1     10
#define String_len2     8sbit SCL = C51_SCL;
sbit SDA = C51_SDA;
uchar lcd_show1[String_len1] = "Hello Word";
uchar lcd_show2[String_len2] = "fuxiujun";static void delay_us()
{;;  //用两个空语句实现短时间延时,当晶振为11.0592MHz时,约4~5微秒
}
void delay(uchar n)
{int i,j;for(i=0;i<n;i++)for(j=0;j<120;j++);
}/*** @brief   IIC协议的起始信号* @param None* @retval  None*/
void IIC_Start()
{SDA=1;SCL=1;delay_us();SDA=0;delay_us();
}/*** @brief   IIC协议的应答信号* @param None* @retval  None*/
void IIC_Ack()
{uchar i;SCL=1;delay_us();while((SDA==1)&&(i<250))i++;SCL=0;delay_us();
}/*** @brief   写入一个字节到I2C总线* @param   date:将要被写入的数据* @retval None*/
void IIC_Write_Byte(uchar date)
{uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;SCL=0;delay_us();SDA=CY;delay_us();SCL=1;delay_us();}SCL=0;delay_us();SDA=1;delay_us();
}/*** @brief   通过IIC协议写一个命令到1602液晶上* @param   comm:将要被写入的命令* @retval None*/
void IIC_Write_Comm_LCD(uchar comm)
{uchar data_h = comm & 0xf0;uchar data_l = (comm & 0x0f) << 4;IIC_Write_Byte(0x00+data_h);IIC_Ack();IIC_Write_Byte(0x04+data_h);IIC_Ack();IIC_Write_Byte(0x00+data_h);IIC_Ack();delay(5);IIC_Write_Byte(0x00+data_l);IIC_Ack();IIC_Write_Byte(0x04+data_l);IIC_Ack();IIC_Write_Byte(0x00+data_l);IIC_Ack();delay(5);
}/*** @brief   通过IIC写一个数据到1602液晶上* @param date:将要被写入的数据* @retval None*/
void IIC_Write_Date_LCD(uchar date)
{uchar data_h = date & 0xf0;uchar data_l = (date & 0x0f) << 4;IIC_Write_Byte(0x01+data_h);IIC_Ack();IIC_Write_Byte(0x05+data_h);IIC_Ack();IIC_Write_Byte(0x01+data_h);IIC_Ack();delay(5);IIC_Write_Byte(0x01+data_l);IIC_Ack();IIC_Write_Byte(0x05+data_l);IIC_Ack();IIC_Write_Byte(0x01+data_l);IIC_Ack();delay(5);
}/*** @brief   初始化1602液晶,由于只有一个设备,所以一直占用总线* @param  None* @retval  None*/
void LCD1602_Init()
{uchar i = 0;IIC_Start();IIC_Write_Byte(ADDR);IIC_Ack();IIC_Write_Comm_LCD(0x02);  //设置四线发送数据IIC_Write_Comm_LCD(0x28); //设置显示模式IIC_Write_Comm_LCD(0x08);   //显示关闭IIC_Write_Comm_LCD(0x0c); //设置光标开关IIC_Write_Comm_LCD(0x06);   //设置光标移动IIC_Write_Comm_LCD(0x01);   //清屏for(i=0;i<String_len1;i++){IIC_Write_Date_LCD(lcd_show1[i]);}IIC_Write_Comm_LCD(0xc0);for(i=0;i<String_len2;i++){IIC_Write_Date_LCD(lcd_show2[i]);}
}
void main()
{LCD1602_Init();while(1);
}
/*******************************************************
uchar IIC_Read_Byte() //从I2C读一个字节
{uchar i,j,k;SCL=0;delay_us();for(i=0;i<8;i++){SCL=1;delay_us();j=SDA;k=(k<<1)|j;SCL=0;delay_us();}return k;
}
void nIIC_Ack()  //无应答信号
{SCL=1;delay_us();SDA=1;SCL=0;delay_us();
}
void IIC_Stop()  //终止信号
{SDA=0;SCL=1;delay_us();SDA=1;delay_us();
}
***********************************************************************/

4.仿真

通过 I2C 驱动 LCD1602 液晶屏(51单片机)相关推荐

  1. LCD1602液晶屏使用(51单片机七夕特别版)

    LCD1602液晶屏使用(51单片机七夕特别版) LCD1602简介 实现过程 操作时序 指令码 如何改变文本的样式 代码 效果图 今天是七夕节,周围的朋友啊小姐妹(伪)啊都跟对象出去玩了 囧rz,而 ...

  2. 51单片机进阶案例(1)——基于MATLAB GUI的单片机串口与PC的通信实现实时时钟和双向可调时钟功能(利用DS1302时钟芯片和LCD1602液晶屏)

    目录 一.案例描述 二.实现功能 三.51单片机部分实现 3.1 实时时钟的实现 3.2 串口通信的实现 3.2.1 接收数据 3.2.2 发送数据 四.MATLAB部分实现 4.1 GUI界面 4. ...

  3. 【C51单片机学习笔记----DS18B20温度传感器LCD1602液晶屏直流电机调速与呼吸灯AD模数转换红外外部中断】

    文章目录 一.DS18B20温度传感器 1.DS18B20温度传感器连接原理图 2.DS18B20温度传感器单总线通信时序 3.DS18B20温度传感器代码模块 二.LCD1602液晶屏 1.LCD1 ...

  4. arduino下载库出错_arduino的I2C通讯 3:驱动1602液晶屏

    上个推送,我们学习了I2C功能的基础知识.而且知道了使用很多器件都需要安装库.本次,我们一起来做一个实例,用arduino驱动1602液晶屏 1602代表屏幕有16列,2行.传统的驱动方式占用了大量的 ...

  5. Proteus仿真-LCD1602液晶屏使用方法(驱动一)

    一.硬件链接 在元件库中搜索LM016即可找到LCD1602液晶屏. 按下图方式链接单片机和屏幕. 二.软件驱动代码 //屏幕相关引脚接口定义 #define D P0 sbit E=P2^6; sb ...

  6. 【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏

    偶然心血来潮,想要做一个音乐可视化的系列专题.这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累 ...

  7. 【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  8. ESP32驱动LCD液晶屏选型、262K什么意思?SPI写LCD的GRAM时序、MCU液晶屏驱动IC的寄存器功能

    最近转战ESP32,ESP32-D0WDQ6 型号的GPIO只有那么20个左右,且还有几个GPIO只能做输入,非常捉襟见肘.所以如果要驱动LCD液晶屏,绝大多数都会选择SPI接口的MCU屏. 为了编写 ...

  9. stm32 arduino 驱动jlx液晶屏

    stm32 arduino 驱动jlx液晶屏 1.说明 单片机这次用的是STM32F103C8T6,烧成arduino用,库还是我们的老朋友u8g2.液晶屏型号是JLX 240160G-676,SPI ...

最新文章

  1. Android开发之程序猿必需要懂得Android的重要设计理念2(5.20更新版)
  2. 17个Python骚操作,你都Ok吗?
  3. 线程编程常见API简介(中)
  4. android html图片点击事件,Android TextView加载HTMl图文之添加点击事件和查看图片
  5. sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行
  6. 漫画:程序员和产品经理撕得真是太太太太厉害了
  7. java preference,Java使用Preference类保存上一次记录的方法
  8. 161227、js显示对象所有属性和方法的函数
  9. cpp mqtt paho 使用_MQTT--Paho C Client 的实现和详解
  10. 20141124-1
  11. Python优化机制:常量折叠
  12. 微信小程序的一些开发限制
  13. 关于Chrome沙箱技术(沙盒技术)
  14. Java List 集合取 交集、并集、差集、补集 Java集合取交集、Java集合并集
  15. MSDN资源下载网站源码
  16. 在二叉树中查找两个节点的最近的公共祖先节点(无回溯指针)(NCA--nearest common ancestor)
  17. Bootstrap系列之表单(Forms)
  18. 谷歌浏览器设置打开新标签页为指定网页?
  19. 用java生成一个表白二维码
  20. 【linux服务器】使用csdn云主机的体验与问题

热门文章

  1. 如何用几何画板把圆奇数等分
  2. 如何使用阿里云搭建自己的云主机(超详细)
  3. 23_ElsaticSearch 搜索推荐ngram分词机制实现index-time
  4. 城市级智能网联示范区情况全扫描(2022版)
  5. 【图像】搜索相同,或者相似照片
  6. 创建程序编写demo.py文件
  7. java计算机毕业设计医院远程诊断系统源程序+mysql+系统+lw文档+远程调试
  8. MQ命令学习总结大全MQ常用命令
  9. matlab 符号 积分法,MATLAB积分方法
  10. 学生托管班_小学生托管班托管班价格是多少?如何收费?