造价通

反馈
取消

热门搜词

造价通

取消 发送 反馈意见

12864液晶串行如何显示?

2018/09/06141 作者:佚名
导读:12864液晶串行显示 这一篇只是简单的介绍了 12864液晶 串行显示一些文字不能显示图片,先看一下 12864 的引脚。 从上面的引脚说明我们可以看出,如果要想串行显示只需要将 4、5、6 引脚接到单片机就行了,同时还需要将 1、15

12864液晶串行显示

这一篇只是简单的介绍了 12864液晶 串行显示一些文字不能显示图片,先看一下 12864 的引脚。

从上面的引脚说明我们可以看出,如果要想串行显示只需要将 4、5、6 引脚接到单片机就行了,同时还需要将 1、15、20 引脚接地,17、19 引脚接电源,注意 17 号引脚所说的低电平有效,并不是将 17 号引脚接地复位功能就可以使用了,而是需要软件置低,为了节省 IO 口要将 17 号引脚置高,置高说明 17 号引脚复位功能不使用。 3 号引脚接一 10k可调变阻以调节12864液晶 的 亮 度 。具 体 接 法 可 参 考 下 图 :

以下是程序:/********************************************************************串行12864液晶显示*引脚说明:CS P1.0SID P1.1SCLK P1.2PSB P1.3RST P1.4Ps:因为PSB和RST我们已经在电路中连接好了,所以这两个引脚没有使用 *********************************************************************** / #include <msp430g2553.h> #define uchar unsigned char #define uint unsigned int/********************************************************************* 名称 : 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){P1OUT |= BIT1; //SID = 1;} else{P1OUT &= ~BIT1;//SID = 0;}P1OUT &= ~BIT2;//SCLK = 0; P1OUT |= BIT2;//SCLK = 1;}}/********************************************************************* 名称 : write_com()* 功能 : 写串口指令* 输入 : cmdcode* 输出 : 无**********************************************************************/ void write_com( unsigned char cmdcode){P1OUT |= BIT0;//CS = 1;sendbyte(0xf8); //告诉12864接下来传送指令 sendbyte(cmdcode & 0xf0); sendbyte((cmdcode << 4) & 0xf0);delay(2);}

/********************************************************************* 名称 : write_data()* 功能 : 写串口指令* 输入 : cmdcode* 输出 : 无***********************************************************************/ void write_data( unsigned char Dispdata){P1OUT |= BIT0;//CS = 1;sendbyte(0xfa); //告诉12864接下来传送数据 sendbyte(Dispdata & 0xf0); sendbyte((Dispdata << 4) & 0xf0); delay(2);}/********************************************************************* 名称 : lcdinit()* 功能 : 初始化函数* 输入 : cmdcode* 输出 : 无***********************************************************************/ void lcdinit(){/* P1OUT &= ~BIT4;//RST = 0; delay(100);P1OUT |= BIT4;//RST = 1; 这一部分是LCD复位功能,我们已经将复位引脚置高,所以复位功能不能使用了,如果要使用复位功能就将其接到单片机IO口再加上这段函数就行*/delay(20000);write_com(0x30); //基本指令操作delay(50);write_com(0x0c); //显示开 关闭光标delay(50);}/********************************************************************* 名称 : hzkdis()* 功能 : 显示字符串* 输入 : *s* 输出 : 无***********************************************************************/

void hzkdis( char *s){ while(*s > 0){write_data(*s);s++;delay(50);}}/********************************************************************* 名称 : Test()* 功能 : 显示子函数* 输入 : 无* 输出 : 无***********************************************************************/ void Test(){write_com(0x03); //地址归为 delay(50);write_com(0x81); //显示第一行hzkdis("二院科协");write_com(0x91); //显示第二行hzkdis("刘渠");}/********************************************************************* 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无***********************************************************************/ void main(){P1DIR |= BIT0 + BIT1 + BIT2 +BIT3 + BIT4; WDTCTL = WDTPW + WDTHOLD; //关闭看门狗/* P1OUT &= ~BIT3; PSB = 0; 串并行选择,如果要使用并行方式,只要置高就行,我们已将PSB接地选择了串行这句可以不要*/delay(1);lcdinit();delay(10);

while(1){Test();delay(5000);}}12864 程序的详细分析: void sendbyte( unsigned char zdata){ unsigned int i; for(i=0; i<8; i++){ if((zdata << i) & 0x80){P1OUT |= BIT1; //SID = 1;} else{P1OUT &= ~BIT1;//SID = 0;}P1OUT &= ~BIT2;//SCLK = 0;P1OUT |= BIT2;//SCLK = 1;}}这个函数的功能就是按照12864传送数据的时序图将数据一位一位的传送给12864,这部 分 程 序 需 要 参 照 12864 的 时 序 图 来

if((zdata << i) & 0x80) 这是在判断传送过来的数据 zdata 的每一位数据是 0还是 1, 假设 zadata 是 10101111 来分析一下, 那么就是 zdata 先左进 0 还是10101111 不变,然后与 0x80 进行“与”运算,0x80 就是 10000000, 10101111& 10000000————10000000“与”完之后为 1000000,为非 0,所以 P1OUT 输出 1,然后 i++等于 1;zdata左进 1 为 01011110;再与 0x80 进行“与”运算,结果为 00000000,所以 P1OUT 输出为 0;与 0x80 进行“与”运算,因为 0x80 只有第一位是 1,其他都是 0,所以这样就可以不改变 zdata 的第一位数据而使其他位为 0,如果 zdata 第一位为 1“与”后结果就是非零,就输出 1,反之相反。void write_com(unsigned char cmdcode){P1OUT |= BIT0;//CS = 1;sendbyte(0xf8); //告诉12864接下来传送指令 sendbyte(cmdcode & 0xf0); sendbyte((cmdcode << 4) & 0xf0); delay(2);}传送指令的函数,P1OUT |= BIT0; 先使片选信号为高,接下来才能开始传送数据,sendbyte(0xf8);0xf8可以从12864的使用手册中查出来他是告诉12864接下来传送的是指令。然后把数据分两次传送过去。Ps:本程序所使用单片机为 MSP430.

文章原创来于12864:http://www.hzjingxian.com/zixun/xydt/932.html,转载请注明出处

*文章为作者独立观点,不代表造价通立场,除来源是“造价通”外。
关注微信公众号造价通(zjtcn_Largedata),获取建设行业第一手资讯

热门推荐

相关阅读