📄 ym-qd12864.c
字号:
void GXM12864_KS0108_delay(uint xms)
{
uint i,j,m;
for(i=0;i<xms;i++)
{
for(j=0;j<280;j++)
{
for(m=0;m<125;m++)
{
nop();
nop();
nop();
nop();
}
}
}
}
void delay(uint xms)
{
uint i,j;
for(i=0;i<xms;i++)
{
for(j=0;j<125;j++)
{
nop();
nop();
nop();
nop();
}
}
}
/****DM12864写命令函数*****/
void GXM12864_KS0108_write_command(uchar command)
{
uchar data busy_bit1=0;
GXM12864_KS0108_ID=0 ;
GXM12864_KS0108_RW=1;
busyflag:
P1=0x0ff;
GXM12864_KS0108_E=1;
nop();
busy_bit1=P1;
busy_bit1=busy_bit1>>0x07;
GXM12864_KS0108_E=0;
if(busy_bit1==0X01)
{
goto busyflag;
}
GXM12864_KS0108_RW=0;
P1=command;
GXM12864_KS0108_E=1;
nop();
GXM12864_KS0108_E=0;
}
/******DM12864写数据函数*******/
void GXM12864_KS0108_write_data(uchar data_buffer)
{
uchar data busy_bit2;
GXM12864_KS0108_ID=0 ;
GXM12864_KS0108_RW=1;
busyflag0:
P1=0x0ff;
GXM12864_KS0108_E=1;
nop();
busy_bit2=P1;
GXM12864_KS0108_E=0;
busy_bit2=busy_bit2>>0x07;
if(busy_bit2==0x01)
{
goto busyflag0;
}
GXM12864_KS0108_RW=0;
GXM12864_KS0108_ID=1;
P1=data_buffer;
GXM12864_KS0108_E=1;
nop();
GXM12864_KS0108_E=0;
}
//**********DM12864清屏函数**********//
void GXM12864_KS0108_disp_clrscreen()
{
uchar data i,j,page_address;
for(j=0;j<8;j++)
{
page_address=0x00;
page_address=j;
page_address=page_address|0x0b8;
GXM12864_KS0108_CSA=1;
GXM12864_KS0108_CSB=0;
GXM12864_KS0108_write_command(page_address); // left screen write
GXM12864_KS0108_CSA=0;
GXM12864_KS0108_CSB=1;
GXM12864_KS0108_write_command(page_address); // middle screen write
for (i=0;i<32;i++)
{
GXM12864_KS0108_CSA=1;
GXM12864_KS0108_CSB=0;
GXM12864_KS0108_write_data(0x0);
GXM12864_KS0108_CSA=0;
GXM12864_KS0108_CSB=1;
GXM12864_KS0108_write_data(0x0);
GXM12864_KS0108_CSA=1;
GXM12864_KS0108_CSB=0;
GXM12864_KS0108_write_data(0x0);
GXM12864_KS0108_CSA=0;
GXM12864_KS0108_CSB=1;
GXM12864_KS0108_write_data(0x0);
}
}
}
/*******DM12864初始化函数*******/
void GXM12864_KS0108_int(void)
{
GXM12864_KS0108_CSA=0;
GXM12864_KS0108_CSB=0;
P3=0X0C;
GXM12864_KS0108_CSA=1;
GXM12864_KS0108_CSB=0;
GXM12864_KS0108_write_command(0X00); // left screen write
GXM12864_KS0108_CSA=0;
GXM12864_KS0108_CSB=1;
GXM12864_KS0108_write_command(0X00); // right screen write
GXM12864_KS0108_CSA=1;
GXM12864_KS0108_CSB=0;
GXM12864_KS0108_write_command(0x3f); // middle screen write
GXM12864_KS0108_CSA=0;
GXM12864_KS0108_CSB=1;
GXM12864_KS0108_write_command(0X3f); // right screen write
GXM12864_KS0108_CSA=1;
GXM12864_KS0108_CSB=0;
GXM12864_KS0108_write_command(0Xc0); // middle screen write
GXM12864_KS0108_CSA=0;
GXM12864_KS0108_CSB=1;
GXM12864_KS0108_write_command(0Xc0); // right screen write
GXM12864_KS0108_CSA=1;
GXM12864_KS0108_CSB=0;
GXM12864_KS0108_write_command(0X0b8); // middle screen write
GXM12864_KS0108_CSA=0;
GXM12864_KS0108_CSB=1;
GXM12864_KS0108_write_command(0X0b8); // right screen write
GXM12864_KS0108_CSA=1;
GXM12864_KS0108_CSB=0;
GXM12864_KS0108_write_command(0X40); // middle screen write
GXM12864_KS0108_CSA=0;
GXM12864_KS0108_CSB=1;
GXM12864_KS0108_write_command(0X40); // right screen write
}
/**显示函数,select的范围为0或者1,即0选择左半屏,1选择右半屏**/
/******页面地址pag的范围为0到7,列地址col的范围为0到63********/
void GXM12864_test(bit select,uchar pag,uchar col,uchar src)
{
uchar data page_address=0;
uchar data col_address=0;
page_address =pag;
col_address =col;
page_address=page_address|0x0b8;
GXM12864_KS0108_CSA=~select; //选择左半屏显示
GXM12864_KS0108_CSB=select;
GXM12864_KS0108_write_command(page_address); // 左屏幕行(页面地址)
col_address = col_address|0x040;
GXM12864_KS0108_CSA=~select;
GXM12864_KS0108_CSB=select;
GXM12864_KS0108_write_command(col_address); // 整个屏幕列地址
GXM12864_KS0108_CSA=~select;
GXM12864_KS0108_CSB=select;
GXM12864_KS0108_write_data(src);
}
/****显示半个字函数。行row的范围为0到3,列col的范围为0到3******/
void GXM12864_left_up(bit select,uchar row,uchar col,uchar *pHZSrc)
{
uchar data page0 = 2*row; // 奇数行
uchar data hz_start =16*col; //列数
uchar data i;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page0,i,*pHZSrc);
pHZSrc += 2;
}
}
/****显示半个字函数*******/
void GXM12864_left_down(bit select,uchar row,uchar col,uchar *pHZSrc)
{
uchar data page1 = 2*row+1; // ou
uchar data hz_start =16*col; //lie
uchar data i;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page1,i,*pHZSrc);
pHZSrc += 2;
}
}
/******显示一个字函数*********/
/****select选择左右半屏,0选择左半屏,1选择右半屏*****/
/******显示行row范围为0到3,列col范围为0到3****/
void GXM12864_display_one(bit select,uchar row,uchar col,uchar *pHZSrc)
{
GXM12864_left_up(select,row,col,pHZSrc);
GXM12864_left_down(select,row,col,&pHZSrc[1]);
}
/****整行显示函数——page0_pp为要显示的行,数值为0到3******/
void GXM12864_display_one_row(uchar page0_pp,uchar *pHZSrc)
{
uchar data page0;// = 2*row; // 奇数行
uchar data hz_start=0;// =16*col; //列数
uchar data i;
bit select=0;
page0=page0_pp;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=0;
page0++;
pHZSrc=pHZSrc-31;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=16;
page0=page0_pp;
pHZSrc=pHZSrc-1;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=16;
page0++;
pHZSrc=pHZSrc-31;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=32;
page0=page0_pp;
pHZSrc=pHZSrc-1;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=32;
page0++;
pHZSrc=pHZSrc-31;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=48;
page0=page0_pp;
pHZSrc=pHZSrc-1;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=48;
page0++;
pHZSrc=pHZSrc-31;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(select,page0,i,*pHZSrc);//第一行左半屏显示
pHZSrc += 2;
}
hz_start=0;
page0=page0_pp;
pHZSrc=pHZSrc-1;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(~select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=0;
page0++;
pHZSrc=pHZSrc-31;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(~select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=16;
page0=page0_pp;
pHZSrc=pHZSrc-1;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(~select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=16;
page0++;
pHZSrc=pHZSrc-31;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(~select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=32;
page0=page0_pp;
pHZSrc=pHZSrc-1;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(~select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=32;
page0++;
pHZSrc=pHZSrc-31;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(~select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=48;
page0=page0_pp;
pHZSrc=pHZSrc-1;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(~select,page0,i,*pHZSrc);
pHZSrc += 2;
}
hz_start=48;
page0++;
pHZSrc=pHZSrc-31;
for(i = hz_start;i<(hz_start+16);i++)
{
delay(1);
GXM12864_test(~select,page0,i,*pHZSrc);
pHZSrc += 2;
}
}
/******整个屏幕显示函数********/
void GXM12864_display_hole_row(uchar *pHZSrc)
{
bit select_pp=0;
uchar page0_pp=0;
uchar hz_start_pp=0;
GXM12864_display_one_row(page0_pp, pHZSrc);
GXM12864_KS0108_delay(1);
page0_pp=2;
pHZSrc=pHZSrc+256;
GXM12864_display_one_row( page0_pp, pHZSrc);
GXM12864_KS0108_delay(1);
page0_pp=4;
pHZSrc=pHZSrc+256;
GXM12864_display_one_row( page0_pp, pHZSrc);
GXM12864_KS0108_delay(1);
page0_pp=6;
pHZSrc=pHZSrc+256;
GXM12864_display_one_row( page0_pp, pHZSrc);
GXM12864_KS0108_delay(1);
}
//&&&&&&&&&&&&&&&&&main主函数&&&&&&&&&&&&&&&&//
main()
{
GXM12864_KS0108_int();
GXM12864_KS0108_disp_clrscreen();
delay(1);
while(1)
{
GXM12864_KS0108_disp_clrscreen();
GXM12864_display_one_row(0,hzdot1);
GXM12864_KS0108_delay(1);
GXM12864_display_one_row(2,hzdot2);
GXM12864_KS0108_delay(1);
GXM12864_display_one_row(4,hzdot3);
GXM12864_KS0108_delay(1);
GXM12864_display_one_row(6,hzdot4);
GXM12864_KS0108_delay(20);
GXM12864_KS0108_disp_clrscreen();
GXM12864_display_hole_row(hzdotzz);
GXM12864_KS0108_delay(20);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -