标题:
LCD12864显示屏使用心得体会与例程及资料下载
[打印本页]
作者:
fbq1328401010
时间:
2017-12-27 01:11
标题:
LCD12864显示屏使用心得体会与例程及资料下载
1.第一次使用12864时不知道如何接线,由于开始把BLA和VCC接到了MSP430端口的VCC端,使得显示屏亮度变暗,后来才知道
BLA
(
19
脚)和
VCC
(
2
脚)是
12864
的工作电压
,最好接到
5V
的供电电源上,MSP430端口Vcc输出电压是3.5V左右,可以用万用表测试。
2.12864串行测试要接
8
条线
。DB0~DB7不需要接。根据软件程序,
R/w
(
5
脚)
、
E
(
6
脚)
两个分别接MSP430的P1.4、P1.5。
VCC
(
2
脚)
和
BLA
(
19
脚)
两个应该接+5V工作电压,
GND
(
1
脚)
和
BLK
(
20
脚)
两个应该接在同一个地。+5V电压可以使用另一片51单片机提供。把51单片机的Vcc和GND跳线帽摘下来,两个引脚都要接满才能导通。
PSB
(
15
脚)
接地说明是串口通讯。
RS
(
4
脚)
接高电平——可以接MSP430的VCC,3.5V足够是高电平了。
3.使用13级之前的学长们留下的程序库,发现MSP430中有一些地方需要改进,就是初始化程序中应该包含有清屏指令,而他们都没有将这条指令写入,屏幕上会出现一些乱码。
4.基本的MSP430 LCD12864程序中包含有的基本的函数:
写命令函数(对显示屏进行一些操作,比如清屏,显示全部字,关闭游标等)
写数据函数(想要在屏幕上输出的东西)
初始化函数(对显示屏进行初始化,调用到写命令函数)
设置坐标函数(了解12864的坐标,第一行是0x80,第二行0x90,第三行0x88,第四行0x98)
写字符串或写数字函数(输出自己想要的字符,但是要注意12864一行只能显示8个字,而且不一定能全部正确显示,会出现各种各样的问题,需要自己慢慢排查接线或者重新调试)
MSP430单片机源程序如下:
//12864液晶串行显示测试程序
//P1.4模拟SID(接第5脚),P1.5模拟SCLK(接第6脚)
//4脚(CS信号)接高电平选通,15脚(PSB信号)接地选择串行方式
//17脚(RST信号)根据注释提示悬空
#include <MSP430g2231.h>
void int_port(void) //管脚初始化
{
P1SEL&=~BIT4; //P1.4模拟SID,设置为i/o口输出方向
P1DIR|=BIT4;
P1OUT&=~BIT4;
P1SEL&=~BIT5; //P1.5模拟SCLK,设置为i/o口输出方向
P1DIR|=BIT5;
P1OUT&=~BIT5;
}
void delay(unsigned int t) //延时函数
{ //粗略延时,满足时序要求
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}
void sendbyte(unsigned char zdata) //数据传送函数
{
unsigned char code_seg7;
unsigned char serial_clk;
unsigned char serial_shift;
code_seg7=zdata;
serial_shift=0x80;
for(serial_clk=0; serial_clk<8; serial_clk++)
{
if(code_seg7&serial_shift)
{
P1OUT|=BIT4; //SID为1
}
else
{
P1OUT&=~BIT4; //SID为0
}
P1OUT&=~BIT5; //产生时钟信号下沿
P1OUT|=BIT5; //产生时钟信号上沿
serial_shift=serial_shift>>1; //准备发送下一位数据
}
}
void write_com(unsigned char cmdcode) //写命令函数
{ //串口控制格式(11111AB0)
//A数据方向控制,A=H时读,A=L时写
//B数据类型选择,B=H时为显示数据,B=L时为命令
sendbyte(0xf8); //MCU向LCD发命令
sendbyte(cmdcode & 0xf0); //发高四位数据(数据格式D7D6D5D4_0000)
sendbyte((cmdcode << 4) & 0xf0);//发低四位数据(数据格式D3D2D1D0_0000)
delay(2); //延时等待
}
void write_data(unsigned char Dispdata)//写数据函数
{
sendbyte(0xfa); //MCU向LCD发数据
sendbyte(Dispdata & 0xf0); //发高四位数据
sendbyte((Dispdata << 4) & 0xf0);//发低四位数据
delay(2);
}
void lcdinit() //LCD初始化
{
delay(20000); //复位等待(内部自带上电复位电路),时间较长
write_com(0x30); //功能设定:基本指令集操作
delay(50); //延时等待
write_com(0x0c); //整体显示,关游标
write_com(0x01); //屏幕清零
delay(50);
}
void print_string(unsigned char *s) //发送字符串
{
while(*s > 0) //C语言里字符串末尾自动加“\0”(ASCII码值为0)
{
write_data(*s); //发送字符对应的ASCII码,12864指针可设置自动指向下一个显示地址
s++;
delay(50);
}
}
void Test()
{ unsigned char dat1,dat2,dat3,dat4;
dat1=1;dat2=2;dat3=3;dat4=4;//显示dat1—4的值,如果dat1=1不转换为ASCII码,则输出的应该是31而不是1
write_com(0x03); //发指令,地址归位
delay(50); //延时
write_com(0x80); //第一行首地址0x80
print_string("德州仪器MSP430"); //第一行显示。一行能显示8个字,一个中文顶2个字母或数字
write_com(0x94); //第二行首地址0x90,从第四个开始显示
write_data(dat1+0x30); //发送dat1的ASCII码,显示dat1的值
write_data(dat2+0x30); //发送dat1的ASCII码,显示dat2的值
write_data(dat3+0x30); //发送dat1的ASCII码,显示dat3的值
write_data(dat4+0x30); //发送dat1的ASCII码,显示dat4的值
write_data('H'); //发送H的ASCII码,显示H
write_data('z'); //发送z的ASCII码,显示z
write_com(0x90);
print_string("频率:");
delay(200); //较长时间延时,保证下次操作前LCD完成上述功能处于非忙状态
}
void main()//正确结果:屏幕显示:德州仪器MSP430(第一行) 频率: 1234HZ(第二行)
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
int_port(); //端口初始化
lcdinit(); //LCD初始化
Test(); //测试
…………
…………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
(9.6 KB, 下载次数: 87)
下载附件
2017-12-27 02:30 上传
所有资料51hei提供下载:
12864.rar
(14.87 MB, 下载次数: 317)
2017-12-27 02:29 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
TXWS01
时间:
2017-12-27 07:48
谢谢楼主分享
作者:
hungyu36
时间:
2019-1-2 13:56
谢谢楼主分享
作者:
Li-Antoine
时间:
2019-3-6 16:04
谢谢 楼主分享
作者:
woaitaile233
时间:
2019-7-30 15:36
感谢楼主分享
作者:
wngsouchao
时间:
2019-10-28 09:47
谢谢楼主分享
作者:
tpf20166
时间:
2019-12-8 21:01
谢谢楼主分享
作者:
yyyeees
时间:
2020-1-17 17:26
十分感谢楼主的分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1