LCD1602

一、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);				
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旭日初扬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值