壓縮包里面12864.H包含相應的函數(shù)聲明,可以根據(jù)自己情況來選擇是否反白,是否采用串口操作12864.C是函數(shù)實現(xiàn)
PORT.H包含12864里面的IO口聲明
SYS.H和sys.c里面包括12864里面所需的延時函數(shù),針對不同的平臺可自己做優(yōu)化。
單片機源程序如下:
- #include<LCD12864.H>
- #if TRANSMISSION_MODE
- //以下為串行傳輸方式
- void LCD12864_PortInit()
- {
- }
- void Lcd12864_SendByte(u8 byte)
- {
- u8 i;
- for(i=0;i<8;i++)
- {
- if((byte&0x80) == 0x80)
- LCD_SDA_SET();
- else
- LCD_SDA_CLR();
- LCD_SCL_SET();
- byte <<=1;
- LCD_SCL_CLR();
- }
- }
- void Lcd12864_Write_Com(unsigned char dataa)
- {
- u8 Hdata,Ldata;
- Hdata=dataa&0xf0;
- Ldata=(dataa<<4)&0xf0;
- Lcd12864_SendByte(0xf8);
- Lcd12864_SendByte(Hdata);
- Lcd12864_SendByte(Ldata);
- }
- void Lcd12864_Write_Data(unsigned char dataa)
- {
- u8 Hdata,Ldata;
- Hdata=dataa&0xf0;
- Ldata=(dataa<<4)&0xf0;
- Lcd12864_SendByte(0xfa);
- Lcd12864_SendByte(Hdata);
- Lcd12864_SendByte(Ldata);
- }
- void Lcd12864_Init(void)
- {
- LCD12864_PortInit();
- Lcd12864_Write_Com(0x30);
- delay_ms(2);
- Lcd12864_Write_Com(0x0c);
- delay_ms(2);
- Lcd12864_Write_Com(0x01);
- delay_ms(2);
- delay_ms(2);
- delay_ms(2);
- delay_ms(2);
- delay_ms(2);
- }
- void Lcd12864_Set_Address(u8 x,u8 y)
- {
- switch(x)
- {
- case 0:Lcd12864_Write_Com(0x80+y);break;
- case 1:Lcd12864_Write_Com(0x90+y);break;
- case 2:Lcd12864_Write_Com(0x88+y);break;
- case 3:Lcd12864_Write_Com(0x98+y);break;
- }
- }
- void Lcd12864_Write_Sring(char *p)
- {
- while(*p!='\0')
- {
- Lcd12864_Write_Data(*p);
- p++;
- }
- }
- #if SET_WHITE
- /******************************************************
- * 功能:反白初始化 *
- * 輸入:無 *
- * 返回:無 *
- ******************************************************/
- void Lcd12864_SetWhite_Init(void)
- {
- u8 i,j;
- Lcd12864_Write_Com(0x36); //寫GDRAM是擴展操作指令
- for(i=0;i<32;i++) //對GDRAM進行清屏操作
- {
- Lcd12864_Write_Com(0x80+i); //先寫入水平做坐標值
- Lcd12864_Write_Com(0x80); //寫入垂直坐標值
- for(j=0;j<16;j++) //寫入兩個8位元的數(shù)據(jù)
- {
- Lcd12864_Write_Data(0x00);
- Lcd12864_Write_Data(0x00);
- }
- }
- Lcd12864_Write_Com(0x36);
- Lcd12864_Write_Com(0x32); //開GPRAM顯示、關(guān)基本指令
- }
- /******************************************************
- * 功能:設置一行16*16字符反白 *
- * 輸入: --> y 反白行 *
- * --> x 開始反白列 *
- * --> endx 結(jié)束反白列 *
- * 返回:無 *
- ******************************************************/
- void Lcd12864_Set1616White(u8 y,u8 x,u8 endx)
- {
- u8 i,j,white_x,white_y,white_endx;
- white_endx = endx-x+1;
- switch(y)
- {
- case 0:
- white_x = 0x80+x;
- white_y = 0x80;
- break;
- case 1:
- white_x = 0x80+x;
- white_y = 0x90;
- break;
- case 2:
- white_x = 0x88+x;
- white_y = 0x80;
- break;
- case 3:
- white_x = 0x88+x;
- white_y = 0x90;
- break;
- }
- Lcd12864_Write_Com(0x36); //GDRAM--ON EXTEND--ON
- for(i=0;i<16;i++)
- {
- Lcd12864_Write_Com(white_y+i);
- Lcd12864_Write_Com(white_x);
- for(j=0;j<white_endx;j++)
- {
- Lcd12864_Write_Data(0xff);
- Lcd12864_Write_Data(0xff);
- }
- }
- Lcd12864_Write_Com(0x36);
- Lcd12864_Write_Com(0x32);
- }
- /******************************************************
- * 功能:設置一行16*08字符反白 *
- * 輸入: --> y 反白行 *
- * --> x 開始反白列 *
- * --> endx 結(jié)束反白列 *
- * 返回:無 *
- ******************************************************/
- void Lcd12864_Set1608White(u8 y,u8 x,u8 endx)
- {
- u8 i,j,white_x,white_y,white_endx;
- x=x/2;
- endx=endx/2;
- white_endx = endx-x+1;
- switch(y)
- {
- case 0:
- white_x = 0x80+x;
- white_y = 0x80;
- break;
- case 1:
- white_x = 0x80+x;
- white_y = 0x90;
- break;
- case 2:
- white_x = 0x88+x;
- white_y = 0x80;
- break;
- case 3:
- white_x = 0x88+x;
- white_y = 0x90;
- break;
- }
- Lcd12864_Write_Com(0x36); //開繪圖顯示
- for(i=0;i<16;i++)
- {
- Lcd12864_Write_Com(white_y+i);
- Lcd12864_Write_Com(white_x);
- for(j=0;j<white_endx;j++)
- {
- if(x%2) //如果開始被2整除,就說明他開始是從0開始,可以寫入0xff,否則寫0x00
- Lcd12864_Write_Data(0x00);
- else
- Lcd12864_Write_Data(0xff);
- if((endx+1)%2) //如果結(jié)尾被2整除,就說明他正好是一個字,就可以寫入0xff ,否則寫0x00
- Lcd12864_Write_Data(0x00);
- else
- Lcd12864_Write_Data(0xff);
- }
- }
- Lcd12864_Write_Com(0x36);
- Lcd12864_Write_Com(0x32);
- }
- /******************************************************
- * 功能:設置一個ASCII字符反白 *
- * 輸入: --> y 反白行 *
- * --> x 反白列 *
- * 返回:無 *
- ******************************************************/
- void Lcd12864_SetAscWhite(u8 y,u8 x)
- {
- u8 i,white_x,white_y,white_endx;
- white_endx=x;
- x=x/2;
- switch(y)
- {
- case 0:
- white_x = 0x80+x;
- white_y = 0x80;
- break;
- case 1:
- white_x = 0x80+x;
- white_y = 0x90;
- break;
- case 2:
- white_x = 0x88+x;
- white_y = 0x80;
- break;
- case 3:
- white_x = 0x88+x;
- white_y = 0x90;
- break;
- }
- Lcd12864_Write_Com(0x36); //開繪圖顯示
- for(i=0;i<16;i++)
- {
- Lcd12864_Write_Com(white_y+i);
- Lcd12864_Write_Com(white_x);
- if(white_endx%2) //如果開始被2整除,就說明他開始是從0開始,可以寫入0xff,否則寫0x00
- {
- Lcd12864_Write_Data(0x00);
- Lcd12864_Write_Data(0xff);
- }
- else
- {
- Lcd12864_Write_Data(0xff);
- Lcd12864_Write_Data(0x00);
- }
- }
- Lcd12864_Write_Com(0x36);
- Lcd12864_Write_Com(0x32); //開GPRAM顯示、關(guān)基本指令
- }
- /******************************************************
- * 功能:清楚一行16*16字符反白 *
- * 輸入: --> y 反白行 *
- * --> x 開始反白列 *
- * --> endx 結(jié)束反白列 *
- * 返回:無 *
- ******************************************************/
- void Lcd12864_Clr1616White(u8 y,u8 x,u8 endx)
- {
- u8 i,j,white_x,white_y,white_endx;
- white_endx = endx-x+1;
- switch(y)
- {
- case 0:
- white_x = 0x80+x;
- white_y = 0x80;
- break;
- case 1:
- white_x = 0x80+x;
- white_y = 0x90;
- break;
- case 2:
- white_x = 0x88+x;
- white_y = 0x80;
- break;
- case 3:
- white_x = 0x88+x;
- white_y = 0x90;
- break;
- }
- Lcd12864_Write_Com(0x36); //GDRAM--ON EXTEND--ON
- for(i=0;i<16;i++)
- {
- Lcd12864_Write_Com(white_y+i);
- Lcd12864_Write_Com(white_x);
- for(j=0;j<white_endx;j++)
- {
- Lcd12864_Write_Data(0x00);
- Lcd12864_Write_Data(0x00);
- }
- }
- Lcd12864_Write_Com(0x36);
- Lcd12864_Write_Com(0x32);
- }
- /******************************************************
- * 功能:清除一行16*08字符反白 *
- * 輸入: --> y 反白行 *
- * --> x 開始反白列 *
- * --> endx 結(jié)束反白列 *
- * 返回:無 *
- ******************************************************/
- void Lcd12864_Clr1608White(u8 y,u8 x,u8 endx)
- {
- u8 i,j,white_x,white_y,white_endx;
- x=x/2;
- endx=endx/2;
- white_endx = endx-x+1;
- switch(y)
- {
- case 0:
- white_x = 0x80+x;
- white_y = 0x80;
- break;
- case 1:
- white_x = 0x80+x;
- white_y = 0x90;
- break;
- case 2:
- white_x = 0x88+x;
- white_y = 0x80;
- break;
- case 3:
- white_x = 0x88+x;
- white_y = 0x90;
- break;
- }
- Lcd12864_Write_Com(0x36); //開繪圖顯示
- for(i=0;i<16;i++)
- {
- Lcd12864_Write_Com(white_y+i);
- Lcd12864_Write_Com(white_x);
- for(j=0;j<white_endx;j++)
- {
- if(x%2) //如果開始被2整除,就說明他開始是從0開始,可以寫入0xff,否則寫0x00
- Lcd12864_Write_Data(0xff);
- else
- Lcd12864_Write_Data(0x00);
- if((endx+1)%2) //如果結(jié)尾被2整除,就說明他正好是一個字,就可以寫入0xff ,否則寫0x00
- Lcd12864_Write_Data(0xff);
- else
- Lcd12864_Write_Data(0x00);
- }
- }
- Lcd12864_Write_Com(0x36);
- Lcd12864_Write_Com(0x32); //開GPRAM顯示、關(guān)基本指令
- }
- /******************************************************
- * 功能:清除一行ASCII字符反白 *
- * 輸入: --> y 反白行 *
- * --> x 開始反白列 *
- * --> endx 結(jié)束反白列 *
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
驅(qū)動程序.zip
(4.72 KB, 下載次數(shù): 137)
2018-12-17 21:35 上傳
點擊文件名下載附件
|