|
我的12864顯示的問(wèn)題,
程序如下:
#include <reg52.h>
#include"intrins.h"
#define LCD12864DataPort P0
#define uchar unsigned char
#define uint unsigned int
// LCD128*64 I/O
//信號(hào)管腳
sbit rs =P2^0; // //數(shù)據(jù)\//指令//選擇
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; /*設(shè)置初值為0,全部為低,方便后面的判忙*/
rs=0; /*根據(jù)時(shí)序圖拉低,選擇寫指令*/
rw=1; /*根據(jù)時(shí)序圖拉低,選擇寫模式*/
do
{
en=1; /*使能,使液晶輸出信號(hào),檢查是否忙*/
_nop_();_nop_();_nop_();_nop_();/*延時(shí)4US*/
lcd=P0; /*把P0口的狀態(tài)值讀回來(lái)給lcd*/
en=0; /*使能端跳變*/;
}while(lcd&0x80); /*結(jié)果的高位保留,如果高位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進(jìn)行指令操作
rw=0; //RW=0;為往MCU寫入操作
en=0;
_nop_();_nop_();_nop_();_nop_();/*延時(shí)4US*/
en=1;
_nop_();_nop_();_nop_();_nop_();/*延時(shí)4US*/
P0=command;
_nop_();_nop_();_nop_();_nop_();/*延時(shí)4US*/
en=0;
}
void write_data(uchar datas)
{
lcdstate();
rs=1;
rw=0;
en=0;
_nop_();_nop_();_nop_();_nop_();/*延時(shí)4US*/
en=1;
_nop_();_nop_();_nop_();_nop_();/*延時(shí)4US*/
P0=datas;
_nop_();_nop_();_nop_();_nop_();/*延時(shí)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); //設(shè)置顯示開(kāi)
write_command(0xb8); //Y 設(shè)置第0頁(yè);
write_command(0x40); // 設(shè)置第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,這里的第六個(gè)0XFF,在液晶上顯示的是0XEF,第十個(gè)0X1F,顯示的是0X0F,百思不得其解,液晶是KS0108芯片。顯示1,3,5,7,9,B,D,F,都有類似問(wèn)題,求幫助!先謝謝大家了!
|
|