📄 k0108lcd_qd.txt
字号:
Set_EN_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
busy=lcd_DATA_IN;
Set_EN_L;
busy=0x90&busy;
}while(!(busy==0x00));
}
/****************************************************************************
* 名称:write_command()
* 功能:写指令
* 入口参数:指令,KS0108共有7条指令
* 出口参数:无
* 说明:
****************************************************************************/
void Write_command(unsigned char command)
{ If_Busy();
lcd_DATA_DDR=0XFF;
lcd_DATA_OUT=command;
Set_RS_L;
Set_RW_L;
Set_EN_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Set_EN_L;
}
/****************************************************************************
* 名称:write_data()
* 功能:写数据
* 入口参数:显示数据
* 出口参数:无
* 说明:
****************************************************************************/
void Write_data(unsigned char data)
{ If_Busy();
lcd_DATA_DDR=0XFF;
lcd_DATA_OUT=data;
Set_RW_L;
Set_RS_H;
Set_EN_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Set_EN_L;
}
/****************************************************************************
* 名称:Lcd_sele()
* 功能:左右屏选择
* 入口参数:显示数据
* 出口参数:无
* 说明:CS1=H,CS2=L,选中左屏;CS1=L,CS2=H,选中右屏
****************************************************************************/
void Lcd_sele(unsigned char lr)
{
if(lr)
{
Set_CS1_L;
Set_CS2_H;
}
else
{
Set_CS1_H;
Set_CS2_L;
}
}
/****************************************************************************
* 名称:Set_Xpage()
* 功能:设置页地址
* 入口参数:左屏/右屏,页地址
* 出口参数:无
* 说明:Left为左屏,Right为右屏,X范围为0~7
****************************************************************************/
void Set_Xpage(unsigned char lr,unsigned char x)
{
Lcd_sele(lr);
Write_command(0xb8+x);
}
/****************************************************************************
* 名称:Set_Ypage()
* 功能:设置列地址
* 入口参数:左屏/右屏,列地址
* 出口参数:无
* 说明:Left为左屏,Right为右屏,Y范围为0~63
****************************************************************************/
void Set_Ypage(unsigned char lr,unsigned char y)
{
Lcd_sele(lr);
Write_command(0x40+y);
}
/****************************************************************************
* 名称:Set_StartLine()
* 功能:设置起始行
* 入口参数:左屏/右屏,行地址
* 出口参数:无
* 说明:Left为左屏,Right为右屏,Y范围为0~63
****************************************************************************/
void Set_startLine(unsigned char lr,unsigned char i)
{
Lcd_sele(lr);
Write_command(0xc0+i);
}
/****************************************************************************
* 名称:Lcd_clear()
* 功能:清屏
* 入口参数:无
* 出口参数:无
* 说明:
****************************************************************************/
void Lcd_clear(void)
{
unsigned char i,j;
for(j=0;j<8;j++)
{
Set_Xpage(Left,j);
for (i=0;i<64;i++)
{
Set_CS1_H;
Set_CS2_L;
Write_data(0x00);
}
Set_Xpage(Right,j);
for (i=0;i<64;i++)
{
Set_CS1_L;
Set_CS2_H;
Write_data(0x00);
}
}
}
/****************************************************************************
* 名称:Dot()
* 功能:描点函数
* 入口参数:纵坐标x,横坐标y
* 出口参数:无
* 说明:X范围为0~63,Y范围为0~127
****************************************************************************/
void Dot(unsigned char x,unsigned char y)
{
unsigned char page_x,page_y,bit,value;
page_x=x/8;
bit=x%8;
value|=(0x01<<bit);
if(y>63)
{
page_y=y-64;
Set_Xpage(Right,page_x);
Set_Ypage(Right,page_y);
Write_data(value);
}
else
{
page_y=y;
Set_Xpage(Left,page_x);
Set_Ypage(Left,page_y);
Write_data(value);
}
}
/****************************************************************************
* 名称:print_char()
* 功能:显示一个字符,point需指向欲显示数组
* 入口参数:字符宽度width
* 出口参数:无
* 说明:可以自动切换左右屏,取模模式为列行式
****************************************************************************/
void print_char(unsigned char width)
{
unsigned char i,j;
j=line;
if(line<64)
{
Set_Xpage(Left,page);
Set_Ypage(Left,line);
for(i=0;i<width;i++)
{
Write_data(pgm_read_byte(point++));
j++;
if(j==64)
{
Set_Xpage(Right,page);
Set_Ypage(Right,0);
j=0;
}
}
j=line;
Set_Xpage(Left,page+1);
Set_Ypage(Left,line);
for(i=0;i<width;i++)
{
Write_data(pgm_read_byte(point++));
j++;
if(j==64)
{
Set_Xpage(Right,page+1);
Set_Ypage(Right,0);
j=0;
}
}
}
else
{
Set_Xpage(Right,page);
Set_Ypage(Right,line-64);
for(i=0;i<width;i++)
Write_data(pgm_read_byte(point++));
Set_Xpage(Right,page+1);
Set_Ypage(Right,line-64);
for(i=0;i<width;i++)
Write_data(pgm_read_byte(point++));
}
}
/****************************************************************************
* 名称:print_english()
* 功能:显示英文字符串
* 入口参数:坐标x,y,欲显示字符s[]
* 出口参数:无
* 说明:可以自动换行,x取值范围0~7,y取值范围0~127
****************************************************************************/
void print_english(unsigned char x,unsigned char y,const prog_uchar s[])
{
unsigned i=0;
page=x;
line=y;
while(s[i])
{
if(line>120)
{
page=page+2;
line=0;
}
point=ASCII+16*(s[i++]-0x20);
print_char(8);
line=line+8;
}
}
/****************************************************************************
* 名称:print_chinese()
* 功能:显示中文字符串
* 入口参数:坐标x,y,文字数N,欲显示字符addr[]
* 出口参数:无
* 说明:可以自动换行,x取值范围0~7,y取值范围0~127
****************************************************************************/
void print_chinese(unsigned char x,unsigned char y,unsigned char N,const prog_uchar *addr)
{
unsigned i=0;
page=x;
line=y;
point=addr;
while(N--)
{
if(line>128-cn_width)
{
page=page+2;
line=0;
}
print_char(cn_width);
line=line+cn_width;
}
}
/****************************************************************************
* 名称:Display_Pic()
* 功能:显示图片
* 入口参数:纵坐标x,横坐标y,图片高度h,图片宽度w,图片地址*p
* 出口参数:无
* 说明:X范围为0~7,Y范围为0~127,图片尺寸大小不超过128*64
****************************************************************************/
void display_bmp(unsigned char x,unsigned char y,unsigned char h,unsigned char w,unsigned char *p)
{
unsigned i,j;
for(i=x;i<x+h;i++)
{
for(j=y;j<y+w;j++)
{
if(j>63)
{
Set_Xpage(Right,i);
Set_Ypage(Right,j-64);
}
else
{
Set_Xpage(Left,i);
Set_Ypage(Left,j);
}
Write_data(pgm_read_byte(p++));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -