栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

大屏LCD12864

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大屏LCD12864

1、实验室有几个大屏LCD12864,不知道是不是带中文字库,这里不用中文,本身就屏幕不够大,所以之类显示英文或者字符,能显示更加多的内容。

2、为了节约管脚,这里使用了串行的方式进行通信和数据传输。博文后面的截图有说明。

3、利用stc8a8k芯片,下载的时候,选择22.1184Mhz晶振,所以需要设置好对应的延时函数,比如毫秒延时等,匹配。可以利用ISP软件的软件延时器生成的代码作为参考。

4、

实验目的:

利用LCD12864显示四行,分别显示字符,字符串,整数,浮点数。
多菜单的使用,如何实现多个页面,可以通过按键,切换页面。切换页面的时候,注意清屏。

接线

12864—开发板
GND–GND
VCC-5V
V0–5V
RS–P00
RW -P01
E–P02
DB0–DB7—不接。
PSB可以直接接GND,也可以通过单片机的IO口控制,当高电平的时候,并口控制用到DB0-DB7,当GND低电平的时候,串口控制。
NC不接。
RST不接,也可以通过单片机的IO口控制。复位,低电平复位。
VOUT可以不接。
A—5V
K–GND。

关键函数以及修改的地方说明。

第一个,
使用stc8a8k,22.1184Mhz晶振,由于是1T单片机,所以要和传统的89C52单片机(12T)的部分修改,主要是延时函数的修改。利用ISP的软件生成延时函数,作为参考。

第二个。
特别注意,特别注意的地方。特别注意的地方。
LCD12864是为了显示中文的多,所以本身是可以显示
0123456789012345共16个字符,但是当用坐标的设置,在那里显示的时候,y方向,横方向,注意当y=0的时候,包括了01这两个位置,当y=1的时候,显示在23这个位置。是多了一个。
因为一个中文等于两个字节。

例如我想显示一个字符,

	LCD12864_set_xy(1,0);
	LCD12864_Write_char( 1, 'a');
	LCD12864_set_xy(2,1);
	LCD12864_Write_char( 1, 'b');
	LCD12864_set_xy(3,2);
	LCD12864_Write_char( 1, 'c');

得到的效果是


得到的启示是什么呢?
显示数据的时候,比如小数等,需要在GUI规划的时候,显示在整整的地方,不然会被刷新掉。
这个时候,可以将上面修改成。

注意,LCD12864_Write_string函数,包括了setxy函数了。

多了一个冒号,那么后面的数据连接就很正常了。

第三个,
显示字符的步骤,首先要设置x,y位置。

参数1,x=1,2,3,4,四个中的一个,四行。
参数2,y=0,1,2,3,4,5,6,7,做多8个。因为上面说了,一个中文就两个字符。这里自己测试一下就行了。
LCD12864_Write_char( 1, ‘a’);
第一个必须是1,代表写数据,第二个是你想写的字符。。
上面不推荐用,建议用写字符串的函数。。

第四个,写字符串的函数。

参数1,参数2和上面的一样,
参数1范围在1,2,3,4之间,
参数2范围在0,1,2,3,4,5,6,7之间。
这个会自己加页的。最好一行显示一行显示,不要等到串行。

第五个函数,写整数。
后面的三,是3位数。

第6个函数。写小数。3个正,2个小数,如123.45

//999.99---99.99;---0.  ik=32意思是3个整数,两个小数;
//ik=22,意思是2个整数,2个小数
void LCD12864_Write_Float(float float_temp,char ik)
{
	int float_temp0;
	unsigned char floatdisbuf[5];
	switch(ik)
	{
		case 32://123.45
			float_temp0=float_temp*100;
		  floatdisbuf[0]=float_temp0/10000;
		  floatdisbuf[1]=float_temp0/1000%10;
		  floatdisbuf[2]=float_temp0/100%10;
		  floatdisbuf[3]=float_temp0/10%10;
		  floatdisbuf[4]=float_temp0%10;
		
			LCD12864_Write_number( floatdisbuf[0]);
			LCD12864_Write_number( floatdisbuf[1]);
			LCD12864_Write_number( floatdisbuf[2]);
			LCD12864_Write_number(11);
			LCD12864_Write_number( floatdisbuf[3]);
			LCD12864_Write_number( floatdisbuf[4]);
		break;
		
			case 22://99.99
			float_temp0=float_temp*100;
		  floatdisbuf[0]=float_temp0/1000;
		  floatdisbuf[1]=float_temp0/100%10;
		  floatdisbuf[2]=float_temp0/10%10;
		  floatdisbuf[3]=float_temp0%10;

		
			LCD12864_Write_number(floatdisbuf[0]);
			LCD12864_Write_number(floatdisbuf[1]);
			LCD12864_Write_number(11);	
			LCD12864_Write_number( floatdisbuf[2]);
			LCD12864_Write_number( floatdisbuf[3]);
		
		break;
				
		case 21://10.9
			float_temp0=float_temp*100;
		  floatdisbuf[0]=float_temp0/1000;
		  floatdisbuf[1]=float_temp0/100%10;
		  floatdisbuf[2]=float_temp0/10%10;
		  floatdisbuf[3]=float_temp0%10;

		
			LCD12864_Write_number(floatdisbuf[0]);
			LCD12864_Write_number(floatdisbuf[1]);
			LCD12864_Write_number(11);	
			LCD12864_Write_number( floatdisbuf[2]);
		//	LCD12864_Write_number( floatdisbuf[3]);
		
		break;
				
		default:break;
					
	}
}

案例代码: main.c
#include 
#include 
#include 
#include   

/
//999.99---99.99;---0.  ik=32意思是3个整数,两个小数;
//ik=22,意思是2个整数,2个小数
void LCD12864_Write_Float(float float_temp,char ik);

LCD12864.c
#include 
unsigned char  LCD12864_num[13]={"0123456789:.-"};


/
void LCD12864_Delaynms(unsigned int di) //延时
{
	unsigned int da,db;
 	for(da=0;da 

附录:LCD12864手册截图。











转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784066.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号