?? head_12864.h~
字號(hào):
//#include "font.h"\
#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) //PA----CLK
#define LCD_PORT PORTA //PA口連接到了5個(gè)控制腳,具體定義如上
#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 LCD_DATA_OUT PORTC //LCD數(shù)據(jù)輸出口
#define LCD_DATA_IN PINC //LCD數(shù)據(jù)輸出口
#define LCD_DDR DDRA //LCD數(shù)據(jù)口方向
/* 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();
}
/*------------------寫(xiě)命令到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();
}
/*-------------------寫(xiě)數(shù)據(jù)到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數(shù)據(jù)----------------------------*/
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_DDR=0xff;
LCD_CLEAR_RST();
LCD_SET_RST();
write_com(0X9f); //9f啟用圖形字符,97關(guān)閉圖形
write_com(0X80); //邏輯或
write_com(0xa0); //一行光標(biāo)
write_data(word_home_adder);
write_data(0x00);
write_com(0X40); //文本顯示區(qū)首地址
write_data(0x10);
write_data(0x00);
write_com(0X41); //文本顯示區(qū)寬度、
write_data(pic_home_adder);
write_data(0x00);
write_com(0X42); //圖形顯示區(qū)首地址
write_data(0x10);
write_data(0x00);
write_com(0X43); //圖形顯示區(qū)寬度
}
/*void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
unsigned char SelscP,unsigned char num,unsigned char flag)//Add:顯示數(shù)據(jù)的起始地址
{ 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:數(shù)據(jù)起始位置
//com:空位置個(gè)數(shù),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) //寫(xiě)字符,WW為ASCII碼
{
ww-=0x20; //ASCII轉(zhuǎn)為內(nèi)部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);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -