STC12C5A60S2在LCD1602基本显示程序

#include <STC12C5A60S2.H>

/*=================================================
*自定义数据类型
=================================================*/
typedef unsigned char uchar;
typedef unsigned int uint;

#define LCD1602_DB P0	//LCD1602数据总线

sbit LCD1602_RS = P3^5;	 //RS端
sbit LCD1602_RW = P3^6;	 //RW端
sbit LCD1602_EN = P3^4;	 //EN端

/*=================================================
*函数名称:Read_Busy
*函数功能:判断1602液晶忙,并等待
=================================================*/
void Read_Busy()
{
	uchar busy;
	LCD1602_DB = 0xff;//复位数据总线
	LCD1602_RS = 0;	  //拉低RS
	LCD1602_RW = 1;	  //拉高RW读
	do
	{
		LCD1602_EN = 1;//使能EN
		busy = LCD1602_DB;//读回数据
		LCD1602_EN = 0;	 //拉低使能以便于下一次产生上升沿
	}while(busy & 0x80); //判断状态字BIT7位是否为1,为1则表示忙,程序等待
}
/*=================================================
*函数名称:LCD1602_Write_Cmd
*函数功能:写LCD1602命令
*调用:Read_Busy();
*输入:cmd:要写的命令
=================================================*/
void LCD1602_Write_Cmd(uchar cmd)
{
	Read_Busy();	 //判断忙,忙则等待
	LCD1602_RS = 0;
	LCD1602_RW = 0;	//拉低RS、RW操作时序情况1602课件下中文使用说明基本操作时序章节
	LCD1602_DB = cmd;//写入命令
	LCD1602_EN = 1;	 //拉高使能端 数据被传输到LCD1602内
	LCD1602_EN = 0;	 //拉低使能以便于下一次产生上升沿
}
/*=================================================
*函数名称:LCD1602_Write_Dat
*函数功能:写LCD1602数据
*调用:Read_Busy();
*输入:dat:需要写入的数据
=================================================*/
void LCD1602_Write_Dat(uchar dat)
{
	Read_Busy();
	LCD1602_RS = 1;
	LCD1602_RW = 0;
	LCD1602_DB = dat;
	LCD1602_EN = 1;
	LCD1602_EN = 0;
}
/*=================================================
*函数名称:LCD1602_Dis_OneChar
*函数功能:在指定位置显示一个字符
*调用:LCD1602_Write_Cmd(); LCD1602_Write_Dat();	
*输入:x:要显示的横坐标取值0-40,y:要显示的行坐标取值0-1(0为第一行,1为第二行)
		dat:需要显示的数据以ASCLL形式显示
=================================================*/
void LCD1602_Dis_OneChar(uchar x, uchar y,uchar dat)
{
	if(y)	x |= 0x40;
	x |= 0x80;
	LCD1602_Write_Cmd(x);
	LCD1602_Write_Dat(dat);		
}
/*=================================================
*函数名称:LCD1602_Dis_Str
*函数功能:在指定位置显示字符串
*调用:LCD1602_Write_Cmd(); LCD1602_Write_Dat();
*输入:x:要显示的横坐标取值0-40,y:要显示的行坐标取值0-1(0为第一行,1为第二行)
		*str:需要显示的字符串
=================================================*/
void LCD1602_Dis_Str(uchar x, uchar y, uchar *str)
{
	if(y) x |= 0x40;
	x |= 0x80;
	LCD1602_Write_Cmd(x);
	while(*str != '\0')
	{
		LCD1602_Write_Dat(*str++);
	}
}
/*=================================================
*函数名称:Init_LCD1602
*函数功能:1602初始化
*调用:	LCD1602_Write_Cmd();
=================================================*/
void Init_LCD1602()
{
	LCD1602_Write_Cmd(0x38); //	设置16*2显示,5*7点阵,8位数据接口
	LCD1602_Write_Cmd(0x0c); //开显示
	LCD1602_Write_Cmd(0x06); //读写一字节后地址指针加1
	LCD1602_Write_Cmd(0x01); //清除显示
}

void main()
{
	uchar TestStr[] = {"Hello World!"};
	uchar str[] = {"LCD1602 display"};
	Init_LCD1602();//1602初始化
	LCD1602_Dis_Str(0, 0, &TestStr[0]);	//显示字符串
	LCD1602_Dis_Str(0, 1, &str[0]);	//显示字符串
	LCD1602_Dis_OneChar(15, 1, 0xff); //显示一个黑方格  请查表
	while(1);
}
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: stc12c5a60s2是一款单片机芯片,可以控制LCD1602液晶显示屏进行显示。通过编写程序,可以实现在LCD1602显示各种文字、数字、符号等内容。这种组合可以用于各种电子设备中,例如计算器、温度计、电子钟等。 ### 回答2: stc12c5a60s2是一种常用的单片机,它拥有典型的8051指令集,并支持多达12MHz的系统时钟速度。该单片机导出的I/O口数量比较多,可满足大多数应用。LCD1602液晶显示器是一种16×2的字符型液晶显示器,它可以显示英文字母、数字、符号,也可用于中、日文字的显示stc12c5a60s2LCD1602显示器的连接一般需要涉及到8个IO引脚,包括RS、RW、E、D0-D7。RS、RW、E是LCD的控制引脚,其中RS为RS=1时数据口D0-D7所输入的数据被认为是字符数据,RS=0时所输出的数据被认为是指令码;RW为RW=1时所读数据,RW=0时所写数据;E是LCD的使能引脚,当E有效时,LCD会响应RS和RW的数据。 对于stc12c5a60s2LCD1602的连接,可以将RS接到P1.0引脚,RW连接到P1.1引脚,E连接到P1.2引脚,D0-D7分别连接到P2.0-P2.7引脚上。然后可以编写程序通过单片机控制LCD的显示,例如可以使用stc-isp V6.86软件结合C语言编写程序实现LCD的显示。 总的来说,stc12c5a60s2LCD1602显示屏的组合比较常见,使用起来相对简单,也可以满足很多实际需求。对于初学者来说,可以通过学习相关的单片机显示器知识,逐步深入了解其原理与应用,从而逐步掌握实际的应用技巧。 ### 回答3: stc12c5a60s2是一款单片机,而LCD1602则是一种常见的液晶显示器。 在使用stc12c5a60s2控制LCD1602显示之前,首先要确保硬件电路接线正确,比如要保证输入电压符合要求,数据线接对位置等等。 为了控制LCD1602显示,需要使用stc12c5a60s2的GPIO(通用输入输出)端口来给液晶显示器发送命令和数据。具体来说,需要对LCD1602液晶显示器进行初始化,包括设置模式和清屏等操作,然后才能将数据进行显示。 在控制LCD1602显示时,需要注意一些细节,比如操作速度、数据位长度、字库等。另外,为了简化程序编写,还可以使用现成的LCD1602库,比如Keil中自带的“LCD1602”文件夹,或者其他第三方库。 总之,控制LCD1602显示需要综合考虑硬件和软件两个方面,需要对单片机的GPIO端口有一定的了解和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值