首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >51单片机系列有哪些类型_51单片机1602液晶显示原理

51单片机系列有哪些类型_51单片机1602液晶显示原理

作者头像
全栈程序员站长
发布2022-09-30 18:53:14
发布2022-09-30 18:53:14
1.1K0
举报

大家好,又见面了,我是你们的朋友全栈君。

Lcd液晶屏幕带有背光显示,可选择蓝光白光黄光三种背光颜色的屏幕,它更具有美光性,在实际生活中有广泛的应用。 实物图

原理图

RS:1为数据/0为指令;RW:1为读/0为写;E1为数据有效,下降沿执行指令

示例代码

main.c

代码语言:javascript
复制
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;
u8 Disp[]=" 5G NBiot At89c52";
/******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/
void main(void)
{ 

u8 i;
LcdInit();
for(i=0;i<16;i++)
{ 

LcdWriteData(Disp[i]);	
}
while(1);				
}

lcd.c

代码语言:javascript
复制
#include "lcd.h"
/******************************************************************************* * 函 数 名 : Lcd1602_Delay1ms * 函数功能 : 延时函数,延时1ms * 输 入 : c * 输 出 : 无 * 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。 *******************************************************************************/
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--);
}      
}
}
/******************************************************************************* * 函 数 名 : LcdWriteCom * 函数功能 : 向LCD写入一个字节的命令 * 输 入 : com * 输 出 : 无 *******************************************************************************/
#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时
void LcdWriteCom(uchar com)	  //写入命令
{ 

LCD1602_E = 0;     //使能
LCD1602_RS = 0;	   //选择发送命令
LCD1602_RW = 0;	   //选择写入
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;	 //选择写入命令
LCD1602_RW = 0;	 //选择写入
LCD1602_DATAPINS = com;	//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;	 //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = com << 4; //发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;	 //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/******************************************************************************* * 函 数 名 : LcdWriteData * 函数功能 : 向LCD写入一个字节的数据 * 输 入 : dat * 输 出 : 无 *******************************************************************************/		   
#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;	  //选择写入数据
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
/******************************************************************************* * 函 数 名 : LcdInit() * 函数功能 : 初始化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

lcd.h

代码语言:javascript
复制
#ifndef __LCD_H_
#define __LCD_H_
/********************************** 当使用的是4位数据传输的时候定义, 使用8位取消这个定义 **********************************/
//#define LCD1602_4PINS
/********************************** 包含头文件 **********************************/
#include<reg52.h>
//---重定义关键词---//
#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

效果图

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192616.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月17日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例代码
  • 效果图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档