欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
LCD12864驅動文件(帶字庫+可反白)程序分享
[打印本頁]
作者:
滄浪
時間:
2018-12-17 21:39
標題:
LCD12864驅動文件(帶字庫+可反白)程序分享
壓縮包里面12864.H包含相應的函數聲明,可以根據自己情況來選擇是否反白,是否采用串口操作12864.C是函數實現
PORT.H包含12864里面的IO口聲明
SYS.H和sys.c里面包括12864里面所需的延時函數,針對不同的平臺可自己做優化。
單片機源程序如下:
#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位元的數據
{
Lcd12864_Write_Data(0x00);
Lcd12864_Write_Data(0x00);
}
}
Lcd12864_Write_Com(0x36);
Lcd12864_Write_Com(0x32); //開GPRAM顯示、關基本指令
}
/******************************************************
* 功能:設置一行16*16字符反白 *
* 輸入: --> y 反白行 *
* --> x 開始反白列 *
* --> endx 結束反白列 *
* 返回:無 *
******************************************************/
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 結束反白列 *
* 返回:無 *
******************************************************/
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) //如果結尾被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顯示、關基本指令
}
/******************************************************
* 功能:清楚一行16*16字符反白 *
* 輸入: --> y 反白行 *
* --> x 開始反白列 *
* --> endx 結束反白列 *
* 返回:無 *
******************************************************/
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 結束反白列 *
* 返回:無 *
******************************************************/
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) //如果結尾被2整除,就說明他正好是一個字,就可以寫入0xff ,否則寫0x00
Lcd12864_Write_Data(0xff);
else
Lcd12864_Write_Data(0x00);
}
}
Lcd12864_Write_Com(0x36);
Lcd12864_Write_Com(0x32); //開GPRAM顯示、關基本指令
}
/******************************************************
* 功能:清除一行ASCII字符反白 *
* 輸入: --> y 反白行 *
* --> x 開始反白列 *
* --> endx 結束反白列 *
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
驅動程序.zip
(4.72 KB, 下載次數: 137)
2018-12-17 21:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
lygxnb
時間:
2019-8-26 17:26
謝謝分享
作者:
yuml
時間:
2019-9-9 10:02
樓主可否發個完整例程?
作者:
lrf32535604
時間:
2021-2-1 16:12
樓主,試了一下這個程序,發現16*16的反白效果正常,但是16*8的反白效果不對,如果我讓它從第三個數字到第五個數字反白,第四個就不能正常反白,怎么處理,有建議嗎,謝謝
作者:
lrf32535604
時間:
2021-2-23 14:31
lrf32535604 發表于 2021-2-1 16:12
樓主,試了一下這個程序,發現16*16的反白效果正常,但是16*8的反白效果不對,如果我讓它從第三個數字到第 ...
函數處理后正常了
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1