作者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
2F:→ easypro:然後作调整 10/04 15:55
3F:→ maxwellyann:EA大你贴的DATASHEET网址挂ㄌ看不到,可以麻烦重PO嘛? 10/04 16:43
4F:→ maxwellyann:用我家的电脑就可以看的到了 = = 学校的看不到 10/04 18:30
5F:→ maxwellyann:先来研究一下 感恩EA大唷~有问题再来问你!!! 10/04 18:31
6F:→ maxwellyann:DATASHEET第11页没有对比色啊 = =都是黑色ㄉ! 10/04 18:35
7F:推 WolfLord:WriteLCDcmd(0x38); 改成 WriteLCDcmd(0x30); 看看 10/05 02:19
8F:→ maxwellyann:改成0X30以後,依然没有动作捏 = = 是LCM的问题吗??? 10/14 08:43
9F:→ maxwellyann:而且程式码我有在别颗学校教学用的LCM上试过可以用, 10/14 08:44
10F:→ maxwellyann:那问题到底出在哪里呢?是MTC这颗LCM需要外接甚麽吗? 10/14 08:44