?? 1602液晶模塊驅動.txt
字號:
呵呵 放假就變懶了 要不是看見佳哥還在學校夜以繼日的抵抗洪澇災害的同時還在為我國的電子事業添磚加瓦,刻苦攻關,我估計到了開學,1602的新驅動也寫不出來。呵呵 不過經過半個下午的瘋狂抄襲別人的成果,終于搞定了。
不過我發現人家寫的程序真的好難看懂,最重要的是……運行不出結果。
結果在我把它的程序全部改了一遍,只留下了大的框架函數的聲明和注釋……呵呵 這分明就是我自己寫的程序嘛,說是抄的還真是說不通,本來是想偷懶的,誰知道原來寫程序那個大哥當時怎么得到正確結果的,反正我是想不通,看來是個世外高人。
呵呵 這個驅動差不多了,該繼續研究串口通信那個一團麻的程序了,又是一個難啃的石頭呀……
--附程序 慶祝一下 呵呵~
#pragma small
#include<AT89X52.H>
#include<absacc.h>
#define Uchar unsigned char
#define Uint unsigned int
sbit Busy=P0^7;
sbit RS=P1^2;
sbit RW=P1^0;
sbit E=P1^1;
//長延時
void DELAY10(void)
{
unsigned char i,j,k;
for(i=1;i>0;i--)
for(j=254;j>0;j--)
for(k=208;k>0;k--)
;
}
// 短延時
void Delay5Ms(void)
{
Uint i = 3252;
while(i--);
}
void ENABLE(void)
{
RS=0;
RW=0;
E=0;
Delay5Ms();
E=1;
}
void ENABLE2(void)
{
RS=1;
RW=0;
E=0;
Delay5Ms();
E=1;
}
void LcdWriteData(char u)
{
// while(Busy);
P0=u;
ENABLE2();
}
/*=======================================================
寫控制字符子程序: E=1 RS=0 RW=0
=======================================================*/
void LcdWriteCommand( Uchar CMD,Uchar AttribC )
{
//其中attribc表示是否檢測忙信號
if (AttribC) while(Busy);
P0=CMD;
ENABLE();
}
/*=======================================================
顯示光標定位
=======================================================*/
void LocateXY( char posx,char posy){
Uchar tmpchar;
if (posy==0) {
tmpchar=0x80;
}
else{
tmpchar=0x0C0;
}
tmpchar=tmpchar+posx;
LcdWriteCommand(tmpchar,0);
}
/*=======================================================
按指定位置顯示數出一個字符
=======================================================*/
void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {
LocateXY(x,y); // 定位顯示地址
LcdWriteData(Wdata); // 寫字符
}
/*=======================================================
初始化程序, 必須按照產品資料介紹的初始化過程進行
=======================================================*/
void LcdReset( void ) {
LcdWriteCommand( 0x38, 0); // 顯示模式設置(不檢測忙信號)
Delay5Ms();
LcdWriteCommand( 0x38, 0); // 共三次
Delay5Ms();
LcdWriteCommand( 0x38, 0);
Delay5Ms();
LcdWriteCommand( 0x01, 1); // 顯示清屏
LcdWriteCommand( 0x38, 1); // 顯示模式設置(以后均檢測忙信號)
LcdWriteCommand( 0x0f, 1); // 顯示關閉
LcdWriteCommand( 0x06, 1); // 顯示光標移動設置
}
/*=======================================================
顯示字符串
=======================================================*/
void ePutstr(Uchar x,Uchar y, Uchar *p) {
Uchar Xi,Yi;
Xi=x;Yi=y;
while (*p!=0){
DispOneChar(Xi,Yi,*p);
Xi++;
*p++;
if (Xi==16) {
Xi=0;
Yi++;
}
if (Yi==2) {
Yi=0;
}
}
}
void main(void)
{
char exampl[]="this is a example program by dfrog for LCD display model 1602";
DELAY10(); // 啟動時必須的延時,等待lcm進入工作狀態
DELAY10();
DELAY10();
DELAY10();
LcdReset(); // 這也是必需的....初始化
ePutstr(0,1,exampl); // 上面一行顯示一個預定字符串
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -