|
楼主 |
发表于 2013-5-12 10:38:48
|
显示全部楼层
http://hi.baidu.com/chumingyu/item/b6c3a62a54b57b86af48f5ae
QC12864B 串行方式接口keil c51好用程序
串行一共四个引脚 :RS(CS) 串行的片选信号 ; R/W(SID) 串行的数据口; E(CLK) 串行的同步时钟; PSB 并/串行接口选择:H-并行,L-串行。
其中的PSB引脚为串并选择, QC12864B这个型号的显示屏厂家把它的PSB直接用一个零欧电阻接到VDD上了。这样的话咱再去把它接地当然是短路啦。这个零欧电阻是QC12864B后面的R9把它焊掉就OK啦。
串行程序是几年前编的,好用。如下
#include“reg52.h”
sbit lcd_cs=P0^0; //12864 RS(CS) 并行的指令/数据选择信号;串行的片选信号
sbit lcd_sid=P0^1; //12864 R/W(SID) 并行的读写选择信号;串行的数据口
sbit lcd_sclk=P0^2; //12864 E(CLK) 并行的使能信号;串行的同步时钟
sbit PSB=P0^3; //12864 PSB 并/串行接口选择:H-并行;L-串行
void lcd_w_cmd(unsigned char cmd) //功能设定
{
unsigned char i,j;
lcd_cs=1;
for (i=0;i<5;i++ )
{
lcd_sclk=0;
lcd_sid=1;
lcd_sclk=1;
_nop_();_nop_();
}
for(j=0;j<3;j++)
{
lcd_sclk=0;
lcd_sid=0;
lcd_sclk=1;
_nop_();_nop_();
}
trans_bit(cmd);
delay_ms(1);
lcd_cs=0;
}
void lcd_w_data(unsigned char dat)
{
unsigned char i,j;
lcd_cs=1;
for(i=0;i<5;i++)
{
lcd_sclk=0;
lcd_sid=1;
lcd_sclk=1;
_nop_();_nop_();
}
for(j=0;j<3;j++)
{
if(j==1)
{
lcd_sclk=0;
lcd_sid=1 ;
lcd_sclk=1;
_nop_();_nop_();
}
else
{
lcd_sclk=0;
lcd_sid=0;
lcd_sclk=1;
_nop_();_nop_();
}
}
trans_bit(dat);
delay_ms(1);
lcd_cs=0;
}
void lcd_display(char *disp,unsigned char ddram ) //Display on
{
int i;
ddram=ddram|0x80;
lcd_w_cmd(ddram);
for(i=0;disp!='\\0';i++)
{
lcd_w_data(disp);
delay_ms(1);
}
}
void lcd_initial()
{
delay_ms(50);
lcd_w_cmd(0x30);//00110000); //30
delay_ms(1);
lcd_w_cmd(0x30);//00110000); //功能设定 //30
delay_ms(1);
lcd_w_cmd(0x0c);//00001110); //Display on //0c
delay_ms(1);
lcd_w_cmd(0x01);//00000001); //清楚显示 //01
delay_ms(20);
lcd_w_cmd(0x06);//00000110); //光标右移 //06
} |
|