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

基于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);


}

相关文章:

  • 【嵌入式学习2】基础语法
  • ROM(只读存储器) 、SRAM(静态随机存储器) 和 Flash(闪存) 的详细解析
  • SpringCloud构建一个服务步骤
  • 在刀刃上发力:如何精准把握计划关键节点
  • 数据结构——串
  • Java 大视界 -- Java 大数据中的数据隐私保护技术在多方数据协作中的应用(147)
  • B树和 B+树
  • 如何实现单点登录?
  • 【js逆向入门】图灵爬虫练习平台 第九题
  • Linux进程控制(四)之进程程序替换
  • Spring Boot02(数据库、Redis)02---java八股
  • HTML网页代码预览器
  • 【Linux】Ubuntu 24.04 LTS 安装 Hadoop-3.4.1
  • TCP | 序列号和确认号 [逐包分析] | seq / ack 详解
  • 视频播放器(watermelon Player)vue2使用体验(教程版)
  • Android Compose 框架按钮与交互组件模块源码深度剖析(二)
  • windows清除电脑开机密码,可保留原本的系统和资料,不重装系统
  • others-rustdesk远程
  • 带你从入门到精通——自然语言处理(十. BERT)
  • LeetCode hot 100 每日一题(13)——73. 矩阵置零
  • 博物馆有一项活动40岁以上不能参加?馆方回应
  • 当哲学与戏剧作为一种生活方式——《人生六戏》分享会
  • 鸿蒙智行八大车型亮相上海车展,余承东拉上三家车企老总“直播推销”
  • “70后”女博士张姿卸任国家国防科技工业局副局长
  • 与包乐史驾帆航行|航海、钓鱼和写书:一个记者的再就业之路
  • 国家发改委:将开展市场准入壁垒清理整治行动