?? 12232點陣信利液晶基本驅動程序,國內很多122×32的液晶與之完全兼容.txt
字號:
12232點陣信利液晶基本驅動程序,國內很多122×32的液晶與之完全兼容
發表時間:2005-12-13 8:56:54 瀏覽人數:26
/*————————————————————
〖說明〗12232點陣信利液晶基本驅動程序,國內很多122×32的液晶與之完全兼容,
該液晶左右分MASTER和SLAVE,上下共分4頁,左邊列地址從0-61,
右邊列地址從0-61,由于芯片內部線路的落后,所以使用較麻煩。
〖文件〗12232lcd.c ﹫2001/03/23
〖作者〗龍嘯九天 c51@yeah.net http://mcs51.yeah.net
〖修改〗修改建議請到論壇公布 http://c51bbs.yeah.net
〖版本〗V1.00A Build 0323
—————————————————————*/
#define E2 P3_5
#define E1 P3_6
#define A0 P3_7
#define DATA P2
/*----------------------------------------------------------------------------
調用方式:void OutMI(uchar i)
函數說明:發指令i到主窗口。(內函數,私有,用戶不直接調用)
------------------------------------------------------------------------------*/
void OutMI(uchar i)
{
E1=1;_nop_();_nop_();
A0=0;_nop_();_nop_();
DATA=i;_nop_();_nop_();
E1=0;_nop_();_nop_();
}
/*------------------------------------------------------------------------------
--
調用方式:void OutMD(uchar i)
函數說明:發數據i到主窗口。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void OutMD(uchar i)
{
E1=1;_nop_();_nop_();
A0=1;_nop_();_nop_();
DATA=i;_nop_();_nop_();
E1=0;_nop_();_nop_();
}
/*------------------------------------------------------------------------------
--
調用方式:void OutSI(uchar i)
函數說明:發指令i到從窗口。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void OutSI(uchar i)
{
A0=0;_nop_();_nop_();
E2=1;_nop_();_nop_();
DATA=i;_nop_();_nop_();
E2=0;_nop_();_nop_();
}
/*------------------------------------------------------------------------------
--
調用方式:void OutSD(uchar i)
函數說明:發數據i到從窗口。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void OutSD(uchar i)
{
A0=1;_nop_();_nop_();
E2=1;_nop_();_nop_();
DATA=i;_nop_();_nop_();
E2=0;_nop_();_nop_();
}
/*------------------------------------------------------------------------------
--
調用方式:void LcdIni(void)
函數說明:12232點陣液晶初始化,開機后僅調用一次。
--------------------------------------------------------------------------------
-*/
void LcdIni(void)
{
OutMI(0XE2);OutSI(0XE2);//復位
OutMI(0XAE);OutSI(0XAE);//POWER SAVE
OutMI(0XA4);OutSI(0XA4);//動態驅動
OutMI(0XA9);OutSI(0XA9);//1/32占空比
OutMI(0XA0);OutSI(0XA0);//時鐘線輸出
OutMI(0XEE);OutSI(0XEE);//寫模式
OutMI(0X00);OutMI(0XC0);
OutSI(0X00);OutSI(0XC0);
OutMI(0XAF);OutSI(0XAF);
}
/*------------------------------------------------------------------------------
--
調用方式:void SetPage(uchar page0,uchar page1)
函數說明:同時設置主從顯示頁為0-3頁。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void SetPage(uchar page0,uchar page1)
{
OutMI(0xB8|page1);OutSI(0xB8|page0);
}
/*------------------------------------------------------------------------------
--
調用方式:void SetAddress(uchar address0,uchar address1)
函數說明:同時設置主從列地址為0-121。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void SetAddress(uchar address0,uchar address1)
{
OutMI(address1&0x7F);OutSI(address0&0x7F);
}
/*------------------------------------------------------------------------------
--
調用方式:void PutChar0(uchar ch)
函數說明:在左頁當前地址畫一個字節8個點。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void PutChar0(uchar ch)
{
OutSD(ch);
}
/*------------------------------------------------------------------------------
--
調用方式:void PutChar1(uchar ch)
函數說明:在右頁當前地址畫一個字節8個點。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void PutChar1(uchar ch)
{
OutMD(ch);
}
/*------------------------------------------------------------------------------
--
調用方式:void DrawBmp(uchar x,bit layer,uchar width,uchar *bmp)
函數說明:畫一個圖,橫坐標是x,layer表示上下層,width是圖形的寬,高都是16,bmp是
圖形指針
使用zimo21軟件,采用縱向取模得到bmp數據。
--------------------------------------------------------------------------------
-*/
void DrawBmp(uchar x0,bit layer,uchar width,uchar *bmp)
{
uchar x,address,i=0; //address表示顯存的物理地址
uchar page=0;
bit window=0; //page表示上下兩頁,window表示左右兩頁
if (layer) page=2;
for (x=x0;x {
if (x>60) {window=1;address=x%61;}
else address=x;
SetPage(page,page);
SetAddress(address,address);
if (window) PutChar1(bmp[i]);
else PutChar0(bmp[i]);//畫上層
SetPage(page+1,page+1);
SetAddress(address,address);
if (window) PutChar1(bmp[i+width]);
else PutChar0(bmp[i+width]);//畫下層
i++;
}
}
/*------------------------------------------------------------------------------
--
調用方式:void clrscr(void)
函數說明:清屏
--------------------------------------------------------------------------------
-*/
void clrscr(void)
{
uchar i;
uchar page;
for (page=0;page<4;page++)
{
SetPage(page,page);
SetAddress(0,0);
for (i=0;i<61;i++){PutChar0(0);PutChar1(0);}
}
}
請教斑竹,疑問???? [haotz] [121次] 01-3-24 下午 09:54:11
/*-------------------------------------------------------------------------
-----
--
調用方式:void DrawBmp(uchar x,bit layer,uchar width,uchar *bmp)
函數說明:畫一個圖,橫坐標是x,layer表示上下層,width是圖形的寬,高都是16,
bmp是
圖形指針
使用zimo21軟件,采用縱向取模得到bmp數據。
---------------------------------------------------------------------------
-----
-*/
void DrawBmp(uchar x0,bit layer,uchar width,uchar *bmp)
{
uchar x,address,i=0; //address表示顯存的物理地址
uchar page=0;
bit window=0; //page表示上下兩頁,window表示左右兩頁
if (layer) page=2;
for (x=x0;x60) {window=1;address=x%61;}
else address=x; //??????????哪來的else
SetPage(page,page);
SetAddress(address,address);
if (window) PutChar1(bmp[i]);
else PutChar0(bmp[i]);//畫上層
SetPage(page+1,page+1);
SetAddress(address,address);
if (window) PutChar1(bmp[i+width]);
else PutChar0(bmp[i+width]);//畫下層
i++;
} ///???????????? 哪來的"}"
}
??!我比較了一下,原來的代碼不是這樣的,可能是論壇的bug,把莫些C的操作符號認作HTML符號了。我會想辦法修正 [龍嘯九天] [48次] 01-3-24 下午 10:04:32
謝謝! [haotz] [20次] 01-3-24 下午 10:29:57
源代碼修正版>> [龍嘯九天] [369次] 01-4-16 下午 09:12:28
/*————————————————————
〖說明〗12232點陣信利液晶基本驅動程序,國內很多122×32的液晶與之完全兼容,
該液晶左右分MASTER和SLAVE,上下共分4頁,左邊列地址從0-61,
右邊列地址從0-61,由于芯片內部線路的落后,所以使用較麻煩。
〖文件〗12232lcd.c ﹫2001/03/23
〖作者〗龍嘯九天 c51@yeah.net http://mcs51.yeah.net
〖修改〗修改建議請到論壇公布 http://c51bbs.yeah.net
〖版本〗V1.00A Build 0323
—————————————————————*/
#define E2 P3_5
#define E1 P3_6
#define A0 P3_7
#define DATA P2
/*----------------------------------------------------------------------------
調用方式:void OutMI(uchar i)
函數說明:發指令i到主窗口。(內函數,私有,用戶不直接調用)
------------------------------------------------------------------------------*/
void OutMI(uchar i)
{
E1=1;_nop_();_nop_();
A0=0;_nop_();_nop_();
DATA=i;_nop_();_nop_();
E1=0;_nop_();_nop_();
}
/*------------------------------------------------------------------------------
--
調用方式:void OutMD(uchar i)
函數說明:發數據i到主窗口。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void OutMD(uchar i)
{
E1=1;_nop_();_nop_();
A0=1;_nop_();_nop_();
DATA=i;_nop_();_nop_();
E1=0;_nop_();_nop_();
}
/*------------------------------------------------------------------------------
--
調用方式:void OutSI(uchar i)
函數說明:發指令i到從窗口。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void OutSI(uchar i)
{
A0=0;_nop_();_nop_();
E2=1;_nop_();_nop_();
DATA=i;_nop_();_nop_();
E2=0;_nop_();_nop_();
}
/*------------------------------------------------------------------------------
--
調用方式:void OutSD(uchar i)
函數說明:發數據i到從窗口。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void OutSD(uchar i)
{
A0=1;_nop_();_nop_();
E2=1;_nop_();_nop_();
DATA=i;_nop_();_nop_();
E2=0;_nop_();_nop_();
}
/*------------------------------------------------------------------------------
--
調用方式:void LcdIni(void)
函數說明:12232點陣液晶初始化,開機后僅調用一次。
--------------------------------------------------------------------------------
-*/
void LcdIni(void)
{
OutMI(0XE2);OutSI(0XE2);//復位
OutMI(0XAE);OutSI(0XAE);//POWER SAVE
OutMI(0XA4);OutSI(0XA4);//動態驅動
OutMI(0XA9);OutSI(0XA9);//1/32占空比
OutMI(0XA0);OutSI(0XA0);//時鐘線輸出
OutMI(0XEE);OutSI(0XEE);//寫模式
OutMI(0X00);OutMI(0XC0);
OutSI(0X00);OutSI(0XC0);
OutMI(0XAF);OutSI(0XAF);
}
/*------------------------------------------------------------------------------
--
調用方式:void SetPage(uchar page0,uchar page1)
函數說明:同時設置主從顯示頁為0-3頁。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void SetPage(uchar page0,uchar page1)
{
OutMI(0xB8|page1);OutSI(0xB8|page0);
}
/*------------------------------------------------------------------------------
--
調用方式:void SetAddress(uchar address0,uchar address1)
函數說明:同時設置主從列地址為0-121。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void SetAddress(uchar address0,uchar address1)
{
OutMI(address1&0x7F);OutSI(address0&0x7F);
}
/*------------------------------------------------------------------------------
--
調用方式:void PutChar0(uchar ch)
函數說明:在左頁當前地址畫一個字節8個點。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void PutChar0(uchar ch)
{
OutSD(ch);
}
/*------------------------------------------------------------------------------
--
調用方式:void PutChar1(uchar ch)
函數說明:在右頁當前地址畫一個字節8個點。(內函數,私有,用戶不直接調用)
--------------------------------------------------------------------------------
-*/
void PutChar1(uchar ch)
{
OutMD(ch);
}
/*------------------------------------------------------------------------------
--
調用方式:void DrawBmp(uchar x,bit layer,uchar width,uchar *bmp)
函數說明:畫一個圖,橫坐標是x,layer表示上下層,width是圖形的寬,高都是16,bmp是
圖形指針
使用zimo21軟件,采用縱向取模得到bmp數據。
--------------------------------------------------------------------------------
-*/
void DrawBmp(uchar x0,bit layer,uchar width,uchar *bmp)
{
uchar x,address,i=0; //address表示顯存的物理地址
uchar page=0;
bit window=0; //page表示上下兩頁,window表示左右兩頁
if (layer) page=2;
for (x=x0;x<x0+width;x++)
{
if (x>60) {window=1;address=x%61;}
else address=x;
SetPage(page,page);
SetAddress(address,address);
if (window) PutChar1(bmp[i]);
else PutChar0(bmp[i]);//畫上層
SetPage(page+1,page+1);
SetAddress(address,address);
if (window) PutChar1(bmp[i+width]);
else PutChar0(bmp[i+width]);//畫下層
i++;
}
}
/*------------------------------------------------------------------------------
--
調用方式:void clrscr(void)
函數說明:清屏
--------------------------------------------------------------------------------
-*/
void clrscr(void)
{
uchar i;
uchar page;
for (page=0;page<4;page++)
{
SetPage(page,page);
SetAddress(0,0);
for (i=0;i<61;i++){PutChar0(0);PutChar1(0);}
}
}
急!板注:我用了你的源代碼,可是他是在左右屏同時顯示一樣的字符的,我只想顯示一屏,怎么修改? [keilc51] [7次] 01-9-10 上午 11:46:28
檢查cs信號(E1,E2)的處理,你可能把左右兩塊同時打開了? [曉奇] [1次] 01-9-10 下午 12:39:26
在每個子函數里,E1,E2選中后都會關掉,應該不會是這個問題吧。 [keilc51] [4次] 01-9-10 下午 02:42:44
可能是什么問題呢?誰能看看龍版注的程序? [keilc51] [2次] 01-9-10 下午 06:03:41
我可沒有在左右屏同時顯示一樣的字符,你是不是在硬件上把兩個片選E1/E2接一起了? [龍嘯九天] [2次] 01-9-10 下午 09:23:51
沒有呀,如果我要顯示超過4個漢字時(16*16),右邊屏的漢字同時會在左屏顯示,而且把左屏原來的漢字覆蓋了。 [keilc51] [4次] 01-9-11 上午 09:33:01
以下是我的主程序,再請大蝦幫我看一下: [keilc51] [30次] 01-9-12 上午 10:18:37
void main()
{
uint j;
LcdIni(); //reset
clrscr(); //
for(j=0;j<6;j++)
DrawBmp(16*j,0,16,table+32*j); //table為字模表格首址,顯示六個漢字
while (1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -