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
#includeLCD12864.c#include #include #include / //999.99---99.99;---0. ik=32意思是3个整数,两个小数; //ik=22,意思是2个整数,2个小数 void LCD12864_Write_Float(float float_temp,char ik);
#includeunsigned char LCD12864_num[13]={"0123456789:.-"}; / void LCD12864_Delaynms(unsigned int di) //延时 { unsigned int da,db; for(da=0;da 附录:LCD12864手册截图。



