作者maxwellyann (不彥其煩)
看板ASM
標題LCD測試問題請教
時間Mon Oct 4 15:11:03 2010
這次的程式碼經過測試,使用LCD(STC2A16DRG-P)顯示正常,不過使用LCD(MTC-16101X)
卻無法正常顯示,在電源部份有接可變電阻,RS RW E接P1_0~3,LCD IO接P2,可是MTC
這顆LCD依然屹立不搖,完全不給我面子,只出現了八格黑色,想請教各位大大,為什麼M
TC這顆LCD不會動呢?是硬體部分漏了什麼嘛?還是我哪裡遺漏了什麼嘛?請各位大大指導!
(這程式碼只是為了測試LCD是否能夠正常顯示,按鍵只是附加!)
程式碼如下:
#include <at89x52.h>
#define RS P1_0
#define RW P1_1
#define Enable P1_2
//sbit P1_0 = 0xa0;
//sbit P1_1 = 0xa1;
//sbit P1_2 = 0xa2;
void delay(void);
void InitialLCD(void);
void WriteLCDcmd(char);
void WriteLCDdata(char);
void WriteLCDstring(char,char *);
void CheckBusy(void);
void KeyScan(void);
void firstLCD(void);
int KeyData=0xff;
int KeyTemp=0xff;
int user_phone[10]={0,9,3,7,1,2,3,4,5,6};
char one=0;
char zero=0;
unsigned char code MSG1[]="HELLO USER";
unsigned char code MSG2[]="User PhoneCell";
unsigned char code MSG3[]="0937123456";
unsigned char code MSG4[]="11111";
unsigned char code MSG5[]="22222";
unsigned char code MSG6[]="33333";
main()
{
InitialLCD();
WriteLCDcmd(0x01);
WriteLCDstring(10,MSG1);
delay();
while(1)
{
if(P3_0!=0xff)
{
WriteLCDcmd(0x01);
WriteLCDstring(14,MSG2);
delay();
}
else if(P3_1!=0xff)
{
WriteLCDcmd(0x01);
WriteLCDstring(10,MSG3);
delay();
}
else if(P3_2!=0xff)
{
WriteLCDcmd(0x01);
WriteLCDstring(5,MSG4);
delay();
}
else if(P3_3!=0xff)
{
WriteLCDcmd(0x01);
WriteLCDstring(5,MSG5);
delay();
}
else if(P3_4!=0xff|P3_5!=0xff
|P3_6!=0xff|P3_7!=0xff)
{
WriteLCDcmd(0x01);
delay();
}
}
}
void InitialLCD(void)
{
WriteLCDcmd(0x38);
WriteLCDcmd(0x38);
WriteLCDcmd(0x38);
WriteLCDcmd(0x38);
WriteLCDcmd(0x08); /* off display */
WriteLCDcmd(0x01); /* clear buffer */
WriteLCDcmd(0x0e); /* on display */
WriteLCDcmd(0x06); /* set input mode */
} /* InitialLCD */
void WriteLCDcmd(char instruction)
{
RS=0;
RW=0;
Enable=1;
P2=instruction;
Enable=0;
CheckBusy();
} /* WriteIns */
void WriteLCDdata(char i)
{
RS=1;
RW=0;
Enable=1;
P2=i;
Enable=0;
CheckBusy();
} /* WriteData */
void WriteLCDString(count,MSG)
char count;
char MSG[];
{
char i;
for(i=0;i<count;i++)
WriteLCDdata(MSG[i]);
} /* WriteString */
void CheckBusy(void)
{
char i=0x80;
while(i&0x80)
{
RS=0;
RW=1;
Enable=1;
i=P2;
Enable=0;
delay();
}
} /* CheckBusy */
void delay(void)
{
int i;
for(i=0;i<500;i++)
;
}
void KeyScan(void) //鍵盤掃描
{
int KeyStatus;
P3=0xff;
KeyStatus=~P3;
if(KeyStatus==0x01) //有按鍵輸入
{
one=0;
if(KeyTemp!=KeyStatus) //與上次鍵值不同
{
KeyTemp=KeyStatus; //儲存未除彈跳鍵值
zero=1;
}
else //與上次鍵值相同
{
zero+=1;
if(zero==5) //偵測已按下按鍵5次
KeyData=KeyTemp;//儲存鍵值
}
}
one+=1;
if(one==5) //偵測已釋放按鍵5次?
{
zero=0;
KeyTemp=0xff; //清除鍵值
KeyData=0xff; //清除鍵值
}
}/* KeyScan */
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.96.47.187
→ easypro:然後作調整 10/04 15:55
→ maxwellyann:EA大你貼的DATASHEET網址掛ㄌ看不到,可以麻煩重PO嘛? 10/04 16:43
→ maxwellyann:用我家的電腦就可以看的到了 = = 學校的看不到 10/04 18:30
→ maxwellyann:先來研究一下 感恩EA大唷~有問題再來問你!!! 10/04 18:31
→ maxwellyann:DATASHEET第11頁沒有對比色啊 = =都是黑色ㄉ! 10/04 18:35
推 WolfLord:WriteLCDcmd(0x38); 改成 WriteLCDcmd(0x30); 看看 10/05 02:19
→ maxwellyann:改成0X30以後,依然沒有動作捏 = = 是LCM的問題嗎??? 10/14 08:43
→ maxwellyann:而且程式碼我有在別顆學校教學用的LCM上試過可以用, 10/14 08:44
→ maxwellyann:那問題到底出在哪裡呢?是MTC這顆LCM需要外接甚麼嗎? 10/14 08:44