实验名称:LCD1602液晶显示实验
接线说明:    
实验现象:下载程序后,LCD1602上显示字符信息
注意事项:                                                                                  
***************************************************************************************/
#include "public.h"
#include "lcd1602.h"

/*******************************************************************************
* 函 数 名       : main
* 函数功能         : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{    
    lcd1602_init();//LCD1602初始化
    lcd1602_show_string(0,0,"Hello World!");//第一行显示
    lcd1602_show_string(0,1,"0123456789");//第二行显示
    while(1)
    {
        
    }    
}

#include "lcd1602.h"

/*******************************************************************************
* 函 数 名       : lcd1602_write_cmd
* 函数功能         : LCD1602写命令
* 输    入       : cmd:指令
* 输    出         : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_cmd(u8 cmd)
{
    LCD1602_RS=0;//选择命令
    LCD1602_RW=0;//选择写
    LCD1602_E=0;
    LCD1602_DATAPORT=cmd;//准备命令
    delay_ms(1);
    LCD1602_E=1;//使能脚E先上升沿写入
    delay_ms(1);
    LCD1602_E=0;//使能脚E后负跳变完成写入    
}
#else    //4位LCD
void lcd1602_write_cmd(u8 cmd)
{
    LCD1602_RS=0;//选择命令
    LCD1602_RW=0;//选择写
    LCD1602_E=0;
    LCD1602_DATAPORT=cmd;//准备命令
    delay_ms(1);
    LCD1602_E=1;//使能脚E先上升沿写入
    delay_ms(1);
    LCD1602_E=0;//使能脚E后负跳变完成写入
    
    LCD1602_DATAPORT=cmd<<4;//准备命令
    delay_ms(1);
    LCD1602_E=1;//使能脚E先上升沿写入
    delay_ms(1);
    LCD1602_E=0;//使能脚E后负跳变完成写入    
}
#endif

/*******************************************************************************
* 函 数 名       : lcd1602_write_data
* 函数功能         : LCD1602写数据
* 输    入       : dat:数据
* 输    出         : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_data(u8 dat) 
{
    LCD1602_RS=1;//选择数据
    LCD1602_RW=0;//选择写
    LCD1602_E=0;
    LCD1602_DATAPORT=dat;//准备数据
    delay_ms(1);
    LCD1602_E=1;//使能脚E先上升沿写入
    delay_ms(1);
    LCD1602_E=0;//使能脚E后负跳变完成写入        
}
#else
void lcd1602_write_data(u8 dat) 
{
    LCD1602_RS=1;//选择数据
    LCD1602_RW=0;//选择写
    LCD1602_E=0;
    LCD1602_DATAPORT=dat;//准备数据
    delay_ms(1);
    LCD1602_E=1;//使能脚E先上升沿写入
    delay_ms(1);
    LCD1602_E=0;//使能脚E后负跳变完成写入
    
    LCD1602_DATAPORT=dat<<4;//准备数据
    delay_ms(1);
    LCD1602_E=1;//使能脚E先上升沿写入
    delay_ms(1);
    LCD1602_E=0;//使能脚E后负跳变完成写入        
}
#endif

/*******************************************************************************
* 函 数 名       : lcd1602_init
* 函数功能         : LCD1602初始化
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_init(void)
{
    lcd1602_write_cmd(0x38);//数据总线8位,显示2行,5*7点阵/字符
    lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁
    lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
    lcd1602_write_cmd(0x01);//清屏    
}
#else
void lcd1602_init(void)
{
    lcd1602_write_cmd(0x28);//数据总线4位,显示2行,5*7点阵/字符
    lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁
    lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
    lcd1602_write_cmd(0x01);//清屏    
}
#endif

/*******************************************************************************
* 函 数 名       : lcd1602_clear
* 函数功能         : LCD1602清屏
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void lcd1602_clear(void)
{
    lcd1602_write_cmd(0x01);    
}

/*******************************************************************************
* 函 数 名       : lcd1602_show_string
* 函数功能         : LCD1602显示字符
* 输    入       : x,y:显示坐标,x=0~15,y=0~1;
                   str:显示字符串
* 输    出         : 无
*******************************************************************************/
void lcd1602_show_string(u8 x,u8 y,u8 *str)
{
    u8 i=0;

if(y>1||x>15)return;//行列参数不对则强制退出

if(y<1)    //第1行显示
    {    
        while(*str!='\0')//字符串是以'\0'结尾,只要前面有内容就显示
        {
            if(i<16-x)//如果字符长度超过第一行显示范围,则在第二行继续显示
            {
                lcd1602_write_cmd(0x80+i+x);//第一行显示地址设置    
            }
            else
            {
                lcd1602_write_cmd(0x40+0x80+i+x-16);//第二行显示地址设置    
            }
            lcd1602_write_data(*str);//显示内容
            str++;//指针递增
            i++;    
        }    
    }
    else    //第2行显示
    {
        while(*str!='\0')
        {
            if(i<16-x) //如果字符长度超过第二行显示范围,则在第一行继续显示
            {
                lcd1602_write_cmd(0x80+0x40+i+x);    
            }
            else
            {
                lcd1602_write_cmd(0x80+i+x-16);    
            }
            lcd1602_write_data(*str);
            str++;
            i++;    
        }    
    }                
}

#include "public.h"

/*******************************************************************************
* 函 数 名       : delay_10us
* 函数功能         : 延时函数,ten_us=1时,大约延时10us
* 输    入       : ten_us
* 输    出         : 无
*******************************************************************************/
void delay_10us(u16 ten_us)
{
    while(ten_us--);    
}

/*******************************************************************************
* 函 数 名       : delay_ms
* 函数功能         : ms延时函数,ms=1时,大约延时1ms
* 输    入       : ms:ms延时时间
* 输    出         : 无
*******************************************************************************/
void delay_ms(u16 ms)
{
    u16 i,j;
    for(i=ms;i>0;i--)
        for(j=110;j>0;j--);
}

纷传单片机学习资料放在纷传小程序里了,需要的可以加入圈子有资料百度网盘下载地址及提取码。

51单片机学习:LCD1602液晶显示实验相关推荐

  1. 51单片机学习:直流电机实验

    实验名称:直流电机实验 接线说明:     实验现象:下载程序后,直流电机旋转5S后停止 注意事项:将直流电机两根线分别连接到"步进电机模块"输出端子J47的5V和O1上.     ...

  2. 51单片机学习日记 | LCD1602黑块和闪烁问题的处理

    51单片机学习日记 芯片:STM89C516RD+ 开发板:普中A4 学习:By 江科大自化协 LCD1602模块问题的处理办法: 第一行黑块 原因是初始化有问题:LCD1602如果没有初始化就会出现 ...

  3. (含代码仿真)51单片机+DHT22+LCD1602温湿度检测计+温湿度达阈值控制用电器

    系列文章目录 (仿真模拟)51单片机+DHT22+LCD1602温湿度检测计+温湿度达阈值控制用电器 文章目录 系列文章目录 文章目录 制作要求 一.整体说明 二.电路仿真 三.使用介绍 四.部件说明 ...

  4. 51单片机控制LCD1602模块

    51单片机控制LCD1602模块 视频播放:LCD1602视频 (1)LCD1602概述 先来看看LCD1602什么意思?Liquid Crystal Display(LCD)表示液晶显示,1602 ...

  5. 1602实现计算机实验报告,LCD1602液晶显示实验报告

    LCD1602液晶显示实验报告 一.实验目的 (1)了解LCD1602的基本原理,掌握其基本的工作流程. (2)学习用Verilog HDL语言编写LCD1602的控制指令程序,能够在液晶屏 上显示出 ...

  6. C语言LCD1602液晶实验报告,LCD1602液晶显示实验报告.doc

    LCD1602液晶显示实验报告 LCD1602液晶显示实验报告 实验目的 (1)了解LCD1602的基本原理,掌握其基本的工作流程. 学习用Verilog HDL语言编写LCD1602的控制指令程序, ...

  7. 基于51单片机的LCD1602显示温湿度

    51单片机基础难点知识理解后,直接通过下面3个小项目可以更好理解51单片机.中断 定时器 串口甚至是基础的IO输入输出都有结合,再加上一些外设模块的学习(如1602显示屏,L298N电机驱动等) 项目 ...

  8. 51单片机用c语言在液晶1602上显示汉字,lcd1602与单片机连接图,基于51单片机的lcd1602液晶显示屏连接电路图...

    描述 LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符.LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示, ...

  9. 基于51单片机的lcd1602万年历设计_温度+闹钟心得

    基于51单片机的lcd1602万年历设计_温度+闹钟心得 下载地址 https://download.csdn.net/download/weixin_44017446/10908985 当看到这个学 ...

最新文章

  1. UIImage图片拉伸方法
  2. POJ1849 Two——贪心——Pku1849
  3. java matcher group_JAVA正则表达式matcher.find()和 matcher.matches()的区别
  4. mysql 启动报错Can't connect to local MySQL server through socket '/data/mysql/mysql/mysql.sock'(111)...
  5. 关于蛙跳算法的计算机文献,文化蛙跳算法性能分析研究.PDF
  6. C语言变量声明加冒号的用法
  7. ECshop仿顺丰优选综合购物商城平台源码旗舰版+团购+触屏版+微信支付
  8. c语言编程能力提高,C语言编程能力的培养
  9. easyui ajax post,实例详解EasyUI框架使用Ajax提交注册信息
  10. python 规则引擎 drools_Drools 规则引擎环境搭建
  11. 9.5.3 Android Apk 反编译 9.5.4 Android Apk 加密
  12. journalctl命令详解
  13. 下载Youtube单个视频和播放列表的方法详细教程
  14. 亚马逊的人工智能Alexa竟然独自大笑 笑声很吓人(附视频)
  15. Google系列Android手机无法联网/无法上网/WIFI网络受限等问题的解决方法
  16. Applied Cryptography:chapter 11 数学背景
  17. android屏幕 录制检测,Android 录制屏幕的实现方法
  18. matlab 根式化简,薛定宇教授大讲堂(卷Ⅳ):MATLAB最优化计算最新章节_薛定宇著_掌阅小说网...
  19. SOUI中屏蔽右键菜单
  20. ERP是什么?ERP管理系统怎么用?

热门文章

  1. 三大地图,通过url获取网页定位嵌套在iframe中展示
  2. 人类(行为)动力学(2)——主要分析指标
  3. Freecodecamp 刷题记录——前端基础算法
  4. 小甲鱼python课程学习_部分
  5. Java实验报告经验总结
  6. 蚂蚁集团2022-09-15笔试
  7. ubuntu下git安装
  8. sqlite特性 只能添加字段 不能修改字段 的解决方法 和php sqlite的管理工具 sqlbuddy
  9. 中文搜索引擎技术揭密:网络蜘蛛
  10. c语言试卷自动批改系统.c