51单片机12864串口硬件电路图和程序

1、12864B V2.0液晶显示块,有不同时期生产的,他们在硬件上有可能不一样,串、并口的转换在硬件上的设置有可能不太一样。本实验所用实物如图所示:

正面
液晶正面
背面
液晶背面

2、程序

/********************************************************************
* 文件名  : 硬件串行12864B v2.0显示.c
* 描述    :  该程序实现了12864以串行的方式进行通信。
***********************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int

sbit CS=P2^7;	    //片选信号 第4脚
sbit SID=P2^6;		//数据信号 第5脚
sbit SCLK=P2^5;		//时钟信号 第6脚
/***********************************************************************
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,    //第一行汉字位置  
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,    //第二行汉字位置  
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,    //第三行汉字位置 
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,    //第四行汉字位置 
**********************************************************************/


/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay(unsigned int t)
{
	unsigned int i,j;
	for(i=0; i<t;  i++)
    for(j=0; j<10; j++);
}

/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
***********************************************************************/
void sendbyte(unsigned char zdata)
{
	unsigned int i;
	for(i=0; i<8; i++)
	{
		if((zdata << i) & 0x80)
		{
			SID = 1;
		}
		else 
		{
			SID = 0;
		}
		SCLK = 0;
		SCLK = 1;
	}
}

/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
	CS = 1;
	sendbyte(0xf8);
	sendbyte(cmdcode & 0xf0);
	sendbyte((cmdcode << 4) & 0xf0);
	delay(2);
}

/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_data(unsigned char Dispdata)
{
	CS = 1;
	sendbyte(0xfa);
	sendbyte(Dispdata & 0xf0);
	sendbyte((Dispdata << 4) & 0xf0);
	delay(2);
}

/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit()
{  
	delay(2000);
	write_com(0x30);
	delay(50);
	write_com(0x0c);
	delay(50);
}

/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
***********************************************************************/
void hzkdis(unsigned char code *s)
{  
	while(*s > 0)
    { 
		write_data(*s);
		s++;
		delay(50);
    }
}

/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
//注意,如果有“数”这个字,会出现乱码。
//注意,如果有“数”这个字,会出现乱码。
//注意,如果有“数”这个字,会出现乱码。
//注意,如果有“数”这个字,会出现乱码。**
***********************************************************************/
void Test()
{  
	write_com(0x03);
	delay(50);    
	write_com(0x80);
	hzkdis("电动汽车与电网互");
	write_com(0x90);
	hzkdis("动停车场:Floor3");
	write_com(0x88);
	hzkdis("充电车辆 3 辆"); 
	write_com(0x98);
	hzkdis("136.5A  372.2V");
}


/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{ 
	delay(10);
	lcdinit();
	delay(10);
	while(1)
	{
		Test();
		delay(50000);
		write_com(0x01);//清屏
		delay(20000);
		
	}
}
## 3、液晶描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/598967fe4ef543318a7eaab6cd7b1466.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMTk1MzIwODM=,size_20,color_FFFFFF,t_70,g_se,x_16)



评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值