📄 lcd.c
字号:
#include "LCD.h"
/*------------------延时子程序-----------------------------*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
RS=0;
RW=0;
Lcd_Bus=cmdcode;
delay(0);
Enable=1;//下降沿写数据,高电平读数据
delay(0);
Enable=0;
}
/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
RS=1;
RW=0;
Lcd_Bus=Dispdata;
delay(0);
Enable=1;
delay(0);
Enable=0;
}
/*-------------------读LCD数据----------------------------*/
/*unsigned char read_data( void )
{
unsigned char tmpin;
Di=1;
RW=1;
delay(0);
Enable=1;
delay(0);
Enable=0;
tmpin=Lcd_Bus;
return tmpin;
}
*/
/*------------------显示边框-------------------------------*/
void frame()
{
unsigned char i;
Lcs=1;
Rcs=1;
write_com(Page_Add+0);
write_com(Col_Add+0);
for(i=0;i<64;i++)
{
write_data(0x01);
}
write_com(Page_Add+7);
write_com(Col_Add+0);
for(i=0;i<64;i++)
{
write_data(0x80);
}
for(i=0;i<8;i++)
{
Lcs=0;
Rcs=1;
write_com(Page_Add+i);
write_com(Col_Add+63);
write_data(0xff);
Lcs=1;
Rcs=0;
write_com(Page_Add+i);
write_com(Col_Add+0);
write_data(0xff);
}
}
/*-----------------设定起始地址---------------*/
/*void setxy(unsigned char x,y)
{
write_com(Page_Add+x);
write_com(Col_Add+y);
}
*/
/*------------------清除内存---------------*/
void lcd_clr(void)
{
unsigned char j,k;
Lcs=1;
Rcs=1;
write_com(Page_Add+0);
write_com(Col_Add+0);
for(k=0;k<8;k++)
{
write_com(Page_Add+k);
for(j=0;j<64;j++)
{
write_data(0x00);
}
}
}
/*--------------------------清除指定内存段--------------------------*/
void lcd_clr_zd(unsigned char start_page,unsigned char start_col,unsigned int count)
{
unsigned int i;
if(start_col<64)
{
Lcs=1;
Rcs=0;
write_com(Page_Add+start_page);
write_com(Col_Add+start_col);
for(i=0;i<count;i++)
{
write_data(0x00);
}
}
else
{
Lcs=0;
Rcs=1;
write_com(Page_Add+start_page);
write_com(Col_Add+start_col-64);
for(i=0;i<count;i++)
{
write_data(0x00);
}
}
}
/*------------------显示12864图片---------------------------*/
void Disp_Img(unsigned char code *img)
{
unsigned char j,k;
for(k=0;k<8;k++)
{
Lcs=1;
Rcs=0;
delay(1);
write_com(Page_Add+k);
write_com(Col_Add+0);
for(j=0;j<64;j++)
{
write_data(img[k*128+j]);
}
Lcs=0;
Rcs=1;
delay(1);
write_com(Page_Add+k);
write_com(Col_Add+0);
for(j=64;j<128;j++)
{
write_data(img[k*128+j]);
}
}
}
/***************显示任意大小,位置图片*********************/
void disp_image(unsigned char x,unsigned y,unsigned char w,unsigned char h,unsigned char code *img)
{
unsigned char j,k;
if(x<64)
{
for(k=0;k<h/8;k++)
{
delay(1);
Lcs=1;
Rcs=0;
write_com(Page_Add+y+k);//图片高度必须为8的倍数,起始页地址(y)。。。
write_com(Col_Add+x);
for(j=0;j<w;j++)
{
if((j+x)<64) write_data(img[w*k+j]);
else
{
Lcs=0; Rcs=1;
write_com(Page_Add+y+k);//图片高度必须为8的倍数,起始页地址(y)。。。
write_com(Col_Add+(x+j-64));
write_data(img[w*k+j]);
}
}
}
}
else
{
for(k=0;k<h/8;k++)
{
Lcs=0;
Rcs=1;
delay(1);
write_com(Page_Add+y+k);
write_com(Col_Add+x-64);
for(j=0;j<w;j++)
{
write_data(img[w*k+j]);
}
}
}
}
/*------------------显示横(坐标x)------------------------*/
void Disp_H_Line(unsigned char page)
{
unsigned char j;
Lcs=1;
Rcs=0;
write_com(Disp_On); //开显示
write_com(Page_Add+page); //页地址
write_com(Col_Add+0);
for(j=0;j<64;j++)
{
if((j+1)%5==0)
{
if((j+1)%10==0) write_data(0x07);
else write_data(0x3f);
}
else write_data(0x01);
}
Lcs=0;
Rcs=1;
write_com(Disp_On); //开显示
write_com(Page_Add+page); //页地址
write_com(Col_Add+0);
for(j=0;j<64;j++)
{
if((j)%5==0)
{
if((j)%10==0) write_data(0x3f);
else write_data(0x07);
}
else write_data(0x01);
}
}
/*------------------显示列(坐标y)--------------------------*/
void Disp_L_Line( unsigned char col )
{
unsigned char j;
if(col<64)
{
Lcs=1;
Rcs=0;
write_com(Disp_On); //开显示
// write_com(Page_Add+0); //页地址
// write_com(Start_Line+0); //lie--
for(j=0;j<8;j++)
{
write_com(Page_Add+j);
write_com(Col_Add+col);
write_data(0xff);
}
}
else
{
Lcs=0;
Rcs=1;
write_com(Disp_On); //开显示
write_com(Page_Add); //页地址
write_com(Start_Line); //lie--
for(j=0;j<8;j++)
{
write_com(Page_Add+j);
write_com(Col_Add+col+64);
}
}
}
/*---------------------指定位置显示汉字16*16-----------------------*/
void hz_disp1616(unsigned char pag,unsigned char col, unsigned char code *hzk,bit lcd_cs,bit zc_fx)
{
unsigned char j=0,i=0;
if(!lcd_cs)
{
Lcs=1;
Rcs=0;
}
else
{
Lcs=0;
Rcs=1;
}
if(zc_fx==0)
{
for(j=0;j<2;j++)
{
write_com(Page_Add+pag+j);
write_com(Col_Add+col);
for(i=0;i<16;i++)
{
write_data(hzk[16*j+i]);
}
}
}
else
{
for(j=0;j<2;j++)
{
write_com(Page_Add+pag+j);
write_com(Col_Add+col);
for(i=0;i<16;i++)
{
write_data(~hzk[16*j+i]);
}
}
}
}
/*-------------------------指定位置显示字符--------------------------*/
void zf_disp168(unsigned char pag,unsigned char col, unsigned char code *hzk,bit lcd_cs,bit zc_fx)
{
unsigned char i,j;
if(!lcd_cs)
{
Lcs=1;
Rcs=0;
}
else
{
Lcs=0;
Rcs=1;
}
if(zc_fx==0)
{
for(j=0;j<2;j++)
{
write_com(Page_Add+pag+j);
write_com(Col_Add+col);
for(i=0;i<8;i++)
{
write_data(hzk[8*j+i]);
}
}
}
else
{
for(j=0;j<2;j++)
{
write_com(Page_Add+pag+j);
write_com(Col_Add+col);
for(i=0;i<8;i++)
{
write_data(~hzk[8*j+i]);
}
}
}
}
void zf_disp88(unsigned char pag,unsigned char col, unsigned char code *hzk,bit lcd_cs,bit zc_fx)
{
unsigned char i;
if(!lcd_cs)
{
Lcs=1;
Rcs=0;
}
else
{
Lcs=0;
Rcs=1;
}
if(zc_fx==0)
{
write_com(Page_Add+pag);
write_com(Col_Add+col);
for(i=0;i<8;i++)
{
write_data(hzk[i]);
}
}
else
{
write_com(Page_Add+pag);
write_com(Col_Add+col);
for(i=0;i<8;i++)
{
write_data(~hzk[i]);
}
}
}
/*------------------初始化LCD屏--------------------------*/
void init_lcd( void )
{
Lcd_Rst=0; //复位LCD
delay(100);
Lcd_Rst=1;
delay(100);
Lcs=1;
Rcs=1;
delay(100);
write_com(Disp_Off);
write_com(Page_Add+0);
write_com(Start_Line+0);
write_com(Col_Add+0);
write_com(Disp_On);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -