|
我的12864显示的问题,
程序如下:
#include <reg52.h>
#include"intrins.h"
#define LCD12864DataPort P0
#define uchar unsigned char
#define uint unsigned int
// LCD128*64 I/O
//信号管脚
sbit rs =P2^0; // //数据\//指令//选择
sbit rw =P2^1; // //读\写选择
sbit en =P2^2; // 读\写使能
sbit cs1 =P2^4; // 片选1,低有效(前64列)
sbit cs2 =P2^5; // 片选2,低有效(后64列)
void lcdstate()
{
uchar lcd=0x00; /*设置初值为0,全部为低,方便后面的判忙*/
rs=0; /*根据时序图拉低,选择写指令*/
rw=1; /*根据时序图拉低,选择写模式*/
do
{
en=1; /*使能,使液晶输出信号,检查是否忙*/
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
lcd=P0; /*把P0口的状态值读回来给lcd*/
en=0; /*使能端跳变*/;
}while(lcd&0x80); /*结果的高位保留,如果高位DB7为一,则表示忙*/
}
void delay(uchar ms)
{ uchar i;
uchar j;
for(i=0;i<100;i++)
for(j=0;j<ms;j++);
}
void write_command(uchar command)
{
lcdstate();
rs=0; //RS=0;为往MCU进行指令操作
rw=0; //RW=0;为往MCU写入操作
en=0;
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
en=1;
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
P0=command;
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
en=0;
}
void write_data(uchar datas)
{
lcdstate();
rs=1;
rw=0;
en=0;
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
en=1;
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
P0=datas;
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
en=0;
}
void lcdinit()
{
delay(100); //
cs1=1;
cs2=1;
delay(100);
lcdstate(); //
write_command(0x3e); //
write_command(0xb8+0); //
write_command(0xc0+0); //
write_command(0x40+0); //
write_command(0x3f);
}
void clearScreen( )
{ uchar i,j;
lcdstate();
cs1=1;
cs2=1;
write_command(0x3f); //设置显示开
write_command(0xb8); //Y 设置第0页;
write_command(0x40); // 设置第0列
for(i=0;i<8;i++)
{
write_command(0xb8+i);
for(j=0;j<64;j++)
{
//write_command(0x40+j);
write_data(0x00);
}
}
}
uchar code xms[16]= {
0xee,0xef,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,
};
void hz_display16(unsigned char pag, unsigned char col, unsigned char code *hzk)
{
uchar j=0;
uchar i=0;
for(j=0;j<1;j++)
{
write_command(0xb8+pag+j);
write_command(0x40+col);
for(i=0;i<16;i++)
write_data(hzk[16*j+i]);
}
}
void main()
{
lcdinit();
clearScreen( );
cs1=1;
cs2=0;
while(1)
{
delay(2);
// hz_display16(0,0,xms[]);
hz_display16(0,0,xms);
}
}
0xee,0xef,0xee,0xee,0xee,0xff,0xff,0xff,0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,这里的第六个0XFF,在液晶上显示的是0XEF,第十个0X1F,显示的是0X0F,百思不得其解,液晶是KS0108芯片。显示1,3,5,7,9,B,D,F,都有类似问题,求帮助!先谢谢大家了!
|
|