智能车制作
标题: tm12864z-1使用,但始终无法显示,附源程序 [打印本页]
作者: gjs0558 时间: 2013-7-27 21:53
标题: tm12864z-1使用,但始终无法显示,附源程序
最近一直在调12864,但是始终无法显示任何东西。希望各位能帮帮忙,纠结很久了。控制芯片MC9S12XS128。
ps:程序并非原创 只是自己稍作修改。
#define LCD_RS PTT_PTT0
#define LCD_RW PTT_PTT1
#define LCD_E PTT_PTT2
uchar Tab1[]={"hello world!"};
uchar Tab2[]={"哈哈哈"};
void delay_10us(long m)
{
while(m--);
}
void delay_1ms(unsigned int t)
{
unsigned int i;
for(i=0;i<t;i++)
delay_10us(102);
}
void Write_Data(unsigned char dat)
{
DDRA = 0xff;
DDRT = 0xff;
DisableInterrupts;
delay_1ms(10);
LCD_RS = 1;
LCD_RW = 0;
delay_10us(5);
LCD_E = 0;
LCD_E = 1;
delay_10us(5);
PORTA = dat;
delay_10us(0);
LCD_E = 0;
LCD_RS = 0;
LCD_RW = 1;
EnableInterrupts;
}
void Write_Command(unsigned char dat)
{
DDRT = 0xff;
DDRA = 0xff;
DisableInterrupts;
delay_1ms(10);
LCD_RS = 0;
LCD_RW = 0;
delay_10us(5);
LCD_E = 0;
LCD_E = 1;
delay_10us(5);
PORTA = dat;
delay_10us(5);
LCD_E = 0;
LCD_RS = 1;
LCD_RW = 1;
EnableInterrupts;
}
void Write_String(unsigned char *p)
{
char cnt=0;
while(*(p+cnt)!='\0')
{
Write_Data(*(p+cnt));
delay_1ms(10);
cnt++;
}
}
void Set_Position(unsigned char x,unsigned char y)
{
unsigned char p;
switch(x%4)
{
case 0:p = 0x80; break;
case 1:p = 0x90; break;
case 2:p = 0x88; break;
case 3:p = 0x98; break;
}
p += y;
Write_Command(p);
}
void LCD_Init()
{
Write_Command(0x30);
delay_1ms(10);
Write_Command(0x0c);
delay_1ms(10);
Write_Command(0x14);
delay_1ms(10);
Write_Command(0x01);
delay_1ms(10);
}
void main(void)
{
PTT_PTT3 = 1;
EnableInterrupts;
delay_1ms(100);
LCD_Init();
Set_Position(0,0);
delay_1ms(10);
Write_String(Tab1);
Set_Position(2,0);
Write_String(Tab2);
for(;;) {}
}
作者: gjs0558 时间: 2013-7-31 17:08
或者提供tm12864z-1可用的程序也行
作者: gjs0558 时间: 2013-8-1 15:27
已解决,该程序没问题。是屏幕对比度的问题,只要在V0和GND(分别对应12864上3管脚和18管脚)之间接一个27k的电阻即可。
作者: 来者天蝎 时间: 2014-5-16 09:53
gjs0558 发表于 2013-8-1 15:27 
已解决,该程序没问题。是屏幕对比度的问题,只要在V0和GND(分别对应12864上3管脚和18管脚)之间接一个27k ...
兄弟,只能加27k的电阻吗???急急急急
欢迎光临 智能车制作 (http://dns.znczz.com/) |
Powered by Discuz! X3.2 |