📄 st7565.h
字号:
/*#include "config.h"
#define A0 (1<<28)//p0.28
#define RST (1<<29)//p0.29
#define DAT (1<<25)//p0.25
#define CLK (1<<17)//p1.17
#define St7565_IO0_CON A0|RST|DAT
#define St7565_IO1_CON CLK
void Init_Disp(void);
void ST7565P_Control(uint8 sendbyte);
void ST7565P_data(uint8 sendbyte1);
void ST7565P_clear(void);
void ST_delay(uint32 dly);
uint8 col_add;
uint8 col_counter;
uint32 row_counter;
const uint8 hz[];
const uint8 hz1[];
void Init_Disp(void)
{
IO0SET=RST;
ST_delay(10);
IO0CLR=RST;
ST_delay(10);
IO0SET=RST; // Hardware Reset
ST7565P_Control(0xE2);
ST_delay(10);
ST7565P_Control(0x2F);
ST7565P_Control(0x24);
ST7565P_Control(0xA2);
ST7565P_Control(0x81);
ST7565P_Control(0x70);
ST7565P_Control(0xC0);
ST7565P_Control(0xA0);
ST7565P_Control(0x40);
ST7565P_Control(0xA6);
ST7565P_Control(0xAF);
}
//--------------------------------
void ST7565P_Control(uint8 sendbyte)
{
uint8 i;
IO0CLR=A0;
for(i=0;i<8;i++)
{
IO1CLR=CLK;
if((sendbyte&0x80)!=0)
IO0SET=DAT;
else
IO0CLR=DAT;
IO1SET=CLK;
sendbyte=sendbyte<<1;
}
}
//--------------------------------
void ST7565P_data(uint8 sendbyte1)
{
uint8 i;
IO0SET=A0;
for(i=0;i<8;i++)
{
IO1CLR=CLK;
if((sendbyte1&0x80)!=0)
IO0SET=DAT;
else
IO0CLR=DAT;
IO1SET=CLK;
sendbyte1=sendbyte1<<1;
}
}
//-------------------------------
void ST7565P_hz(uint8 x,uint8 y,uint8 jtsz)
{
uint8 i,a,b,temp1=0,temp2=0,j=0;
if(x==1)
x=0xb6; //哪一行
else if(x==2)
x=0xb3;
a=0x10+(y*24)/16;
b=(y*24)%16;
row_counter=jtsz*75;
temp1=a;
temp2=b;
for(j=0;j<3;j++)
{
for(i=0;i<24;i++)
{
ST7565P_Control(x);
ST7565P_Control(a);
ST7565P_Control(b);
ST7565P_data(hz[row_counter]);
row_counter++;
b++;
if(b>15)
{
b=0;a++;
}
}
row_counter++;
a=temp1;
b=temp2;
x--;
}
}
void ST7565P_sz_xiaoshu(uint8 x,uint8 y,uint8 jtsz)
{
uint8 i,a,b,temp1=0,temp2=0,j=0;
if(x==1)
x=0xb6; //哪一行
else if(x==2)
x=0xb3;
a=0x10+(y*12-4)/16;
b=(y*12-4)%16;
row_counter=jtsz*39;
temp1=a;
temp2=b;
for(j=0;j<3;j++)
{
for(i=0;i<12;i++)
{
ST7565P_Control(x);
ST7565P_Control(a);
ST7565P_Control(b);
ST7565P_data(hz1[row_counter]);
row_counter++;
b++;
if(b>15)
{
b=0;a++;
}
}
row_counter++;
a=temp1;
b=temp2;
x--;
}
}
void ST7565P_sz(uint8 x,uint8 y,uint8 jtsz)
{
uint8 i,a,b,temp1=0,temp2=0,j=0;
if(x==1)
x=0xb6; //哪一行
else if(x==2)
x=0xb3;
a=0x10+(y*12)/16;
b=(y*12)%16;
row_counter=jtsz*39;
temp1=a;
temp2=b;
for(j=0;j<3;j++)
{
for(i=0;i<12;i++)
{
ST7565P_Control(x);
ST7565P_Control(a);
ST7565P_Control(b);
ST7565P_data(hz1[row_counter]);
row_counter++;
b++;
if(b>15)
{
b=0;a++;
}
}
row_counter++;
a=temp1;
b=temp2;
x--;
}
}
//-------------------------------
void ST7565P_clear(void)
{
for(col_counter=0,col_add=0xb0;col_counter<8;col_counter++,col_add++)
{
ST7565P_Control(col_add);
ST7565P_Control(0x10);
ST7565P_Control(0x00);
for(row_counter=0;row_counter<128;row_counter++)
ST7565P_data(0x00);
}
}
//-------------------------------
void ST_delay(uint32 dly)
{
uint32 i;
for(;dly>0;dly--)
for(i=0;i<50000;i++);
}
void display(uint32 koukuan,uint32 shengyu )
{
uint32 temp=0;
uint8 i=0,xiaoshu=0,x=0;
ST7565P_hz(1,0,0);//扣
ST7565P_hz(1,1,1);//款
ST7565P_hz(2,0,2); //显示汉字//第一参数为哪一行共4行1-4 ,第二参数为哪一列共8列0-7,第三参数具体显示什么汉字 用数字0-n,在hz[]对应
ST7565P_hz(2,1,3);
if(koukuan!=0)
{
temp=10000000;
while(!i)
{
i=koukuan/temp;
if(temp!=1)
temp/=10;
}
temp*=10;
if(temp<100000)
i=5;
else
i=4;//作为显示数字的y轴坐标,即从某行的第5列开始显示,前面是汉字
x=i;
while(temp>=1)
{
if(temp==10)//该数字只含有小数部分或整数部分已经显示完毕
{
xiaoshu=1;
if(i==x)//该数字只含有小数部分,要另外显示一个0作为整数部分
{
ST7565P_sz_xiaoshu(1,i++,0);//显示0
}
ST7565P_sz(1,i++,10);//显示小数点
}
if(xiaoshu)
{
ST7565P_sz_xiaoshu(1,i++,koukuan/temp);
}
else
ST7565P_sz(1,i++,koukuan/temp);
koukuan%=temp;
temp/=10;
}
}//end if(koukuan!=0))
else
{
ST7565P_sz(1,5,0);//5
}
xiaoshu=0;
temp=0;
i=0;
if(shengyu!=0)
{
temp=10000000;
while(!i)
{
i=shengyu/temp;
if(temp!=1)
temp/=10;
}
temp*=10;
if(temp<100000)
i=5;
else
i=4;//作为显示数字的y轴坐标,即从某行的第5列开始显示,前面是汉字
x=i;
while(temp>=1)
{
if(temp==10)//该数字只含有小数部分或整数部分已经显示完毕
{
xiaoshu=1;
if(i==x)//该数字只含有小数部分,要另外显示一个0作为整数部分
{
ST7565P_sz_xiaoshu(2,i++,0);//显示0
}
ST7565P_sz(2,i++,10);//显示小数点
}
if(xiaoshu)
{
ST7565P_sz_xiaoshu(2,i++,shengyu/temp);
}
else
ST7565P_sz(2,i++,shengyu/temp);
shengyu%=temp;
temp/=10;
}
}//end if(koukuan!=0))
else
{
ST7565P_sz(2,5,0);//5
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -