📄 lcddrv.c
字号:
//
/*************************************************************************************/
void init_oled(void)
{
WriteCommand(0xAE); //Display off
WriteCommand(0xAD); //Internal DC-DC off
WriteCommand(0x8A); // Second byte
WriteCommand(0xA8); //MUX Ratio
WriteCommand(0x3F); //64 duty
WriteCommand(0xD3); //Display offset
WriteCommand(0x00); //Second byte
WriteCommand(0x40); //Start line
WriteCommand(0xA0); //Segment remap //a0
WriteCommand(0xC8); //COM remap
WriteCommand(0xA6); //Set normal/inverse display (0xA6:Normal display)
WriteCommand(0xA4); //Set entire display on/off (0xA4:Normal display)
WriteCommand(0x81); //Contrast setting
WriteCommand(0x5C); //Second byte
WriteCommand(0xD5); //Frame rate
WriteCommand(0x60); // 85 Hz
WriteCommand(0xD8); //Mode setting
WriteCommand(0x00); //Mono mode
WriteCommand(0xD9); //Set Pre-charge period
WriteCommand(0x84); // Second byte
WriteCommand(0xAF); //Display on
}
/************************************************************************************/
//
/************************************************************************************/
void set_position(uint8 page1,uint8 p1,uint8 col1)
{
uint8 temp_col;
uint8 temp_col2;
temp_col=col1>>4;
temp_col2=col1&0x0f;
WriteCommand(0xb0+page1+p1);
WriteCommand(0x02+temp_col2);
WriteCommand(0x10+temp_col);
}
/***********************************************************************************/
//
/***********************************************************************************/
void display_prog(uint8 line,uint8 column,uint8 nn) //显示程序
{
unsigned char m,col,p,q,r;
unsigned char k=0 ;
page=line; //字符启示页 0--8
if (nn==1)
{
q=48; //字符的总字节数 12*8 字符--16字节
r=16; // 16*16汉字--32字节
// 24*16数字--48字节
}
else if (nn==2)
{
q=32;
r=16; //r字符的宽度
}
else if (nn==3)
{
q=16;
r=8;
}
else
{
q=12;
r=8;
};
column=column*8; //列的宽度和字符的宽度
col=column;
for (m=0; m<q; m++) //
{
p=m/r; //换行
switch (p)
{
case 0:
if (k==0){
set_position(page,p,col);
k=1;
break;
}
else
break;
case 1:
if (k==1){
set_position(page,p,col);
k=2;
break;
}
else
break;
case 2:
if (k==2){
set_position(page,p,col);
k=3;
break;
}
else
break;
case 3:
if (k==3){
set_position(page,p,col);
k=4;
break;
}
else
break;
case 4:
if (k==4){
set_position(page,p,col);
k=5;
break;
}
else
break;
case 5:
if (k==5){
set_position(page,p,col);
k=6;
break;
}
else
break;
}
if (nn==1)
dat=NUM_48[jj].Msk[m] ; //(1-64 行)取数据 jiu1
else if(nn==2)
dat=GB_16[jj].Msk[m] ;
else if(nn==3)
dat=CHAR_12[jj].Msk[m];
else
dat=0;
if (w_or_b==BLACK)
dat=~dat;
WriteData(dat);
}
}
/*********************************************************************************/
//
/*********************************************************************************/
void dprintf_CHAR12 (uint8 line,uint8 column,char str[20])
{
uint8 i=0;
uint8 c1;
unsigned char ulen;
ulen = (unsigned char)sprintf(dispbuff,"%s",str);
while(i<ulen)
{
c1 = dispbuff[i];
for(jj=0;jj<sizeof(CHAR_12)/sizeof(CHAR_12[0]);jj++)//寻找字库
{
if(c1 == CHAR_12[jj].Index[0])
break;
}
display_prog(line,column,3);
column++;
i++;
}
}
/********************************************************************************/
// 显示汉字程序
/********************************************************************************/
void dprintf_WORD16 (uint8 line,uint8 column,char str[20])
{
uint8 i=0;
uint8 c1;
uint8 c2;
uint8 ulen;
ulen = (unsigned char)sprintf(dispbuff,"%s",str);
while(i<ulen)
{
c1 = dispbuff[i];
c2 = dispbuff[i+1];
for(jj=0;jj<sizeof(GB_16)/sizeof(GB_16[0]);jj++)//寻找字库
{
if(c1 == GB_16[jj].Index[0] && c2 == GB_16[jj].Index[1])
break;
}
display_prog(line,column,2);
column++;
column++;
i++;
i++;
}
}
/**********************************************************************************/
//
/**********************************************************************************/
void dprintf_NUM48(uint8 line,uint8 column,char str[20])
{
uint8 i=0;
uint8 c1;
uint8 ulen;
ulen = (unsigned char)sprintf(dispbuff,"%s",str);
while(i<ulen)
{
c1 = dispbuff[i];
for(jj=0;jj<sizeof(NUM_48)/sizeof(NUM_48[0]);jj++)//寻找字库
{
if(c1 == NUM_48[jj].Index[0])
break;
}
display_prog(line,column,1);
column++;
column++;
i++;
}
}
/***********************************************************************************/
// 显示浮点
/***********************************************************************************/
void disp_float(uint8 row,uint8 col,float x)
{
unsigned char temp;
//sprintf(dispbuff,"%-4.1f",x); //左对齐
temp=(unsigned char)sprintf(dispbuff,"%4.1f",x); //左对齐
dprintf_CHAR12(row,col,dispbuff);
}
/***********************************************************************************/
// 显示整数
/***********************************************************************************/
void disp_int(unsigned char row,unsigned char col,unsigned char x)
{
unsigned char len;
len=(unsigned char)sprintf(dispbuff,"%d",x);
dprintf_CHAR12(row,col,dispbuff);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -