|
请教一个12864液晶显示的问题,虚拟仿真没问题,但实际硬件不显示。控制器为ks0108(S6B0108)
[复制链接]
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define Dis_ON 0x3F //开显示
#define Dis_off 0x3E //关显示
#define X_Adr 0xB8 //X初始地址
#define Y_Adr 0x40 //Y初始地址
#define Z_Adr 0xC0 //Z初始地址
#define com 0 //指令
#define data 1 //数据
sbit RS=P1^0;
sbit RW=P1^1;
sbit E=P1^2;
sbit CS1=P1^3;
sbit CS2=P1^4;
sbit RST=P1^6;
sbit B_Flag=P0^7;
sbit RES=P0^4;
sbit INT_0=P3^2;
uchar code hz[6][128]={}
void service_int0()interrupt 0 using 2 //中断服务,功能:暂停
{
uchar flag=0;
while (!flag)
{
break;
}
}
void Delay1(uchar n) //延时
{
uchar i;
for(i=0;i
}
void Delay2(uint n)
{
uint i;
for(i=0;i
Delay1(250);
}
/*读忙标志*/
void Busy()
{
// uchar temp;
do
{
RS=0;_nop_();_nop_();
RW=1;_nop_();_nop_();
E=1;_nop_();_nop_();
E=0;_nop_();_nop_();
}
while(B_Flag);
E=0;_nop_();_nop_();
}
void Wr_LCD(uchar com_data,uchar content) //写指令(com_data=com)或数据(com_data=data)
{
Busy();
RS=com_data;
_nop_();_nop_();
RW=0;_nop_();_nop_();
P0=content;
E=1;_nop_();_nop_();
E=0;_nop_();_nop_();
}
/*
void SET_X_Adr(uchar page) //设置X地址(页地址)
{
page=page&0x07; // 0<=line<=7
page=page|0xb8;
Wr_LCD(com,page);
}
//设置Y地址(列地址)
void SET_Y_Adr(uchar line)
{
line=line&0x3f;
line=line|0x40;
Wr_LCD(com,line);
}
//设置Z地址(起始行)
void SET_Z_Adr(uchar startline)
{
startline=startline&0x3f;
startline=startline|0xc0;
Wr_LCD(com,startline);
}
*/
//初始化
void init()
{
P0=0xff;
P1=0x00;
_nop_();_nop_();
RST=0;
Delay1(50);
RST=1;
CS1=0;_nop_();_nop_();
CS2=0;_nop_();_nop_();
Wr_LCD(com,Dis_off);
Wr_LCD(com,Dis_ON);
}
void Disp_dot(uchar data1,uchar data2) //显示点
{
uchar i,j;
CS1=0;_nop_();_nop_();
CS2=0;_nop_();_nop_();
Wr_LCD(com,Dis_ON);
for(j=0;j<8;j++)
{
Wr_LCD(com,X_Adr+j);
Wr_LCD(com,Z_Adr);
Wr_LCD(com,Y_Adr);
for(i=0;i<32;i++)
{
Wr_LCD(data,data1);
Wr_LCD(data,data2);
}
}
}
void Disp_hz() //自定义汉字
{
uchar i,j;
for(i=1;i<7;i++)
{
CS1=0;_nop_();_nop_();
CS2=0;_nop_();_nop_();
Wr_LCD(com,Dis_ON);
Wr_LCD(com,X_Adr+i);
Wr_LCD(com,Z_Adr);
Wr_LCD(com,Y_Adr);
CS1=1;_nop_();_nop_();
CS2=0;_nop_();_nop_();
for(j=0;j<64;j++)
{
Wr_LCD(data,hz[i-1][j]);
}
CS1=0;_nop_();_nop_();
CS2=1;_nop_();_nop_();
for(j=64;j<128;j++)
{
Wr_LCD(data,hz[i-1][j]);
}
}
}
void main()
{
init();
IP=0x01;
IE=0x81;
while(1)
{
Disp_dot(0xff,0xff);
Delay2(500);
Disp_dot(0xff,0x00);
Delay2(500);
Disp_dot(0x00,0xff);
Delay2(500);
Disp_dot(0xaa,0x55);
Delay2(500);
Disp_dot(0x55,0xaa);
Delay2(500);
Disp_dot(0xaa,0xaa);
Delay2(500);
Disp_dot(0x55,0x55);
Delay2(500);
Disp_dot(0x00,0x00);
Delay2(10);
Disp_hz();
Delay2(500);
}
}
|
|