完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序如下,cs脚我接的是vcc,用的是5v电压的12864,之前怀疑是因为引脚只有3.3v才不显示的,但是之后加了缓冲器升到5v还是没有显示,程序检查半天也没看到错误 //12864液晶串行显示测试程序 //P1.4模拟SID(接第5脚),P1.5模拟SCLK(接第6脚) //4脚(CS信号)接高电平选通,15脚(PSB信号)接地选择串行方式 //17脚(RST信号)根据注释提示悬空 #include void int_port(void) //管脚初始化 { // P1SEL&=~(BIT4+BIT5); //P1.4模拟SID,设置为i/o口输出方向 P1DIR|=(BIT4+BIT5); } void delay(unsigned int t) //延时函数 { //粗略延时,满足时序要求 unsigned int i,j; for(i=0; i for(j=0; j<10; j++); } void sendbyte(unsigned char zdata) //数据传送函数 { P1OUT&=~BIT5; unsigned char code_seg7; unsigned char i; code_seg7=zdata; for(i=0; i<8; i++) { P1OUT&=~BIT5; if((code_seg7< P1OUT|=BIT4; //SID为1 else P1OUT&=~BIT4; //SID为0 delay(20); P1OUT|=BIT5;//产生时钟信号上沿 delay(20); P1OUT&=~BIT5; //产生时钟信号下沿 } } 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(20); //延时等待 } void write_data(unsigned char Dispdata)//写数据函数 { sendbyte(0xfa); //MCU向LCD发数据 sendbyte(Dispdata & 0xf0); //发高四位数据 sendbyte((Dispdata << 4) & 0xf0);//发低四位数据 delay(20); } void lcdinit() //LCD初始化 { delay(20000); //复位等待(内部自带上电复位电路),时间较长 write_com(0x30); //功能设定:基本指令集操作 delay(500); //延时等待 write_com(0x02); delay(500); write_com(0x0c); //整体显示,关游标 delay(500); write_com(0x01); delay(500); write_com(0x06); //屏幕清零 delay(500); write_com(0x80); } void write_pos(unsigned char x,unsigned char y) { unsigned char pos; if(x==1) x=0x80; else if(x==2) x=0x90; else if(x==3) x=0x88; else if(x==4) x=0x98; pos=x+y-1; write_com(pos); } void print_string(unsigned char x,unsigned char y,unsigned char *s) //发送字符串 { unsigned char i; lcdinit(); write_pos(x,y); for(i=0;*(s+i)!=' |