📄 head_12864.h
字号:
//#include "font.h"\
#define LCD_RST (1 <<7) // PA7----RST
#define LCD_CD (1 <<6) // PA6----CD
#define LCD_CE (1 <<5) // PA5----CE
#define LCD_RD (1 << 4) // PA4----RD
#define LCD_WR (1 << 3) // PA3----WR
#define LCD_PORT PORTA //PA口连接到了5个控制脚,具体定义如上
#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_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_DATA_OUT PORTC //LCD数据输出口
#define LCD_DATA_IN PINC //LCD数据输出口
#define LCD_DDR DDRC //LCD数据口方向
/* 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 init_lcd(void);
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 ClearDisplay(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 write_word(byte ww);
void disp_text(char flash * text_adder);
void goto_xy(char xx,char yy);
void goto_wh(void);
void goto_ph(void);
/*--------------------CHECK-------------------------------*/
void check(void)
{
LCD_SET_CD();
LCD_CLEAR_RD();
LCD_SET_WR();
LCD_DDR=0x00;
LCD_DDR=0x00;
LCD_CLEAR_CE();
LCD_SET_CE();
}
/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
check();
LCD_SET_CD();
LCD_CLEAR_WR();
LCD_SET_RD();
LCD_DDR=0xff;
LCD_DATA_OUT=cmdcode;
LCD_CLEAR_CE();
LCD_SET_CE();
}
/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
check();
LCD_CLEAR_CD();
LCD_CLEAR_WR();
LCD_SET_RD();
LCD_DDR=0xff;
LCD_DATA_OUT=Dispdata;
LCD_CLEAR_CE();
LCD_SET_CE();
}
/*-------------------读LCD数据----------------------------*/
unsigned char read_data(void)
{
unsigned char tmpin;
LCD_DDR=0x00;
LCD_SET_WR();
LCD_CLEAR_RD();
LCD_CLEAR_CE();
tmpin=LCD_DATA_IN;
LCD_SET_CE();
return tmpin;
}
/*------------------初始化LCD屏--------------------------*/
void init_lcd(void)
{
LCD_CLEAR_RST();
LCD_SET_RST();
write_com(0X9f); //9f启用图形字符,97关闭图形
write_com(0X80); //逻辑或
write_com(0xa0); //一行光标
write_data(word_home_adder);
write_data(0x00);
write_com(0X40); //文本显示区首地址
write_data(0x10);
write_data(0x00);
write_com(0X41); //文本显示区宽度、
write_data(pic_home_adder);
write_data(0x00);
write_com(0X42); //图形显示区首地址
write_data(0x10);
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 ClearDisplay(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 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_text(char flash * text_adder)
{
while (*text_adder!=0){
write_word(*text_adder);
text_adder++;
}
}
void write_word(byte ww) //写字符,WW为ASCII码
{
ww-=0x20; //ASCII转为内部ROM表
write_data(ww);
write_com(0xc0);
}
void goto_xy(char xx,char yy)
{
write_data(xx+yy*16);
write_data(0x00);
write_com(0x24);
}
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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -