当前位置: 首页 > article >正文

基于C8051F020单片机的液晶显示,LCD1602并口驱动,单片机并口驱动LCD1602

一、前言

LCD1602是一种广泛使用的字符型液晶显示模块,有8根数据线和3根控制线E,RS和R/W,8根数据线与单片机P6连接,3根控制线与使用P1口的P1.4、P1.5、P1.6连接,VO连接了P1.7,通过给P1.7赋值0或1,让LCD最亮或最暗。

二、程序展示

1、头文件部分

#include <c8051f020.h>                 

sbit LCD_VO=P1^7; 
sbit LCD_RS=P1^6;		
sbit LCD_RW=P1^5;		
sbit LCD_EN=P1^4;
sbit LED=P3^4;

unsigned char code List1[] = "LCD-1602";
unsigned char code List2[] = "C8051F020";
unsigned char ch1,ch2;

2、端口初始化

void PORT_Init (void)
{
   XBR2    = 0x40;		/*使能交叉开关*/
   P1MDOUT  =0xff;
   P3MDOUT  =0xff;
   P74OUT |= 0xff;     /*推挽输出*/
}

3、延时子程序

void delay(uint s)
{
	uint x,y;
	for(x=0;x<s;x++)
		for(y=0;y<121;y++);	
}

4、写命令子程序

void WriteCmdLCD(unsigned char CMD)
{	
			
	LCD_RS=0;
	LCD_RW=0;
	P6=CMD;
	LCD_EN=1;
	delay(50);
	LCD_EN=0;
}

5、写数据子程序

void WriteDataLCD(unsigned char Wdata)
{					
	LCD_RS=1;
	LCD_RW=0;
	P6=Wdata;
	LCD_EN=1;
	delay(50);
	LCD_EN=0;
}	

6、显示单个字符子程序

void DisplayOneChar(unsigned char M, unsigned char N, unsigned char Data)
{
	N &= 0x1;
	M &= 0xF; 				//X不能大于15,Y不能大于1
	if (N) M |= 0x40;   	//显示第二行时地址码 0x40;
	M |= 0x80; 				// 计算指令码
	WriteCmdLCD(M);    //发送地址码
	WriteDataLCD(Data);
}

7、显示字符串子程序

void Lcd_Init()				
{				
	WriteCmdLCD(0x38);				//初始化为8位数据,双行显示,5X7字型	
	WriteCmdLCD(0x08);				//	
	WriteCmdLCD(0x01);				//	
	WriteCmdLCD(0x06);				//	
	WriteCmdLCD(0x0c);				//	
}	

8、显示字符串子程序

void Display_List(unsigned char M, unsigned char N, unsigned char code *Data)
{
	unsigned char Length_List;
	Length_List = 0;
	N &= 0x1;
	M &= 0xF; 						//M不能大于15,N不能大于1
	while (Data[Length_List]>0x20)  //到达字串尾则退出
		{
		if (M <= 0xF) 				//M应小于0xF
			{
			DisplayOneChar(M, N, Data[Length_List]); //显示单个字符
			Length_List++;
			M++;
			}
		}
}

9、主程序

void main (void) 
{
	WDTCN = 0xde;
	WDTCN = 0xad;   //关闭看门狗
	PORT_Init ();
	OSCICN |= 0x01;
	delay(5000);
	LCD_VO=0;
	Lcd_Init ();
	ch1=0x41;
	for(ch2=0;ch2<26;ch2++)
	{
		LED=0;
		delay(500);

		WriteDataLCD(ch1);
		ch1++;
		if(ch1==0x51)
		{
			WriteCmdLCD(0xc0);
		}
		if(ch1==0x5b)
		{
			break;
		}
		LED=1;
		delay(500);
	}
	delay(2000);

	WriteCmdLCD(0x01);
	for(ch2=0;ch2<10;ch2++)
	{
		LED=0;
		delay(500);
		Display_List(3, 0, List1);
		Display_List(2, 1, List2);		
		LED=1;
		delay(500);
	}
	delay(5000);


}

http://www.kler.cn/a/596969.html

相关文章:

  • Vue.js 表单开发
  • python3最新版下载及python 3.13.1安装教程(附安装包)
  • MySQL拒绝访问
  • SAP ABAP SELECT SINGLE 注意点
  • HyperAD:学习弱监督音视频暴力检测在双曲空间中的方法
  • WSL git文件异常 所有文件均显示已修改
  • PHP 应用文件管理模块显示上传黑白名单类型过滤访问控制
  • Vue 3 项目实现国际化指南 i18n
  • Python:可迭代对象,迭代器对象
  • 图解AUTOSAR_CP_DiagnosticLogAndTrace
  • OpenCV 基础模块 Python 版
  • Ae 效果详解:描边
  • UE4学习笔记 FPS游戏制作12 添加第二把枪,制作枪的父类,动态生成物体,切换武器
  • ccfcsp1901线性分类器
  • 【day1】数据结构刷题 链表
  • linux常用符号
  • pcap流量包分析
  • 【005安卓开发方案调研】之Flutter+Dart技术开发安卓
  • dockers数据卷挂载和文件挂载
  • 微信小程序的业务域名配置(通过ingress网关的注解)