📄 head_12864.h~
字号:
//修改PORTA控制脚,PORTC数据脚,
//注意在lcd_init()中有管脚初始化,在使用时注意不要修改管脚输入输出状态。
#define LCD_WR (1 << 0) // PA0----WR
#define LCD_RD (1 << 1) // PA1----RD
#define LCD_CE (1 << 2) // PA2----CE
#define LCD_CD (1 << 3) // PA3----CD
#define LCD_RST (1 << 4) // PA4----RST
#define LCD_SDATA (1 << 5) //PA5---SDATA
#define LCD_CLK (1 << 6) //PA6----CLK
#define LCD_PORT PORTA //PA口连接到了5个控制脚,具体定义如上
#define LCD_DDR DDRA //LCD数据口方向
#define LCD_SET_RST() (LCD_PORT |= LCD_RST) // 位置位,输出1
#define LCD_SET_CD() (LCD_PORT |= LCD_CD)
#define LCD_SET_CE() (LCD_PORT |= LCD_CE)
#define LCD_SET_RD() (LCD_PORT |= LCD_RD)
#define LCD_SET_WR() (LCD_PORT |= LCD_WR)
#define LCD_SET_SDATA() (LCD_PORT |= LCD_SDATA)
#define LCD_SET_CLK() (LCD_PORT |= LCD_CLK)
#define LCD_CLEAR_RST() (LCD_PORT &= ~LCD_RST) // 位清零,输出0
#define LCD_CLEAR_CD() (LCD_PORT &= ~LCD_CD)
#define LCD_CLEAR_CE() (LCD_PORT &= ~LCD_CE)
#define LCD_CLEAR_RD() (LCD_PORT &= ~LCD_RD)
#define LCD_CLEAR_WR() (LCD_PORT &= ~LCD_WR)
#define LCD_CLEAR_SDATA() (LCD_PORT &= ~LCD_SDATA)
#define LCD_CLEAR_CLK() (LCD_PORT &= ~LCD_CLK)
/* Define the register command code */
#define Disp_On 0x9f
#define Disp_Off 0x90
//#define Col_Add 0x40
//#define Page_Add 0xb8
#define Start_Line 0xc0
//#define byte unsigned char
#define word_home_adder 0x00
#define pic_home_adder 0x80
void check(void);
void write_com(unsigned char cmdcode);
void write_data(unsigned char Dispdata);
void lcd_init(char width);
unsigned char read_data(void);
//void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
//unsigned char SelscP,unsigned char num,unsigned char flag);
//void DisplayLine(unsigned int Add,unsigned char com,unsigned char line,unsigned char flag);
void lcd_clear(void);
void lcd_clear_word(void);
void lcd_clear_pic(void);
//void Test(unsigned int lcd_data);
//void Testlcd2(unsigned char lcd_datah,unsigned char lcd_datal);
void disp_picture(flash char * pic_adder);
void disp_picture_disappear(flash char * pic_adder);
void lcd_putchar(byte ww);
void lcd_putsf(char flash * text_adder);
void lcd_gotoxy(char xx,char yy);
void lcd_gotoxy_pic(char xx,char yy);
void goto_wh(void);
void goto_ph(void);
void lcd_putpoint(byte xx,byte yy);
void lcd_clearpoint(byte xx,byte yy);
void select_menu(byte x_begin,byte y_begin,byte xx,byte yy);
/*--------------------CHECK-------------------------------*/
/*void check(void)
{
LCD_SET_CD();
LCD_CLEAR_RD();
LCD_SET_WR();
LCD_DATA_DDR=0x00;
LCD_DATA_DDR=0x00;
LCD_CLEAR_CE();
LCD_SET_CE();
}*/
/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
//check();
byte i;
LCD_DDR=0xff;
LCD_SET_CD();
LCD_CLEAR_WR();
LCD_SET_RD();
//LCD_DATA_OUT=cmdcode;
for (i=0;i<8;i++)
{
if (cmdcode & 0x01) LCD_SET_SDATA();
else LCD_CLEAR_SDATA();
LCD_SET_CLK();
LCD_CLEAR_CLK();
cmdcode=cmdcode>>1;
}
LCD_CLEAR_CE();
LCD_SET_CE();
}
/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
//check();
byte i;
LCD_DDR=0xff;
LCD_CLEAR_CD();
LCD_CLEAR_WR();
LCD_SET_RD();
LCD_DDR=0xff;
//LCD_DATA_OUT=Dispdata;
for (i=0;i<8;i++)
{
if (Dispdata & 0x01) LCD_SET_SDATA();
else LCD_CLEAR_SDATA();
LCD_SET_CLK();
LCD_CLEAR_CLK();
Dispdata=Dispdata>>1;
}
LCD_CLEAR_CE();
LCD_SET_CE();
}
/*-------------------读LCD数据----------------------------*/
/*unsigned char read_data(void)
{
unsigned char tmpin;
LCD_DATA_DDR=0x00;
LCD_SET_WR();
LCD_CLEAR_RD();
LCD_CLEAR_CE();
tmpin=LCD_DATA_IN;
LCD_SET_CE();
return tmpin;
}*/
/*------------------初始化LCD屏--------------------------*/
void lcd_init(char width)
{
LCD_PORT=0xff;
LCD_DDR=0xff;
LCD_CLEAR_RST();
LCD_SET_RST();
write_com(0X9c); //9f启用图形字符,97关闭图形
write_com(0X81); //逻辑或80 81异或
write_com(0xa0); //一行光标
write_data(word_home_adder);
write_data(0x00);
write_com(0X40); //文本显示区首地址
write_data(width);
write_data(0x00);
write_com(0X41); //文本显示区宽度、
write_data(pic_home_adder);
write_data(0x00);
write_com(0X42); //图形显示区首地址
write_data(width);
write_data(0x00);
write_com(0X43); //图形显示区宽度
}
/*void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
unsigned char SelscP,unsigned char num,unsigned char flag)//Add:显示数据的起始地址
{ unsigned char i,m=0,dat; //xAdd,yAdd:显示位置
switch (SelscP)
{case 0:LCD_SET_CS1();
LCD_SET_CS2();
break;
case 1:LCD_SET_CS1();
LCD_CLEAR_CS2();
break;
case 2:LCD_CLEAR_CS1();
LCD_SET_CS2();
break;
} //SelscP:选择屏1,2,3
write_com(xAdd++); //x首地址 //mun显示宽度,一般为16
write_com(yAdd); //y首地址 //flag:是否清字位1不清
while(m<num+2)
{ for(i=0;i<num;i++)
{ if(flag==0) dat=0;
else dat=font[Add+i+m];
write_data(dat);
}
write_com(xAdd++);
write_com(yAdd);
m+=num;
}
}
void DisplayLine(unsigned int Add,unsigned char com,unsigned char line,unsigned char flag)
{ unsigned char i,p,l,r; //Add:数据起始位置
//com:空位置个数,4字为满
r=com&0x0f; //line: 显示行位置
l=4-com; //flag:是否清字符1不清
for(i=0;i<r;i++)
DisplayWord(Add+i*32,0xb8+(line%4)*2,0x40+(i+l)*16,(line/4)+1,16,flag);
}*/
void lcd_clear(void)
{ unsigned char i,j;
goto_wh();
for(i=0;i<8;i++)
{
for(j=0;j<16;j++)
{
write_data(0x00);
write_com(0xc0);
}
}
goto_ph();
for(i=0;i<64;i++)
{
for(j=0;j<16;j++)
{
write_com(0xb0);
write_data(0x00);
write_com(0xb2);
}
}
}
void lcd_clear_word(void)
{ unsigned char i,j;
goto_wh();
for(i=0;i<8;i++)
{
for(j=0;j<16;j++)
{
write_data(0x00);
write_com(0xc0);
}
}
}
void lcd_clear_pic(void)
{ unsigned char i,j;
goto_ph();
for(i=0;i<64;i++)
{
for(j=0;j<16;j++)
{
write_com(0xb0);
write_data(0x00);
write_com(0xb2);
}
}
}
/*void Test(unsigned int lcd_data)
{unsigned int K;
write_com(0x01);
write_com(0x40);
for(K=0;K<148;K++)
{write_data(lcd_data);
}
}
void Testlcd2(unsigned char lcd_datah,unsigned char lcd_datal)
{write_data(lcd_datal);
delay_ms(1);
write_data(lcd_datah);
}*/
void disp_picture(flash char * pic_adder)
{
unsigned char i,j;
//goto_ph();
for (i=0;i<64;i++)
for (j=0;j<16;j++)
{
write_com(0xb0);
write_data(*pic_adder);
pic_adder++;
write_com(0xb2);
}
}
void disp_picture_disappear(flash char * pic_adder)
{
unsigned char i=0,j=0,k=0,l=0;
byte temp_adder;
temp_adder=pic_adder;
goto_ph();
pic_adder=temp_adder;
for (i=0;i<64;i++)
for (j=0;j<16;j++)
{
write_com(0xb0);
write_data(*pic_adder);
pic_adder++;
write_com(0xb2);
}
for (i=0;i<3;i++)
{
lcd_gotoxy(0,7);
lcd_putsf("Initializing");
for (l=0;l<=i;l++) lcd_putchar('.');
for (j=0;j<16;j++)
for (k=0;k<255;k++)
lcd_clearpoint(rand()%128,rand()%64);
lcd_clearpoint(rand()%128,rand()%64);
}
}
void lcd_putsf(char flash * text_adder)
{
while (*text_adder!=0){
lcd_putchar(*text_adder);
text_adder++;
}
}
void lcd_putchar(byte ww) //写字符,WW为ASCII码
{
ww-=0x20; //ASCII转为内部ROM表
write_data(ww);
write_com(0xc0);
}
void lcd_putnum(long int n) //写数字
{
byte num[8];
byte i=0;
for (i=0;i<8;i++) {num[i]=n%10;n=n/10;}
for (i=0;i<8;i++){ lcd_putchar(num[7-i]+0x30);}
}
void lcd_gotoxy(char xx,char yy)
{
write_data(xx+yy*16);
write_data(0x00);
write_com(0x24);
}
void lcd_gotoxy_pic(char xx,char yy)
{
unsigned int adder;
byte adderh=0,adderl=0;
adder=(pic_home_adder+(int)(yy)*16+xx);
adderl=adder;
adderh=adder>>8;
write_data(adderl);
write_data(adderh);
write_com(0x24);
}
void lcd_set_cursor(byte xx,byte yy)
{
write_data(xx);
write_data(yy);
write_com(0x21);
}
void lcd_show_cursor(void)
{
write_com(0X9F);
}
void lcd_noshow_cursor(void)
{
write_com(0X9D);
}
void goto_wh(void)
{
write_data(word_home_adder);
write_data(0x00);
write_com(0x24);
}
void goto_ph(void)
{
write_data(pic_home_adder);
write_data(0x00);
write_com(0x24);
}
void lcd_putpoint(byte xx,byte yy)
{
unsigned int adder;
byte adderh=0,adderl=0;
adder=(pic_home_adder+(int)(yy)*16+(int)(xx)/8);
adderl=adder;
adderh=adder>>8;
write_data(adderl);
write_data(adderh);
write_com(0x24);
write_com(0xff-(xx%8));
}
void lcd_clearpoint(byte xx,byte yy)
{
unsigned int adder;
byte adderh=0,adderl=0;
adder=(pic_home_adder+(int)(yy)*16+(int)(xx)/8);
adderl=adder;
adderh=adder>>8;
write_data(adderl);
write_data(adderh);
write_com(0x24);
write_com(0xf7-(xx%8));
}
void select_menu(byte x_begin,byte y_begin,byte xx,byte yy)
{
byte i,j;
for(i=0;i<yy;i++)
{
lcd_gotoxy_pic(x_begin,y_begin+i);
write_com(0x24);
for(j=0;j<xx;j++)
{
write_com(0xb0);
write_data(0xff);
write_com(0xb2);
}
}
}
void no_select_menu(byte x_begin,byte y_begin,byte xx,byte yy)
{
byte i,j;
for(i=0;i<yy;i++)
{
lcd_gotoxy_pic(x_begin,y_begin+i);
for(j=0;j<xx;j++)
{
write_com(0xb0);
write_data(0x00);
write_com(0xb2);
}
}
}
void lcd_character(flash byte *c,byte x,byte y)
{
unsigned char i,j;
for (i=0;i<16;i++)
{
lcd_gotoxy_pic(x*2,y+i);
for (j=0;j<2;j++)
{
write_com(0xb0);
write_data(*c);
c++;
write_com(0xb2);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -