📄 ocm4x8c.c
字号:
k=k+2;
}
}
//下半屏
for(i=32;i<64;i++)
{
for(j=0;j<8;j++)
{
Wr_lcd(COMM,0x34); //
Wr_lcd(COMM,0x80+i-32);
Wr_lcd(COMM,0x88+j);
Wr_lcd(COMM,0x30);
Wr_lcd(DATA,img[k]); //D15-D8
Wr_lcd(DATA,img[k+1]); //D7-D0
k=k+2;
}
}
Wr_lcd(COMM,0x36); //送显示图形指令
}
//显示图形:起点(x,y) width X height
void Img_Disp(int x,int y,Uint16 height,Uint16 width,Uchar *img)
{
Uchar i,j,m,n,k;
//if(x<0||x>31||y<0||height%16!=0||width%16!=0)return;
for(i=x;i<Min(x+height,64);i++) //row
{
for(j=y;j<Min(y+width,128);j+=16) //col
{
if (i>=32)
{m = i-32;
n=j/16; //0x80
k=1; }
else
{m=i;
n=j/16;
k=0;}
Wr_lcd(COMM,0x34);//扩展指令
Wr_lcd(COMM,0x80+m);
Wr_lcd(COMM,0x80+0x08*k+n);
Wr_lcd(COMM,0x30);
Wr_lcd(DATA,img[(i-x)*width/8+(j-y)/8]); //image
Wr_lcd(DATA,img[(i-x)*width/8+(j-y)/8+1]);//
}
}
Wr_lcd(COMM,0x36);//显示图形
}
//清除图形:起点(x,y) width X height
void Img_clr(int x,int y,Uint16 height,Uint16 width)
{
Uchar i,j,m,n,k;
//if(x<0||x>31||y<0||height%16!=0||width%16!=0)return;
for(i=x;i<Min(x+height,64);i++) //row
{
for(j=y;j<Min(y+width,128);j+=16) //col
{
if (i>=32)
{m = i-32;
n=j/16; //0x80
k=1; }
else
{m=i;
n=j/16;
k=0;}
Wr_lcd(COMM,0x34);//扩展指令,关闭图形
Wr_lcd(COMM,0x80+m);
Wr_lcd(COMM,0x80+0x08*k+n);//设地址
Wr_lcd(COMM,0x30);//基本指令
Wr_lcd(DATA,0x0);
Wr_lcd(DATA,0x0);
}
}
Wr_lcd(COMM,0x36);//显示图形
}
/*---------------反白显示---------------------------*/
//ocm4x8c 的一三行为反白选择的第一行,二四行为反白选择的第二行
//Function1:
//某一行反白显示 04H~07H
void Con_Disprow(int row)
{
if(row<0||row>4)return;
Wr_lcd(COMM,0x34); //扩展指令 关闭图形
row&=0x03;
Wr_lcd(COMM,0x04+row);//
Wr_lcd(COMM,0x30); //基本指令
}
//当data1=0xFF,data2=0xFF时,在x0,y0处反白显示16x1*y1.
//当data1=0xff,data2=0x00时,在x0,y0处前半反白显示8x1*y1.
//当data1=0x00,data2=0xff时,在x0,y0处后半反白显示8x1*y1.
void con_disp(Uchar data1,Uchar data2,int x0,int y0,int x1,int y1)
{
Uchar i,j;
for(j=0;j<y1;j++)
{
for(i=0;i<x1;i++)
{
Wr_lcd(COMM,0x34);
Wr_lcd(COMM,y0+j);
Wr_lcd(COMM,x0+i);
Wr_lcd(COMM,0x30);
Wr_lcd(DATA,data1);
Wr_lcd(DATA,data2);
}
}
Wr_lcd (COMM,0x36); // 绘图显示
}
//某一区域反白显示
void Con_disparea(int x, int y, int height,int width)
{
Uchar i,j,m,n,k,data1,data2;
if(y<0||y>15||x<0||x>31||0!=(height%16)||0!=(width%16)) return;
for(i=x;i<Max(x+height,64);i++)
{
for(j=y;j<Max(y+width,128);j+=16)
{
if (i>=32)
{m=i-32;
n=j/16;
k=1;}
else{m=i;
n= j/16;
k=0;}
Wr_lcd(COMM,0x34);//扩展指令,关闭图形
Wr_lcd(COMM,0x80+m);
Wr_lcd(COMM,0x80+0x08*k+n);//设地址
Wr_lcd(COMM,0x30);//基本指令
data1= Read_lcd();
data2= Read_lcd();
Wr_lcd(DATA,data1^0xFF); //
Wr_lcd(DATA,data2^0xFF);
}
}
Wr_lcd(COMM,0x36);//显示图形
}
/*--------------显示点阵----------------*/
// data1=0x00,data2=0x00-----clear screen
void lat_disp(Uchar data1,Uchar data2)
{
Uchar i,j;
//上半屏
for(i=0;i<32;i++)
{
for(j=0;j<8;j++)
{
Wr_lcd(COMM,0x34); //扩充指令 绘图显示
Wr_lcd(COMM,0x80+i); //设定绘图地址80H~FFH
Wr_lcd(COMM,0x80+j);//
Wr_lcd(COMM,0x30); //变更指令集
Wr_lcd(DATA,data1);
Wr_lcd(DATA,data1);
}
}
//下半屏
for(i=32;i<64;i++)
{
for(j=0;j<8;j++)
{
Wr_lcd(COMM,0x34); //
Wr_lcd(COMM,0x80+i-32);
Wr_lcd(COMM,0x88+j);
Wr_lcd(COMM,0x30);
Wr_lcd(DATA,data2); //D15-D8
Wr_lcd(DATA,data2); //D7-D0
}
}
Wr_lcd(COMM,0x36); //送显示图形指令
}
/*-------------------光标显示---------------------------*/
//当data1=0xff,data2=0x00时,在x,y处显示前半光标.
//当data1=0x00,data2=0xff时,在x,y处显示后半光标.
//当data1=0x00,data2=0x00时,在x,y处不显示光标.
//y0=0x8f or y0=0x9f.
void cur_disp(Uchar data1,Uchar data2,Uchar x,Uchar y)
{
Wr_lcd (COMM,0x34);
Wr_lcd (COMM,y);
Wr_lcd (COMM,x);
Wr_lcd (COMM,0x30);
Wr_lcd (DATA,data1);
Wr_lcd (DATA,data2);
Wr_lcd (COMM,0x36);
}
//光标回到原点---地址归位
void origin_cur(void)
{
Wr_lcd (COMM,0x30);
Wr_lcd (COMM,0x02);
Wr_lcd (COMM,0x06);
}
//、显示状态 开/关(08H/0CH/ODH/0EH/0FH)
void OnOff_cur(Uchar cur_con,Uchar cur_on)
{ Uchar data;
if((cur_con==0)&&(cur_on==0))data=0x0C; //
if((cur_con==1)&&(cur_on==0))data=0x0D; //
if((cur_con==0)&&(cur_on==1))data=0x0E; // show&¬-con
if((cur_con==1)&&(cur_on==1))data=0x0F; //con&&show
Wr_lcd(COMM,data);
}
void Move_cur(int dir) //dir=1/0
{ Uchar data;
if(dir==1)data=0x14;
if(dir==0)data=0x10;
Wr_lcd(COMM,data);
}
//write command or data
void Wr_lcd(Uchar data_comm,Uchar data)
{ Uchar m;
Chk_Busy();
RS=data_comm;
delay(1500);
RW=0;
delay(1500);
GpioMuxRegs.GPBDIR.all=0x00;
m=GpioDataRegs.GPBDAT.all;
m&=0xFF00;
data&=0x00FF;
GpioMuxRegs.GPBDIR.all=0xFFFF;
GpioDataRegs.GPBDAT.all=m|data;
delay(1500);
EN=1 ;
delay(1500);
EN=0 ;
}
//---------------------------------------
Uchar Read_lcd(void)
{
Uchar data;
Chk_Busy();
RS=1;
delay(1500);
RW=1;
delay(1500);
data=GpioDataRegs.GPBDAT.all;
return data;
}
/*清DDRAM--清屏子程序*/
void Clr_ram(void)
{
Wr_lcd(COMM,0x30);
Wr_lcd(COMM,0x01);
delay(1500);
}
void Chk_Busy(void)
{
RS=0; //
delay(1500);
RW=1; //Read
delay(1500);
EN=1;
if(BF==1){}
EN=0;
}
//延时,取大取小子程序
void delay (int delay) //delay time
{
while(delay--);
}
//延时秒程序
void delay_s(int ss)
{ int i;
while(ss--)
{i=40;
do
{delay(30000);}
while(i--);
}
}
int Max(int x,int y)
{
int max;
if(x>=y)max=x;
else max=y;
return max;
}
int Min(int x,int y)
{
int min;
if(x<=y)min=x;
else min=y;
return min;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -