您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 学习笔记之12864串行显示
桂林电子科技大学信息与通信学院科协112864128641286412864串行显示串行显示串行显示串行显示这只是简单介绍12864串行显示一些文字不能显示图片,先看一下12864的引脚。由上面的引脚说明我们可以看出,要想串行显示只需要将4、5、6引脚接到单片机就可以了,同时需要将1、、15、20引脚接地,17、19引脚接电源,注意17号引脚所说低电平有效,并不是将17号引脚接地复位功能就可以使用了,而是需要软件置低,为了节省IO口将17号引脚置高,置高说明17号引脚复位功能不使用。3号引脚接一10k可调变阻以调节12864的亮度。具体接法可参考下图:桂林电子科技大学信息与通信学院科协2以下是程序:/********************************************************************串行12864显示*引脚说明:CSP1.0SIDP1.1SCLKP1.2PSBP1.3RSTP1.4Ps:因为PSB和RST我们已经在电路中连接好了,所以这两个引脚没有使用***********************************************************************/#include#include#include#includemsp430g2553.h#define#define#define#defineucharunsignedunsignedunsignedunsignedcharcharcharchar#define#define#define#defineuintunsignedunsignedunsignedunsignedintintintint/*********************************************************************名称:delay()*功能:延时,延时时间为100us*t。这是通过软件延时,有一定误差。*输入:t*输出:无***********************************************************************/voidvoidvoidvoiddelaydelaydelaydelay(unsignedunsignedunsignedunsignedintintintintt){unsignedunsignedunsignedunsignedintintintinti,j;桂林电子科技大学信息与通信学院科协3forforforfor(i=0;it;i++)forforforfor(j=0;j10;j++);}/*********************************************************************名称:sendbyte()*功能:按照液晶的串口通信协议,发送数据*输入:zdata*输出:无***********************************************************************/voidvoidvoidvoidsendbytesendbytesendbytesendbyte(unsignedunsignedunsignedunsignedcharcharcharcharzdata){unsignedunsignedunsignedunsignedintintintinti;forforforfor(i=0;i8;i++){ifififif((zdatai)&0x80){P1OUT|=BIT1;//SID=1;}elseelseelseelse{P1OUT&=~BIT1;//SID=0;}P1OUT&=~BIT2;//SCLK=0;P1OUT|=BIT2;//SCLK=1;}}/*********************************************************************名称:write_com()*功能:写串口指令*输入:cmdcode*输出:无**********************************************************************/voidvoidvoidvoidwrite_comwrite_comwrite_comwrite_com(unsignedunsignedunsignedunsignedcharcharcharcharcmdcode){P1OUT|=BIT0;//CS=1;sendbyte(0xf8);//告诉12864接下来传送指令sendbyte(cmdcode&0xf0);sendbyte((cmdcode4)&0xf0);delay(2);}桂林电子科技大学信息与通信学院科协4/*********************************************************************名称:write_data()*功能:写串口指令*输入:cmdcode*输出:无***********************************************************************/voidvoidvoidvoidwrite_datawrite_datawrite_datawrite_data(unsignedunsignedunsignedunsignedcharcharcharcharDispdata){P1OUT|=BIT0;//CS=1;sendbyte(0xfa);//告诉12864接下来传送数据sendbyte(Dispdata&0xf0);sendbyte((Dispdata4)&0xf0);delay(2);}/*********************************************************************名称:lcdinit()*功能:初始化函数*输入:cmdcode*输出:无***********************************************************************/voidvoidvoidvoidlcdinitlcdinitlcdinitlcdinit(){/*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*输出:无***********************************************************************/桂林电子科技大学信息与通信学院科协5voidvoidvoidvoidhzkdishzkdishzkdishzkdis(charcharcharchar*s){whilewhilewhilewhile(*s0){write_data(*s);s++;delay(50);}}/*********************************************************************名称:Test()*功能:显示子函数*输入:无*输出:无***********************************************************************/voidvoidvoidvoidTestTestTestTest(){write_com(0x03);//地址归为delay(50);write_com(0x81);//显示第一行hzkdis(二院科协);write_com(0x91);//显示第二行hzkdis(刘渠);}/*********************************************************************名称:Main()*功能:主函数*输入:无*输出:无***********************************************************************/voidvoidvoidvoidmainmainmainmain(){P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4;WDTCTL=WDTPW+WDTHOLD;//关闭看门狗/*P1OUT&=~BIT3;PSB=0;串并行选择,如果要使用并行方式,只要置高就行,我们已将PSB接地选择了串行这句可以不要*/delay(1);lcdinit();delay(10);桂林电子科技大学信息与通信学院科协6whilewhilewhilewhile(1){Test();delay(5000);}}12864程序的详细分析:voidvoidvoidvoidsendbytesendbytesendbytesendbyte(unsignedunsignedunsignedunsignedcharcharcharcharzdata){unsignedunsignedunsignedunsignedintintintinti;forforforfor(i=0;i8;i++){ifififif((zdatai)&0x80){P1OUT|=BIT1;//SID=1;}elseelseelseelse{P1OUT&=~BIT1;//SID=0;}P1OUT&=~BIT2;//SCLK=0;P1OUT|=BIT2;//SCLK=1;}}这个函数的功能就是按照12864传送数据的时序图将数据一位一位的传送给12864,这部分程序需要参照12864的时序图来桂林电子科技大学信息与通信学院科协7if((zdatai)&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,反之相反。voidvoidvoidvoidwrite_comwrite_comwrite_comwrite_com(unsignedunsignedunsignedunsignedcharcharcharcharcmdcode){P1OUT|=BIT0;//CS=1;sendbyte(0xf8);//告诉12864接下来传送指令sendbyte(cmdcode&0xf0);sendbyte((cmdcode4)&0xf0);delay(2);}传送指令的函数,P1OUT|=BIT0;先使片选信号为高,接下来才能开始传送数据,sendbyte(0xf8);0xf8可以从12864的使用手册中查出来他是告诉12864接下来传送的是指令。然后把数据分两次传送
本文标题:学习笔记之12864串行显示
链接地址:https://www.777doc.com/doc-5728219 .html