LCD測試問題請教

看板ASM (組合語言)作者 (不彥其煩)時間15年前 (2010/10/04 15:11), 編輯推噓1(109)
留言10則, 3人參與, 最新討論串1/1
這次的程式碼經過測試,使用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

10/04 15:55, , 1F
http://0rz.tw/4dkRc 按照DataSheet的第11頁接對比色
10/04 15:55, 1F

10/04 15:55, , 2F
然後作調整
10/04 15:55, 2F

10/04 16:43, , 3F
EA大你貼的DATASHEET網址掛ㄌ看不到,可以麻煩重PO嘛?
10/04 16:43, 3F

10/04 18:30, , 4F
用我家的電腦就可以看的到了 = = 學校的看不到
10/04 18:30, 4F

10/04 18:31, , 5F
先來研究一下 感恩EA大唷~有問題再來問你!!!
10/04 18:31, 5F

10/04 18:35, , 6F
DATASHEET第11頁沒有對比色啊 = =都是黑色ㄉ!
10/04 18:35, 6F

10/05 02:19, , 7F
WriteLCDcmd(0x38); 改成 WriteLCDcmd(0x30); 看看
10/05 02:19, 7F

10/14 08:43, , 8F
改成0X30以後,依然沒有動作捏 = = 是LCM的問題嗎???
10/14 08:43, 8F

10/14 08:44, , 9F
而且程式碼我有在別顆學校教學用的LCM上試過可以用,
10/14 08:44, 9F

10/14 08:44, , 10F
那問題到底出在哪裡呢?是MTC這顆LCM需要外接甚麼嗎?
10/14 08:44, 10F
文章代碼(AID): #1CgNuAFI (ASM)
文章代碼(AID): #1CgNuAFI (ASM)